转换为VBA时,我一直在努力学习SQL语句。基本上,我希望在执行之前添加一些东西(这应该不是问题)。但是,当我尝试在更改之前运行它时,VBA不会将其识别为有效的SQL语句。尽管尝试添加/删除括号和任何其他特殊字符,它仍然无法正常工作。请注意,它作为查询运行时效果很好。请参阅以下字符串:
SQLstr = "SELECT SourceData.[Fiscal Year], SourceData.[Fiscal Quarter ID], " _
& "SourceData.[Transaction Date], SourceData.[Sales Order Number], SourceData.[Activated?], " _
& "SourceData.[Product ID], SourceData.[Bookings Quantity], SourceData.[Term Length], " _
& "SourceData.[Estimated Expiring Quarter], SourceData.[End Customer Company Name], " _
& "SourceData.[Sold To Company Name] " _
& "FROM SourceData, finalCust, finalPart " _
& "WHERE (((SourceData.[End Customer Company Name]) Like finalCust.[FinalList]) " _
& "And ((SourceData.[Sold To Company Name]) Like finalPart.[FinalList]))"
代码是'纯'SQL进入VBA,没有任何修改,但我不想误导。
这是一条错误消息:
Run-time error '2342':
A RunSQL action requires an argument consisting of an SQL statement.
我认为这是VBA不可读的SQL语句。
答案 0 :(得分:1)
该错误消息具有误导性。真正的问题是DoCmd.RunSQL
用于“行动”查询:UPDATE
; INSERT
; DELETE
;等
它不接受普通的SELECT
查询。例如,这个简单的SELECT
查询给了我相同的“一个RunSQL操作需要一个包含来自DoCmd.RunSQL
的SQL语句”消息的参数:
Dim SQLstr As String
SQLstr = "SELECT * FROM tblFoo;"
DoCmd.RunSQL SQLstr
但是,DoCmd.RunSQL
执行此有效UPDATE
语句时没有错误:
SQLstr = "UPDATE tblFoo SET long_text='bar' WHERE id=1;"
DoCmd.RunSQL SQLstr
您需要使用其他方法来使用SELECT
查询。方法的选择取决于您要对查询返回的结果执行的操作。