Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel Access VBA中的StrSQL错误_Excel_Vba_Ms Access - Fatal编程技术网

Excel Access VBA中的StrSQL错误

Excel Access VBA中的StrSQL错误,excel,vba,ms-access,Excel,Vba,Ms Access,我有一个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.OpenRecords

我有一个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
strSQL = "SELECT * FROM dbo_VolatilityInput5 " & some_variable & " ORDER BY MaturityDate"
dbo_volatity5是Access数据库中的一个表


然而,当我执行这段代码时,它在strSQL语句的FROM子句中给了我一个运行时错误语法错误。据我所知,strSQL语法是正确的。我做错了什么?

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

我更喜欢将每个部分放在新的行上:

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

等等。

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

我更喜欢将每个部分放在新的行上:

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

等等。

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

strSQL = "SELECT * FROM dbo_VolatilityInput5 ORDER BY MaturityDate"
没有必要连接字符串,因为它没有任何变量。 如果是,如WHERE子句,请执行以下操作:

  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
strSQL = "SELECT * FROM dbo_VolatilityInput5 " & some_variable & " ORDER BY MaturityDate"

请看引号后面有一个空格。

只需更正代码,这样:

strSQL = "SELECT * FROM dbo_VolatilityInput5 ORDER BY MaturityDate"
没有必要连接字符串,因为它没有任何变量。 如果是,如WHERE子句,请执行以下操作:

  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
strSQL = "SELECT * FROM dbo_VolatilityInput5 " & some_variable & " ORDER BY MaturityDate"

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

当我遇到这样的问题时,我会使用调试器:在set rs=行上设置断点,在strSQL中获取字符串的副本,并将其粘贴到Access中的查询设计器中。这是一个可视化问题的好方法。是的,或者添加一个快速而肮脏的调试。在设置rs=…嘿,谢谢你的回复之前打印strSQL。正如您所示,我将其替换为新行中的每个部分,但我仍然得到相同的错误。还有什么不对劲吗?当然。如果缺少空间,通常就足够了。除非我已经盯着它看了3个小时这正是你说的缺少空间的问题。但是,直到我重新启动Access,它才起作用。当我遇到这样的问题时,我使用调试器:在set rs=行上设置断点,在strSQL中获取字符串的副本,并将其粘贴到Access中的查询设计器中。这是一个可视化问题的好方法。是的,或者添加一个快速而肮脏的调试。在设置rs=…嘿,谢谢你的回复之前打印strSQL。正如您所示,我将其替换为新行中的每个部分,但我仍然得到相同的错误。还有什么不对劲吗?当然。如果缺少空间,通常就足够了。除非我已经盯着它看了3个小时这正是你说的缺少空间的问题。但是,直到我重新启动Access.hi,它才起作用。如果我遵循第二个示例,那么要添加一个变量,语法应该是CurveID=15 strSQL=SELECT*fromvolatityyoutput,其中CurveID=&CurveID&orderbydurityDate是否正确?您好。如果我遵循第二个示例,那么要添加一个变量,语法应该是CurveID=15 strSQL=SELECT*FROM volatityyoutput,其中CurveID=&CurveID&ORDER BY durityDate是否正确?