【问题标题】:Access VBA Loop through Query help通过查询帮助访问 VBA 循环
【发布时间】:2011-08-10 11:28:14
【问题描述】:

我有一个表单 (Cobind_frmMain),它允许用户创建一个附加到它的标题池。所以有一个顶级池名称(TopLvlPoolName),在子表单上,标题被添加到它。我需要的是为每个标题发布一份报告。我已经设置好了报告和查询。现在,报告将在一个文件中显示所有标题。标题位于名为“CatCode”的字段中。

我需要的是以下内容:
1. 将每个标题另存为 PDF 并保存到我们的服务器。
2. 打开电子邮件并附上 PDF。
3. 重复直到完成所有标题。

编辑: 这是我目前所拥有的代码,但我仍然收到的错误消息是:Set Recordset 行上的“参数太少”。我正在尝试在 strSQL 行中设置参数。我希望 PartPoolName(在 Cobind_qryReport 中,一个查询)等于打开表单上的 TopLvlPoolName。 Cobind_qryReport 的 SQL 如下所示:

Private Sub btn_Run_Click()
Dim db As DAO.Database  
Dim rs As DAO.Recordset  
Dim strSQL As String  
Set db = CurrentDb  

strSQL = "Select * FROM Cobind_qryReport WHERE PartPoolName = " & Me.TopLvlPoolName

Set rs = db.OpenRecordset(strSQL)

On Error GoTo Err_PO_Click

If MsgBox("Do you wish to issue the cobind invites?", vbYesNo + vbQuestion, "Confirmation Required") = vbYes Then

 rs.MoveFirst

  Do While Recordset.EOF = False

    DoCmd.OutputTo acOutputReport, "Cobind_rptMain", acFormatPDF, "K:\OB MS Admin\Postage\CoBind Opportunities\Sent Invites\" & [CatCode] & "_" & [PartPoolName] & "Cobind Invite_" & Format(Now(), "mmddyy") & ".pdf"

    DoCmd.SendObject acSendReport, "Cobind_rptMain", acFormatPDF, , , , [CatCode] & "_" & [PartPoolName] & " Cobind Invite", "Please find the cobind invite attached. Response is needed by " & [RSVP] & ". Thank you.", True

    Recordset.MoveNext

  Loop

End If


Exit_PO_Click:
    MsgBox ("It didn't work")
    Exit Sub

Err_PO_Click:
    MsgBox Err.Description
    Resume Exit_PO_Click
End Sub

Cobind_qryReport SQL:
选择 tblEvents.EventTitle、Cobind_tblPartic.CatCode、Cobind_tblPartic.CodeQty、Cobind_tblPartic.PartPoolName、Cobind_tblTopLvl.RSVP、Cobind_tblPartic.ID 从 Cobind_tblTopLvl,Cobind_tblPartic 内部加入 tblEvents ON Cobind_tblPartic.CatCode = tblEvents.EventCode 按 tblEvents.EventTitle、Cobind_tblPartic.CatCode、Cobind_tblPartic.CodeQty、Cobind_tblPartic.PartPoolName、Cobind_tblTopLvl.RSVP、Cobind_tblPartic.ID 分组 按 Cobind_tblPartic.ID 订购;

再次感谢您的帮助!

【问题讨论】:

  • 请确保并指定 Dim 语句的类型。它将为您节省心痛和跑步时间。
  • 对不起 - 我不明白 Option Explicit。我到底要把它放在哪里?

标签: ms-access vba loops


【解决方案1】:

您的查询Cobind_qryReport 有一个您需要设置的参数。如果您想知道参数名称,请尝试以下代码

   Dim qdf As QueryDef
   Set qdf = CurrentDb.QueryDefs("Cobind_qryReport")

    If qdf.Parameters.Count > 0 Then
        MsgBox (qdf.Parameters(0).Name)
    End If

更新 既然你知道你有一个参数在做select * from Cobind_qryReport,那么设置参数然后使用 qdf 打开记录集可能会更容易,例如

   Dim rs as DAO.Recordset
   Dim qdf As QueryDef
   Set qdf = CurrentDb.QueryDefs("Cobind_qryReport")

   qdf.Parameters(0).Value = 7832
   Set foo = qdf.OpenRecordset()

注意:设置参数值时可以用参数名代替序号

例如qdf.Parameters("Foo").value = 7832

【讨论】:

  • +1 如果查询包含多个参数,最好使用qdf.Parameters.Count > 0 ...。
  • 好的,所以我知道我有一个参数。你是说它正在抛弃 Recordset?
  • @HansUp,你当然是对的(更新了我的答案)但我们知道它正是一个,因为错误显示“参数太少。预期为 1”
  • @Len D'Alberti 我已经更新了我的答案,以显示您将如何指定参数并打开记录集。或者你可以按照 HansUp 的建议,重写 SQL,这样就不需要参数了
  • @Len D'Alberti 你能编辑原始帖子并添加新代码吗?
猜你喜欢
  • 2018-05-16
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多