【问题标题】:VBA issues when trying to run a SQL query between 2 dates尝试在两个日期之间运行 SQL 查询时出现 VBA 问题
【发布时间】:2015-03-20 21:33:18
【问题描述】:

为了简要总结这个宏的目标,我试图根据一组参数获取特定日期之间的现金总和。当我尝试运行带有日期的 SQL 查询时,VBA 中不断出现错误。我不确定问题是什么,但我认为这与我如何格式化日期有关。我尝试过以多种方式运行它,但总是出现语法错误,无论它与“a”、“#”还是“table”有关。

这是我正在使用的查询。任何帮助将不胜感激。

Sub GetCashBalance()

Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String
Dim StartDate As String
Dim EndDate As String

StartDate = InputBox("Enter Start Date in mm/dd/yy format.")
EndDate = InputBox("Enter End Date in mm/dd/yy format.")

SQL = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=master;Data Source=SERVER\ODS"

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

cn.Open SQL
Set rs = cn.Execute("SELECT SUM(a.CASH)" & _
            "FROM CUSTOMER_DATA.dbo.TRANSACTION_HISTORY a" & _
            "LEFT JOIN CUSTOMER_DATA.dbo.DAILY_TRANSACTION b" & _
            "ON a.T01_KEY = b.T01_KEY" & _
            "WHERE PROC_DATE BETWEEN #StartDate# AND #EndDate#" & _
            "AND a.CODE NOT IN ('22','23','M','2-L','36-R')" & _
            "AND isnull(a.DESCRIPTION, '') NOT IN ('01','02','03','0DO1','0NF2');")

If Not rs.EOF Then
    Sheets(7).Range("A40").CopyFromRecordset rs
    rs.Close
Else
    MsgBox "Error", vbCritical
End If

cn.Close

End Sub

【问题讨论】:

    标签: sql-server-2008 vba date excel-2010


    【解决方案1】:
    Set rs = cn.Execute("SELECT SUM(a.CASH)" & _
                "FROM CUSTOMER_DATA.dbo.TRANSACTION_HISTORY a" & _
                "LEFT JOIN CUSTOMER_DATA.dbo.DAILY_TRANSACTION b" & _
                "ON a.T01_KEY = b.T01_KEY" & _
                "WHERE PROC_DATE BETWEEN '" & StartDate & "' AND '" & EndDate & _
                "# AND a.CODE NOT IN ('22','23','M','2-L','36-R')" & _
                "AND isnull(a.DESCRIPTION, '') NOT IN ('01','02','03','0DO1','0NF2');")
    

    看看下面的部分,应该改一下

    BETWEEN '" & StartDate & "' AND '" & EndDate & _            
    "' AND ....
    

    我认为最好使用ADODB.CommandParameters而不是在sql查询中进行连接。

    【讨论】:

    • 您好 - 感谢您的回复。我仍然收到不正确的语法错误,但这次它接近“a”。这是因为 VBA 不喜欢 SQL 查询中 FROM 子句后的 'a' 和 'b' 吗?
    • 我知道为什么我在 'a' 周围出现了不正确的语法错误。当我删除行结束符(“&_”)并在 VBA 中的一行上进行查询时,一切都运行得很好。话虽如此,有没有一种方法可以使用多行,因为我有更多的代码无法放入一行?这就是您使用 ADODB.Command 和参数而不是串联的意思吗?很抱歉问你是否已经回答了这个问题,但我对 VBA 还是很陌生。
    • 我想通了。我忘了在引号前加一个空格。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2018-07-25
    • 2012-03-12
    • 1970-01-01
    • 2021-12-12
    • 2014-09-23
    相关资源
    最近更新 更多