我已经搜索并找到了很多关于在子表单上使用requery的信息,但我似乎找不到任何表明尝试使用新记录集重新查询活动表单的信息。
我有一个基于查询的表单。我使用未绑定的文本框来捕获需要搜索的地址,然后更改查询中的sql语句以查找记录,然后尝试使用me.requery加载新结果。
代码正在更新sql语句,但表单不会使用新记录结果进行重新查询。我的代码如下。
我对访问和VBA相当新,并欣赏你可能拥有的任何智慧。另外,我可以在其他代码中做什么,这会导致它失败吗?
Private Sub Command51_Click()
Dim d As DAO.Database
Dim q As DAO.QueryDef
Dim Addy As String
Dim Search As String
Set d = CurrentDb()
Set q = d.QueryDefs("SQL_Search")
If IsNull(Me!Addy) Then
MsgBox ("Please select a valid address from the list and try again.")
GoTo CleanUp
Else: End If
Addy = Me!Addy
Search = "select * from dbo_ECNumberVerify Where (((dbo_ECNumberVerify.invalidrecord)=False) AND ((dbo_ECNumberVerify.updated)=False) AND ((dbo_ECNumberVerify.Locations) Like '*" & Addy & "*'));"
'Send SQL SP execute command.
q.SQL = Search
Me.Requery
CleanUp:
Set q = Nothing
Set db = Nothing
End Sub
答案 0 :(得分:1)
在您的示例中,您有一个查询,但查询永远不会设置或附加到表单记录源中的任何方式"。因此,“查询”独立于表单数据源。
你可以简单地将sql直接填充到表格reocrdsouce中,如下所示:
Me.RecordSource = Search
(因此您不需要所有现有代码,也不需要queryDef。
当您按照上面的方式直接设置表单SQL时,将自动为您执行重新查询。所以所需的代码如下所示:
Dim strSearch As String
If IsNull(Me.Addy) Then
MsgBox ("Please select a valid address fromthe list and try again.")
Exit Sub
End If
strSearch = "select * from dbo_ECNumberVerify WHERE " & _
"(invalidrecord = False) AND (updated = False) AND " _
"(Locations Like '*" & Addy & "*')"
Me.RecordSource = strSearch
因此,您不需要太多代码,而且您根本不需要使用+声明querydef。