Access VBA 中的 StrSQL 错误

Posted

技术标签:

【中文标题】Access VBA 中的 StrSQL 错误【英文标题】:StrSQL Error in Access VBA 【发布时间】:2015-12-17 15:26:30 【问题描述】:

我有一个 Access VBA 子程序,如下所示:

  Sub SampleReadCurve()

    Dim rs As Recordset
    Dim iRow As Long, iField As Long
    Dim strSQL As String

    strSQL = "SELECT * FROM dbo_VolatilityInput5" & "ORDER BY MaturityDate"
    Set rs = CurrentDb.OpenRecordset(strSQL, Type:=dbOpenDynaset, Options:=dbSeeChanges)



    If rs.RecordCount <> 0 Then

    Do While Not rs.EOF

        Dim BucketTermAmt As Long
        Dim BucketTermUnit As String
        Dim BucketDate As Date
        Dim MarkAsOfDate As Date
        Dim InterpRate As Double
        MarkAsOfDate = rs!MarkAsOfDate
        BucketTermAmt = 3
        BucketTermUnit = "m"
        BucketDate = DateAdd(BucketTermUnit, BucketTermAmt, MarkAsOfDate)
        InterpRate = CurveInterpolateRecordset(rs, BucketDate)
        Debug.Print BucketDate, InterpRate



   rs.MoveNext

Loop

   End If

End Sub

dbo_Volatility5 是 Access 数据库中的一个表。

但是,当我执行此代码时,它为我提供了 strSQL 语句的运行时错误“FROM 子句中的语法错误”。据我所知,strSQL 语法是正确的。我做错了什么?

【问题讨论】:

How to debug dynamic SQL in VBA 【参考方案1】:

在 dbo_VolatilityInput5 之后缺少一个空格。连接多个字符串以形成 SQL 查询时很常见的错误。

我更喜欢把每个部分都放在一个新的行上:

strSQL = "SELECT * "
strSQL = strSQL & "FROM dbo_VolatilityInput5 "
strSQL = strSQL & "ORDER BY MaturityDate"

等等

【讨论】:

当我遇到这样的问题时,我会使用调试器:在“Set rs =”行设置断点,在 strSQL 中获取字符串的副本,然后将其粘贴到 Access 中的查询设计器中.这是可视化问题的好方法。 是的,或者在Set rs = ...之前添加一个快速而肮脏的Debug.Print strSQL 您好,谢谢您的回复。如您所示,我将其替换为新行上的每个部分,但我仍然遇到相同的错误。还有什么问题? 当然。如果它是一个缺失的空间,通常就足够了。除非我已经盯着它看了 3 个小时。 :) 这正是您所说的缺少空格的问题。但是,直到我重新启动 Access,它才起作用。【参考方案2】:

只需更正您的代码,这样:

strSQL = "SELECT * FROM dbo_VolatilityInput5 ORDER BY MaturityDate"

没有必要连接你的字符串,因为它没有任何变量。 如果是这样,就像 WHERE 子句一样,请执行以下操作:

strSQL = "SELECT * FROM dbo_VolatilityInput5 " & some_variable & " ORDER BY MaturityDate"

请注意,引号后面是一个空格。

【讨论】:

嗨。如果我按照您的第二个示例进行操作,那么要添加一个变量,语法应该是 CurveID = 15 strSQL = "SELECT * FROM VolatilityOutput WHERE CurveID=" & CurveID & " ORDER BY MaturityDate" 这是正确的吗?

以上是关于Access VBA 中的 StrSQL 错误的主要内容,如果未能解决你的问题,请参考以下文章