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 错误的主要内容,如果未能解决你的问题,请参考以下文章

连接 VBA SQL 语句中的字段时出现错误 424

如何将表单绑定到 Microsoft Access 中的 SQL 语句

MS Access VBA SQL查询调试选择案例

如何在 VBA 中正确输入 sql where 子句?

在access中用vba如何把SQL语句查询到的一个值赋给变量?

在 Access-VBA 中使用 SQL 查询仅创建非重复记录