0

在 SQL 数据库中,我有一个表,Table1. 此表与另一个表相关,而另一个表Table2又与Table3. 有一个查询Query1从 中选择某些记录Table1

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

表单Table1Data基于Table1,数据表包含相关Table2数据(以及随后的Table3数据)。此表单由另一个表单 ( Switchboard) 打开。打开表单时出现问题。我希望表单被过滤,但是当我设置一个宏并打开表单并将过滤器设置为 时Query1,表单中的数据没有被过滤。为什么会发生这种情况,这不是这样做的方法吗?Query1从 中选择所有列Table1,因此不匹配的列应该不是问题。

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

4

1 回答 1

0

我首选的解决方案是在 Form Open 事件中设置记录源。这使我能够最大程度地控制正在发生的事情。

这是我这样做的样板。它还包括查找调用表单时传递的 OpenArgs。如果您不想从 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
于 2009-06-10T16:23:00.600 回答