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 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何将表单绑定到 Microsoft Access 中的 SQL 语句