我有一个用于输入联系人的表单,其中包含几个子表单,其中许多代表多对多关系。我希望用户能够通过其子表单中的值搜索联系人。
具有讽刺意味的是,对于那些代表多对多关系的子表单,我实际上有一个很好的功能解决方案-通常,那些子表单给我带来最大的麻烦!问题是,我正在使用的解决方案使用组合框,因此允许用户仅按下拉列表中可用的确切值进行搜索。这就是我的意思:
Private Sub cboSourceSearch_Afterupdate()
Dim strSQL As String
If Isnull(Me.cboSourceSearch) Then
Me.Parent.RecordSource = "people"
Else
strSQL = "SELECT DISTINCTROW people.* FROM people " & "INNER JOIN people_has_sourceref ON " & "people.personID = people_has_sourceref.people_personID " & "WHERE people_has_sourceref.sourceref_sourceID = " & Me.cboSourceSearch & ";"
Me.Parent.RecordSource = strSQL
End If
End Sub
(改编自http://allenbrowne.com/ser-28.html)
本质上,此VBA是从组合框中的值设置主窗体的RecordSource的,组合框的行源是“ sourceref”表-多对多关系中的第三个。这很好用,但是如果我想通过联系人留下的笔记进行搜索怎么办?该表称为“笔记”,并且与“人”(联系人)具有多对一关系。这是一个自由格式的文本块,用于输入与联系人有关的注释。
我对它的工作原理有一个大致的了解,从理论上讲,它应该比上述方法更容易:只需基于一个SQL查询设置主窗体的RecordSource,该SQL查询将在Notes表中搜索通配符侧。但是,我无法提出解决方案。这主要是由于我缺乏VBA知识,但是我正在学习。