在SQL数据库中,我有一个表Table1
。此表与另一个表Table2
相关,而Table3
又与Query1
相关。有一个查询Table1
可以从Table1Data
中选择某些记录。
此数据库链接到Access数据库项目
表单Table1
基于Table2
,其中的数据表包含相关的Table3
数据(以及随后的Switchboard
数据)。此表单由另一种表单(Query1
)打开。打开表单时出现问题。我希望过滤表单,但是当我设置宏并打开表单并将过滤器设置为Query1
时,表单中的数据不会被过滤。为什么会发生这种情况,这不是这样做的方法吗? Table1
会选择Query1
中的所有列,因此不匹配的列不应成为问题。
此外,我想将其锁定 - 只有某些人可以执行Query2
,与其他查询(Query3
,{{1}}等相同。因此,他们只能编辑允许编辑的数据。
答案 0 :(得分: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