记录集和 Ms Access 2007

RecordSet and Ms Access 2007

我有一个查询,其中包含 CustID 以及与 CustID 关联的多个业务。我不能使用 Dlookup,因为它只有 returns 一个变量。我想在一个表格上显示,对于这个 custID,这是它附属的所有企业。我希望企业显示在表格中另一个 table 的字段(企业)中。

我是从这里开始的

Public Sub OpenRecordset()


Dim db As Database
Dim rs As Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("Q:businesses")
Do While Not rs.EOF
T:Custinfo!business = NAME (I am lost in between on how to identify the custid and place the businesses into the table field as a Dlookup)

rs.movenext
Loop
rs.Close
Set rs = Nothing
db.Close


End Sub

我一直在查看其他示例,但似乎无法将 dlookup 替换发生的位置联系在一起,您将如何将其作为数据表放在表格中?

您不需要 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。

编辑以包含 querydef 代码*********************** 还在上面和下面的代码中将查询名称更改为 "qryBusinesses",因为我不确定您是否可以在其中使用冒号进行查询。

要设置 querydef,请将其放在代码的开头:

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。