【问题标题】:Loop thru DAO Recordset to join my table循环通过 DAO 记录集加入我的表
【发布时间】:2014-09-06 10:41:13
【问题描述】:

我有 VBA 可以访问我的表 2 记录集,并将每一行与我的主表连接起来并创建新的工作表。 我很新,无法弄清楚问题所在;和 ?这次run-time error 3296 JOIN expression not supported 各位高手能帮我看看我的代码吗?

这是我的 [sampleDB] https://drive.google.com/file/d/0B980etBxqQuzTGxiS1g3eUlLcHc/edit?usp=sharing

谢谢。

 Sub ExportReport()

Dim dbsReport As DAO.Database
Dim qdf As DAO.QueryDef
Dim rstSKSF As DAO.Recordset
Dim strSQL As String
 Dim xlsxPath As String

On Error GoTo ErrorHandler

   Set dbsReport = CurrentDb
   xlsxPath = "I:\Proj\Tr_Rep " & Format(Now(), "mm-dd-yyyy hhmmss AMPM") & ".xlsx"


   'Open a recordset on all records from the SkillSoft Request table that have
   'a Null value in the ReportsTo field.
   strSQL = "SELECT * FROM SKSF_Req WHERE Flag IS NULL"
   Set rstSKSF = dbsReport.OpenRecordset(strSQL, dbOpenDynaset)

   'If the recordset is empty, exit.
   If rstSKSF.EOF Then Exit Sub

   With rstSKSF
      Do Until .EOF

      'join report table with SKSF_request table's Rows
      'Create newworksheet for each report joint with SKSF rows
            Set qdf = dbsReport.CreateQueryDef("Training_Report", _
                "SELECT Report.Name, Report.[Employee Role], Report.[Employee Location], Report.[Retails Region], Report.[Asset Title], Report.[Completion Date], Report.[Completion Stat]FROM Report LEFT JOIN SKSF_Req ON Report.[Asset Title] = rstSKSF(SKSF_Req.[Course Name]) WHERE (((Report.[Asset Title]) = rstSKSF([SKSF_RequestForm].[Course Name])) And (rstSKSF((SKSF_Req.Role) Like " * " & [Report].[Employee Role] & " * ")) GROUP BY Report.Name, Report.[Employee Role], Report.[Employee Location], Report.[Retails Region], Report.[Asset Title], Report.[Completion Date], Report.[Completion Stat], Report.[EMP ID]")

            DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Training_Report", xlsxPath, True
            DoCmd.DeleteObject acQuery, "Training_Report"


         .Edit
          rstSKSF![Flag] = "Y" 'Set Flag
         .Update
         .MoveNext

      Loop
   End With

   rstSKSF.Close
   dbsReport.Close

   Set rstSKSF = Nothing
   Set dbsReport = Nothing

   Exit Sub
ErrorHandler:
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description

   End Sub

【问题讨论】:

  • 你在哪一行代码上得到了错误?
  • 您知道您可以创建一个包含来自链接表的记录的查询,并将其用作记录集(如果必须)?
  • 我需要我的主桌一张一张地加入我的第二张桌子。我在创建工作表时遇到错误: Set qdf = dbsReport.CreateQueryDef("Training_Report",....
  • Now() 也应该是Now
  • @OverMind 你能举个例子吗?

标签: ms-access vba ms-access-2010 dao


【解决方案1】:

我不能 100% 确定这是您的错误的根源,但是您的 SQL 语句中有双引号 ((SKSF_Req.Role) Like " * " & [Report].[Employee Role] & " * " 这肯定会导致代码失败。此外,您不能引用记录集在这样的 SQL 语句中(是否可以将记录集直接包含在 SQL 中而不是对其进行迭代?这样会快得多)

"SELECT Report.Name, Report.[Employee Role], Report.[Employee Location], Report.[Retails Region], Report.[Asset Title], Report.[Completion Date], Report.[Completion Stat]FROM Report LEFT JOIN SKSF_Req ON Report.[Asset Title] = rstSKSF(SKSF_Req.[Course Name]) WHERE (((Report.[Asset Title]) = rstSKSF([SKSF_RequestForm].[Course Name])) And (rstSKSF((SKSF_Req.Role) Like " * " & [Report].[Employee Role] & " * ")) GROUP BY Report.Name, Report.[Employee Role], Report.[Employee Location], Report.[Retails Region], Report.[Asset Title], Report.[Completion Date], Report.[Completion Stat], Report.[EMP ID]"

应该更像:

"SELECT Report.Name, Report.[Employee Role], Report.[Employee Location]," & _
" Report.[Retails Region], Report.[Asset Title], Report.[Completion Date], " & _
" Report.[Completion Stat] " & _
"FROM Report LEFT JOIN SKSF_Req ON Report.[Asset Title] = '" & rstSKSF![Course Name] & "'" & _
" WHERE (((Report.[Asset Title]) = '" & rstSKSF![Course Name] & "'" & _
" And '" & rstSKSF!Role & "' Like ' * ' & [Report].[Employee Role] & ' * ')) " & _
" GROUP BY Report.Name, Report.[Employee Role], Report.[Employee Location], " & _
" Report.[Retails Region], Report.[Asset Title], Report.[Completion Date], " & _
" Report.[Completion Stat], Report.[EMP ID]"

【讨论】:

  • 非常感谢,现在我在表达式中得到运行时错误 3085 undefined function 'rstSKSF' 并指出这一行:DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Training_Reportsheet", xlsxPath, True跨度>
  • 哦,我明白了,这不是一个函数,您正在尝试引用您的记录集。您也不应该以这种方式将记录集中的值包含在字符串中。编辑我的回复
  • 另一件需要注意的事情,如果Course NameRole 可能具有' 字符,则需要转义单引号。 (类似于Replace(rstSKSF![Course Name],"'","''")
  • rstSKSF(SKSF_Req.[Course Name]) 不起作用,首先您将其视为一个函数,其次将其放入查询中,但是在运行查询时无法访问。应该是'" & rstSKSF![Course Name] & "',当然要警惕单引号。
  • 谢谢,我又遇到一个错误,太累了,你能再帮忙吗?本次运行时报错 3296 JOIN expression not supported
【解决方案2】:

我想通了。 DAO 不接受"' Like ' * ' & [Report].[Employee Role] & ' * ',我正在从查询中读取,不得不将其更改为 strSQL = "SELECT * FROM SKSF_Req WHERE Flag IS NULL" 语句中的真实表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多