2009-06-09 86 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