Sql server 筛选Access中包含子窗体的窗体

Sql server 筛选Access中包含子窗体的窗体,sql-server,ms-access,ms-access-2007,Sql Server,Ms Access,Ms Access 2007,在SQL数据库中,我有一个表,Table1。此表与另一个表相关,表2,该表又与表3相关。有一个查询Query1,它从表1中选择某些记录 此数据库链接到Access数据库项目中的 表格Table1Data基于Table1,数据表包含相关Table2数据(以及随后的Table3数据)。此表单由另一个表单(交换机)打开。打开表单时会出现问题。我希望筛选表单,但当我设置宏并打开表单并将筛选器设置为Query1时,表单中的数据不会被筛选。为什么会这样,难道不是这样吗查询1选择表1中的所有列,因此不匹配列不

在SQL数据库中,我有一个表,
Table1
。此表与另一个表相关,
表2
,该表又与
表3
相关。有一个查询
Query1
,它从
表1
中选择某些记录

此数据库链接到Access数据库项目中的

表格
Table1Data
基于
Table1
,数据表包含相关
Table2
数据(以及随后的
Table3
数据)。此表单由另一个表单(
交换机
)打开。打开表单时会出现问题。我希望筛选表单,但当我设置宏并打开表单并将筛选器设置为
Query1
时,表单中的数据不会被筛选。为什么会这样,难道不是这样吗<代码>查询1选择表1中的所有列,因此不匹配列不应成为问题


此外,我想锁定它-只有某些人可以执行
Query1
,与其他查询相同(
Query2
Query3
等)。因此,他们只能编辑允许编辑的数据。

我的首选解决方案是以Open event的形式设置recordsource。这让我对正在发生的事情有了最大的控制权

这是我做这件事的样板。它还包括查找在调用表单时传递的OpenArg。如果不希望在SQL中指定调用表单中的任何内容,则可以注释掉或删除If/Then语句

Private Sub Form_Open(Cancel As Integer)
    ' Comments  :
    ' Parameters: Cancel -
    ' Modified  :
    ' --------------------------------------------------

    On Error GoTo Err_Form_Open

    Dim strSQL As String
    Dim strVariable As String
    Dim strDateVariable As String
    Dim dteDateVariable As String
    Dim i As Integer
    Dim n As Integer

    'Get variables from Left and right of | in OpenArgs
    If Not (IsNull(Me.OpenArgs)) Then

        i = InStr(1, Me.OpenArgs, "|")
        n = Len(Me.OpenArgs)

        strVariable = Left(Me.OpenArgs, n - (n - i + 1))

        strDateVariable = Right(Me.OpenArgs, (n - i))

        dteDateVariable = CDate(strDateVariable)

    Else

        GoTo Exit_Form_Open

    End If

    strSQL = "SELECT   ... " _
           & "FROM     ... " _
           & "WHERE (((Field1)='" & strVariable & "') " _
           & "  AND  ((Field2)=#" & dteDateVariable & "#));"

    Me.RecordSource = strSQL

    Me.Requery

Exit_Form_Open:

    Exit Sub

Err_Form_Open:

    Select Case Err.Number
        Case Else
            Call ErrorLog(Err.Number, Err.Description, "Form_Open", "frmName", Erl)
            GoTo Exit_Form_Open
    End Select

End Sub

您是否有一个宏OpenForm操作的示例,该操作会导致此运行以及在此基础上设置的变量?请尽快远离宏。它们缺乏通用性,并且没有纠错功能。宏是为新手准备的。在使用Access几周后,您不应该创建任何内容,但需要创建的两个功能(AutoExec和AutoKeys)除外。当您打开问题中描述的表单Table1数据时,OpenForm操作将启动。代码将执行将Recordsource设置为SQL字符串的操作,然后.Requery将根据新的Recordsource绘制表单。此外,我同意David Fenton的观点,即不应使用宏,但我甚至不会在AutoExec和AutoKeys中使用宏,因为我只是找到解决这些问题的其他方法。