VBA 代码中的 MS Access SQL 查询

Posted

技术标签:

【中文标题】VBA 代码中的 MS Access SQL 查询【英文标题】:MS Access SQL query within VBA code 【发布时间】:2016-03-31 19:56:31 【问题描述】:

我需要对嵌入在 VBA 代码中的这个 SQL 查询进行第二次观察。我正在制作一个 MS Access 应用程序,该应用程序根据用户在特定日期选择器框中设置的日期标准返回数据集。您实际看到的 sql 查询已经在 MS Access 查询设计视图中进行了静态测试。我用你看到 Me.from_filter 和 Me.to_filter 的实际日期对其进行了测试。它工作得很好!如果您选择从 2015 年 1 月 1 日到 2015 年 5 月 1 日,它会返回您需要的所有月份的列。完美的。现在,当我将其嵌入 VBA 代码并将其分配给控制变量时,我得到“运行时错误 '2342':RunSQL 操作需要一个由 SQL 语句组成的参数”。有人可以看看这个并告诉我可能出了什么问题吗?

Option Compare Database
Option Explicit
Dim strSQL As String


Private Sub Command0_Click()
If IsNull(Me.from_filter) Or IsNull(Me.to_filter) Then
    MsgBox "You have not entered a start date or end date"
Else
    strSQL = "TRANSFORM Sum(dbo_ASSET_HISTORY.MARKET_VALUE) AS SumOfMARKET_VALUE " _
            & "SELECT [dbo_FIRM]![NAME] AS [FIRM NAME], dbo_FUND.CUSIP, dbo_FUND.FUND_NAME, dbo_FUND.PRODUCT_NAME " _
            & "FROM (dbo_ASSET_HISTORY INNER JOIN dbo_FIRM ON dbo_ASSET_HISTORY.FIRM_ID = dbo_FIRM.FIRM_ID) INNER JOIN dbo_FUND ON dbo_ASSET_HISTORY.FUND = dbo_FUND.FUND " _
            & "WHERE (((dbo_FIRM.Name) Like 'Voya F*') And ((dbo_ASSET_HISTORY.PROCESS_DATE) >= #" & Me.from_filter & "# And (dbo_ASSET_HISTORY.PROCESS_DATE) <= #" & Me.to_filter & "#)) " _
            & "GROUP BY [dbo_FIRM]![NAME], dbo_FUND.CUSIP, dbo_FUND.FUND_NAME, dbo_FUND.PRODUCT_NAME " _
            & "PIVOT [dbo_ASSET_HISTORY]![ASSET_YEAR] & '-' & [dbo_ASSET_HISTORY]![ASSET_MONTH];"
    DoCmd.RunSQL (strSQL)

End If
End Sub 

【问题讨论】:

【参考方案1】:

RunSQL 用于根据 Microsoft 定义 https://msdn.microsoft.com/en-us/library/office/ff194626.aspx 运行更新、插入、选择、删除等操作查询,您可能应该使用 OpenQuery 或类似工具来运行查询。

【讨论】:

或 CurrentDB.Execute strSQL

以上是关于VBA 代码中的 MS Access SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

编辑器中的 ms-access VBA 长 sql 查询字符串行拆分(内联双引号)

如何使用 VBA 动态 SQL SELECT 语句调用 MS Access 参数查询

使用 Excel VBA 查询 MS Access,SQL BETWEEN 日期查询

如何使用 MySQl 的 ODBC 连接器在 MS Access 中的 VBA 中执行和查询?

如何在 VBA 代码中的 ms-access 中执行查询?

MS Access VBA:基于查询结果的 VBA 命令