转换为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语句。
该错误消息具有误导性。真正的问题是,DoCmd.RunSQL是为“行动”的查询:UPDATE; INSERT; DELETE; 等等。
DoCmd.RunSQL
UPDATE
INSERT
DELETE
它不会接受普通SELECT查询。例如,这个简单的SELECT查询给了我同样的 “A RunSQL操作需要由一个SQL语句的参数” 消息来自DoCmd.RunSQL:
SELECT
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查询。方法的选择取决于您要对查询返回的结果执行的操作。