需要将查询中的多个结果传递回一个备忘录单元格

时间:2015-09-21 19:46:07

标签: sql vba ms-access

我几天都在网上寻找完成以下方法的方法,我祈祷一些专家可以帮我搞清楚!我有一个客户端想要根据查询结果通过拉入各种文本语句来动态构建运送“批准”电子邮件。发货详细信息将在一个表中,并且语句将在另一个表中。每批货物可能会返回多个报表(例如,几个培训报表,几个一般报表)。需要将这些语句中的每一个添加到备忘单元(创建用于保存每种类型的语句)中,然后将其提取到该货件的电子邮件模板中。表结构如下。

Shipment_Table
*ID
*Shipment Type - Query Criteria 
*Material Category - Query Criteria 
*Permit Required - Query Criteria 
*General Statement (memo field to hold all general statements that match criteria)
*Training Statement (memo field to hold all training statements that match criteria)
*Approval Statement (memo field to hold all approval statements that match criteria)

Statement_Table
*Statement Type (e.g. General, Training, Approval)
*Shipment Type - Query Criteria 
*Material Category - Query Criteria 
*Permit Required - Query Criteria 

我成功地有一个查询(标题为StatementSearch),它连接两个并引入正确的语句。我无法弄清楚如何获取多个查询结果并将它们附加到发货的备忘单元格中。

接近的代码如下。它似乎正确地运行我的查询并返回结果,但是没有将结果放入我的测试记录的备注字段中(ID = 1只是为了测试代码,它最终将运行一个表单并且语句将生成点击一个按钮)。

我希望这不会太混乱!

Option Explicit

Function StatementUpdate()

Dim dbs As DAO.Database
Dim rstStatements As DAO.Recordset
Dim rstCBG As DAO.Recordset

Set dbs = CurrentDb()
Set rstStatements = dbs.OpenRecordset("StatementSearch")
Set rstCBG = dbs.OpenRecordset("select [St_General]from
[Cross_Border_Grid_Table] where [ID]= 1")

rstCBG.MoveFirst
'loop through each record in the CBG that matches select query
Do Until rstCBG.EOF
    rstStatements.MoveFirst
    Do Until rstStatements.EOF
        rstCBG.Edit
        rstCBG![St_General] = rstStatements
        rstCBG.Update
    rstStatements.MoveNext
    Loop
    rstCBG.MoveNext
    Loop

rstCBG.Close
rstStatements.Close

Set rstStatements = Nothing
Set rstCBG = Nothing
Set dbs = Nothing

Debug.Print "Done"

End Function

1 个答案:

答案 0 :(得分:0)

试试这个循环

Dim concStatement as String
rstCBG.MoveFirst

Do Until rstCBG.EOF
    concStatement = ""
    rstStatements.MoveFirst
    Do Until rstStatements.EOF
        concStatement = concStatement & vbCrLF & rstStatements(0)
        rstStatements.MoveNext
    Loop

    rstCBG.Edit
    rstCBG![St_General] = concStatement 
    rstCBG.Update
    rstCBG.MoveNext
Loop

我认为,你的" StatementSearch"是一个根据ID = 1查找所有语句的查询。如果有多个记录集" rstCBG",则必须在每个循环步骤中重新查询rstStatements。

修改

将rstStatement更改为rstStatement(0)。

同样rstStatements(0)可能是错误的:将index = 0更改为查询中字段的索引。如上所述,查询在您的问题中不可见,因此我不知道正确的索引号。