Day*_*ron 3 ms-access vba access-vba ms-access-2010
我正在努力使搜索客户表单访问2010年.
我喜欢基于查询搜索的选项组.我做了一个搜索查询,寻找名字或姓氏.表单上还有两个文本框,用于填充查询输入(名字和姓氏)
我需要选项组,以便我可以选择结果名称进行预订.
在过去,我使用子表单和复选框间接地做了这个.然后在子窗体和复选框上加载两个结果(重新查询),以便用户只需选中复选框.但这一次我希望选项本身就是查询结果!请帮忙.
Gor*_*son 10
这是一个使用列表框的简单示例:
表:客户
ID - 自动编号
LastName - 文本(255)
FirstName - 文本(255)
电子邮件 - 文本(255)
测试数据:
ID LastName FirstName Email
-- ---------- -------------- ------------------
1 Thompson Gord gord@example.com
2 Loblaw Bob bob@example.com
3 Kingsley Hank hank@example.com
4 Thompson Hunter S. hunter@example.com
5 Squarepants Spongebob ss@example.com
6 O'Rourke P. J. pj@example.com
7 Aldrin Edwin "Buzz" buzz@example.com
Run Code Online (Sandbox Code Playgroud)
表格布局:

此表单的VBA模块:
Option Compare Database
Option Explicit
Private Sub Form_Load()
Me.lstSearchResults.RowSource = ""
End Sub
Private Sub btnSearch_Click()
Me.lstSearchResults.SetFocus
Me.lstSearchResults.Value = Null
Me.lstSearchResults.RowSource = _
"SELECT ID, LastName, FirstName FROM Clients " & _
"WHERE LastName LIKE ""*" & DQ(Me.txtSearchLastName.Value) & _
"*"" AND FirstName LIKE ""*" & DQ(Me.txtSearchFirstName.Value) & "*"""
End Sub
Private Function DQ(s As Variant) As String
' double-up double quotes for SQL
DQ = Replace(Nz(s, ""), """", """""", 1, -1, vbBinaryCompare)
End Function
Private Sub btnLookupEmail_Click()
If IsNull(Me.lstSearchResults.Value) Then
Me.txtEmail.Value = ""
Else
Me.txtEmail.Value = DLookup("Email", "Clients", "ID=" & Me.lstSearchResults.Value)
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
首次打开表单时,一切都是空的.

键入"thompson"(不带引号)并单击btnSearch以使用客户端填充列表框WHERE LastName LIKE "*thompson*".(如果你看一下代码,你会看到,它也将匹配名字,如果你提供一个).

选择列表框中的一个项目,然后单击btnLookupEmail,电子邮件地址将显示在下面的文本框中.
