MS Access:子表格数据表 - 可变记录源

时间:2017-11-02 22:49:35

标签: ms-access access-vba

我有一个子窗体数据表,其RecordSource可以是变量。我的数据库根据用户选择(每个查询的不同列集合)构造SQL查询。生成的查询旨在成为子窗体上数据表的RecordSource。 (用户的只读视图)

问题:

各种查询在自己运行时产生所需的结果 将结果查询设置为数据表的RecordSource不会产生任何结果(没有列/行)

我怀疑我需要将查询的属性插入到子窗体中才能看到任何结果(很像菜单条中的“添加现有字段”)。

问题:

有什么指示让我离开原点吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

从子表单对象中删除数据表表单,并将源对象属性保留为空。 创建一个新查询(sql并不重要),并将其命名为qryTemp(或任何你喜欢的)。 然后,只要您想设置子表单的源,请使用此

CurrentDb.QueryDefs("qryTemp").SQL = "<your new sql here>"
<yoursubformobject>.SourceObject = "Query.qryTemp".

答案 1 :(得分:0)

以下是我用来填充子表单的示例:

Private Sub cmdFind_DisplayName_Click()
    Dim dbs As Database, rstPatient As Recordset
    Dim txtDisplayName, strQuote As String
    strQuote = Chr$(34)
    On Error GoTo ErrorHandler

    Me.OrderBy = "DISPLAYNAME"
    Me.OrderByOn = True

    Set dbs = CurrentDb
    Set rstPatient = Me.RecordsetClone
    txtDisplayName = Trim(InputBox("Please Enter Patient Name ", "Patient Find By Name"))
    txtDisplayName = UCase(txtDisplayName) & "*"
    If IsNull(txtDisplayName) Then
        MsgBox ("No Patient Name Entered - Please Enter a Valid Patient Name")
    Else
        rstPatient.FindFirst "[DISPLAYNAME] Like " & strQuote & txtDisplayName & strQuote
        If Not (rstPatient.NoMatch) Then
            Me.Bookmark = rstPatient.Bookmark
            Me.Refresh
        Else
            MsgBox ("Patient Not Found - Please Enter a New Patient Name")
        End If
    End If

    GoTo Exit_cmdFind_Click

    ErrorHandler:
        MsgBox LTrim(RTrim(Me.NAME)) + "." + "Patient Find By Display Name - " + "Error: " + AccessError(Err.Number)

    Exit_cmdFind_Click:
      rstPatient.Close
      Set dbs = Nothing
      Set rstPatient = Nothing
End Sub