【发布时间】:2014-05-17 08:57:54
【问题描述】:
我有一个表单Main,上面有一个子表单Issue。为了在Main 上实现搜索功能,以便用户可以在Issue 中搜索具有给定子字符串的记录,Main 有一个文本框keyword 和一个提交按钮SubmitBtn。这是我用来尝试完成这项工作的 VBA 代码:
Private Sub SubmitBtn_Click()
Dim keyword As String
Dim recordSourceSql As String
keyword = Nz(Me.keyword.value)
recordSourceSql = "select * from [Issue] where [Details] like " & quoteWrap(keyword)
Me.Issue.Form.RecordSource = recordSourceSql
Me.Issue.Form.Requery
End Sub
Private Function quoteWrap(value As String) As String
quoteWrap = "'*" & value & "*' "
End Function
问题在于这一行之后:
Me.Issue.Form.RecordSource = recordSourceSql
Issue 中只有一条记录显示——它是原始记录集中的第一条记录,而我测试的值应该至少有 20 条记录显示为keyword。一旦发生这种情况,Me.Issue.Form.Requery 调用不会更改Issue 的内容。
我知道正在创建正确的recordSourceSQL,因为当我输入keyword 的“数据”时,我得到recordSourceSQL 的这个字符串:
select * from [Issue] where [Details] like '*data*'
当我在 Access 中创建查询并将其设置为 SQL 时,我得到了返回的所有正确结果。
根据给定条件搜索子表单的代码有什么问题?
更新:我可以通过将Me.Issue.Form.Filter 设置为recordSourceSql 中的WHERE 子句来实现此功能。我不明白为什么 .Filter 有效,但更改 .RecordSource 无效。
更新 2:.Filter 解决方案也不起作用。我已经在this SO question 中描述了这个问题。
【问题讨论】:
-
在
Requery之后添加Me.Issue.Form.Refresh有效吗? -
@enderland,不,结果相同。同样,在调用
Requery之前,表单的内容已经发生了变化。 -
另外 - 这甚至是如何运行的?此行对 VBA 代码
recordSourceSql = "select * from [Issue] where "[Details] like " & quoteWrap(keyword)无效——它与"不匹配。我不确定它是如何工作的,你有一个来自 [详细信息] 的额外信息。 -
@enderland,抱歉,打错了。我将删除 [Details] 前面的 "。
-
您的子表单是否以某种方式绑定到父表单?未显示的记录是否因为您正在进行的绑定而被过滤掉?
标签: sql vba ms-access ms-access-2010