2009-06-09 100 views
0

在SQL数据库中,我有一个表,Table1。该表与另一个表Table2有关,后者又与Table3有关。有一个查询Query1,它从Table1中选择某些记录。在Access中过滤窗体中的子窗体

这个数据库链接到一个Access数据库项目

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

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

回答

0

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

这是我做这件事的样板。它还包括查找调用表单时传递的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 
+0

您是否有一个示例宏OpenForm操作导致此运行以及基于它的变量集? – SamWM 2009-06-11 06:49:21

相关问题