Ms access MS Access-使子窗体显示单独的查询结果

Ms access MS Access-使子窗体显示单独的查询结果,ms-access,vba,Ms Access,Vba,首先,请注意,我需要对这篇文章中的信息做一个相当“一般”的描述,因为它与工作相关 目前在MS Access中,我有一个数据库,它使用一个大的表来存储数据(比如说tblDATASHEET)以及其他表。查询用于使用类型\u id选择相关的特定列 从列表框中搜索用户,并收集类型\u id 例如,如果type_id=TYP1,则运行qryTYP1。 qryTYP1可能需要tblDATASHEET中的第1、2、5、6和11列。 qryTYP2可能只需要tblDATASHEET中的第3、4和5列 这一切都很

首先,请注意,我需要对这篇文章中的信息做一个相当“一般”的描述,因为它与工作相关

目前在MS Access中,我有一个数据库,它使用一个大的表来存储数据(比如说tblDATASHEET)以及其他表。查询用于使用类型\u id选择相关的特定列

从列表框中搜索用户,并收集类型\u id

例如,如果type_id=TYP1,则运行qryTYP1qryTYP1可能需要tblDATASHEET中的第1、2、5、6和11列。 qryTYP2可能只需要tblDATASHEET中的第3、4和5列

这一切都很好。因此,当搜索用户并运行相应的查询时,将显示该用户的记录列表。从这里,我希望能够创建/编辑显示的记录

这是我的问题,在tblDATASHEET的查询结果中,当开始/添加新行时,我希望从上一行自动填充某些字段。这些字段是通用字段,如名称、标题、日期等。这是否可能

如果我说得太简短,请告诉我,我可以进一步详细说明。我花了很多时间研究VBA和数据宏,已经很接近了,但还不够接近

谢谢,, Dre24

编辑 因此,我决定采用在表单的子表单中显示查询结果的方法

现在我的问题是,如何使子窗体根据输入显示备用查询

例如,子窗体可能需要显示来自qryTYP1qryTYP2的结果,这两个查询都是独立的


再次感谢您的帮助。

您可以在带有搜索结果的表单上添加“复制到新记录”之类的按钮。单击此按钮捕获找到的行的ID,滚动到/添加/插入新的空记录,并将所需数据从找到的记录复制到新记录。

以下是如何使用按钮单击复制记录:

Private Sub btnCopy_Click()

  Dim rstSource   As DAO.Recordset
  Dim rstInsert   As DAO.Recordset
  Dim fld         As DAO.Field

  If Me.NewRecord = True Then Exit Sub

  Set rstInsert = Me.RecordsetClone
  Set rstSource = rstInsert.Clone
  With rstSource
    If .RecordCount > 0 Then
      ' Go to the current record.
      .Bookmark = Me.Bookmark
      With rstInsert
        .AddNew
          For Each fld In rstSource.Fields
            With fld
              If .Attributes And dbAutoIncrField Then
                ' Skip Autonumber or GUID field.
              ElseIf .Name = "SomeFieldNotToCopy" Then
                ' Ignore this field.
              ElseIf .Name = "SomeSpecialField" Then
                ' Insert fixed or special value.
                rstInsert.Fields(.Name).Value = SomeValue
              Else
                ' Copy field content.
                rstInsert.Fields(.Name).Value = .Value
              End If
            End With
          Next
        .Update
        ' Go to the new record and sync form.
        .MoveLast
        Me.Bookmark = .Bookmark
        .Close
      End With
    End If
    .Close
  End With

  Set rstInsert = Nothing
  Set rstSource = Nothing

End Sub

当您说您正在运行qryTYP1或qryTYP2时,您是否正在打开一个已保存的查询对象供用户开始向其中添加数据?如果是这样,也许考虑打开这些形式或子形式代替…最近,我回答了一个问题,并提供了一些有关如何执行此操作的指导:有更多活动可供您在窗体/子窗体中编写VBA代码。嗨,Matt,谢谢您的帮助。没错。我曾考虑过使用带有子表单的表单来显示结果,但例如,一个查询可能会显示6列,下一个查询可能会显示40列,我不知道如何使用表单/子表单以一种直观的方式来实现这一点,我认为查询结果通常是处理这一问题的最佳方式。但是,您认为这是(使用窗体和子窗体)的最佳方式吗?谢谢,德瑞,我想是的。窗体/子窗体上有许多事件供您编写VBA代码,当您认为窗体/子窗体是为用户交互而设计的,因此开发人员需要许多选项来控制用户交互时,这是有意义的。另一方面,查询对象实际上并不打算用作用户界面,因此开发人员可以处理的事件很少(如果有的话)。查询对象更多的是用于创建现有数据的视图,而不是通过用户交互收集/编辑新数据的方式。谢谢Sergey。目前我指的只是显示的查询结果,所以不是在表单/子表单中。不过,我现在正在考虑这种方法,可能会使用这种方法,所以谢谢你。谢谢古斯塔夫。我现在正在考虑使用表单/子表单方法来显示数据,因此这将非常有用。谢谢您的帮助。您认为这是使用表单/子表单的最佳方法吗?目前我正在运行查询并在另一个选项卡中将其显示为查询结果。是的,我建议这样做。