【问题标题】:RecordSet and Ms Access 2007记录集和访问女士 2007
【发布时间】:2015-03-12 19:49:07
【问题描述】:

我有一个查询,其 CustID 具有多个附属于该 CustID 的业务。我不能使用 Dlookup,因为它只返回一个变量。我想在一个表格上显示这个 custID,这里是它附属的所有企业。我希望企业显示在表单上另一个表格的字段(企业)中。

我是从这个开始的

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 替换发生的位置联系在一起,以及您必须如何将其作为数据表放在表单上?

【问题讨论】:

    标签: ms-access vba ms-access-2007


    【解决方案1】:

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

    【讨论】:

    • 谢谢,如果你把这些字段放在一个表单上,你能把它们也拉到一个报告中吗?另外,我们可以输入 Where CustID = ["Form name"] 的查询吗?
    • 只要动态进行查询,就可以将其放入查询中。我将添加一个编辑来展示如何做到这一点。
    • 谢谢OpiesDad,在我把它放到一个模块中之后,我如何才能真正让它显示在一个表单中?我是否只是创建一个文本框并将其绑定到单击事件?
    • 这就是这一行的作用 “Forms!MyForm.MyField = StrBusinesses” 您需要将“MyForm”和“MyField”替换为您想要的相关表单和字段。只需在表单上创建一个文本框来保存它。否则,如果您使用 option1,那么您将拥有一个列表框。然后,您只需将 listbox.recordsource 设置为等于您所做的查询,它将包含所需的信息。
    • 另外,对于qd.SQL,我可以写一个有多个左连接的sql查询代码吗?因为 FROM tblebusinesses 实际上是从多个表中提取的。 @opiesdad
    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多