您不需要 DLookup。你可以做以下两件事之一:
1) 使用列表框并将记录源设置为等于您的查询(假设 Q:businesses 已被适当定义为结果为业务)
2) 仍然需要您的查询是适当的,但您可以创建一个包含所有业务的字符串:
Public Sub OpenRecordset()
Dim db As Database
Dim rs As Recordset
Dim StrBusinesses As String
Set db = CurrentDb
Set rs = db.OpenRecordset("qryBusinesses")
If rs.EOF and rs.BOF Then
MsgBox("No businesses exist for this Customer")
Exit Sub 'Or do whatever else you want if there are no matches
Else
rs.MoveFirst
End If
StrBusinesses = ""
Do While Not rs.EOF
StrBusinesses = StrBusinesses & rs!Business & ", "
rs.movenext
Loop
rs.Close
StrBusinesses = Left(StrBusinesses, Len(StrBusinesses) - 2)
Forms!MyForm.MyField = StrBusinesses 'Set the field equal to the string here
Set rs = Nothing
db.Close
End Sub
当然,这假设查询“Q:Business”被定义为获取适当的信息,例如:
SELECT custID, business FROM tblBusinesses WHERE custID = X
其中“X”是您要查找的客户 ID。
如果需要动态设置查询,则需要设置 querydef。
编辑以包含查询定义代码****************************
还在上面和下面的代码中将查询的名称更改为“qryBusinesses”,因为我不确定您是否可以在其中使用冒号进行查询。
要设置查询定义,请将其放在代码的开头:
Dim qdf As QueryDef
Set qdf = CurrentDb.QueryDefs("qryBusinesses")
qdf.SQL = "SELECT custID, business FROM tblBusinesses" _
& " WHERE custID = " & Forms!MyForm.CustID 'replace with actual form and field
这假设 i) qryBusinesses 已经存在,
ii) custID 是一个数字字段
编辑**************
如果将查询定义为查看表单本身,则不需要设置 sql,因此如果查询被定义(在 VBA 中或通过查询向导)为:
qdf.sql = "SELECT custID, business FROM tblBusinesses" _
& " WHERE custID = Forms!MyForm.CustID"
那么您就不需要重新定义 sql。但是,将 custID 放入 qdf 本身会更加动态,因为它更容易调试任何问题,因为您可以看到在原始方法中运行的确切 sql。