一尘不染

转换为VBA时SELECT查询不起作用-无效的SQL语句

sql

转换为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语句。


阅读 218

收藏
2021-03-10

共1个答案

一尘不染

该错误消息具有误导性。真正的问题是,DoCmd.RunSQL是为“行动”的查询:UPDATE; INSERT; DELETE; 等等。

它不会接受普通SELECT查询。例如,这个简单的SELECT查询给了我同样的 “A RunSQL操作需要由一个SQL语句的参数”
消息来自DoCmd.RunSQL

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查询。方法的选择取决于您要对查询返回的结果执行的操作。

2021-03-10