使用 IF EXISTS 的 VBA 中的 SQL 到 Excel 表提示 "Invalid SQL statement"

标签 sql vba excel ms-access adodb

我在 MS Excel 内的 VBA 中使用 SQL 来查询电子表格。我想检查记录是否存在,并根据需要更新或插入记录。这需要:

IF EXISTS (condition) UPDATE ELSE INSERT

“测试”部分不起作用,并引发错误。在调试过程中,我从查询中删除了所有 Excel 元素,导致以下代码:

Dim conn As New ADODB.Connection
Dim recset As New ADODB.Recordset
Dim scmd As String
scmd = "IF EXISTS (SELECT 'Test')"
scmd = scmd + "SELECT 'Found' "

conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
conn.Execute (scmd)

conn.Close

这会生成 SQL 语句:

IF EXISTS (SELECT 'Test') SELECT 'Found' 

产生的错误是:

Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'.

我在 MS SSMS 中测试了相同的语句,它工作正常。消除了我的 Excel 电子表格和 SQL 语句的问题后,问题似乎出在 VBA 的一个怪癖中。我该如何解决这个问题?

就其值(value)而言,连接字符串适用于我项目中的纯 SELECT 查询。

最佳答案

您正在使用 ACE OleDb 提供程序与电子表格进行交互。这意味着您只能使用提供程序支持您的数据源的 SQL 功能。 IF EXISTS 在这种情况下不受支持。

但是,可能还有一个更基本的问题。我不认为可以使用从 ACE OleDb 执行的 SQL 更改电子表格的内容。

关于使用 IF EXISTS 的 VBA 中的 SQL 到 Excel 表提示 "Invalid SQL statement",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31118216/

相关文章:

java - 如何在antlr4中跳过单行sql注释

sql - 我应该使用 information_schema.referential_constraints 还是 sys.foreign_keys 来检查 key 的存在?

mysql - 将 .sql 插入表文件转换为 Excel

excel - 测试 VBA 中是否存在范围

excel - 生成递增数字的分隔列表的公式

mysql - SQL 连接和排序

mysql - 如何将 mySQL #temp 表导出到脚本中的 .csv 文件?

excel - 如何在 Excel 工作表中填充数据,其中日期位于另一张工作表中给出的一系列日期范围之间?此外,特定的列应该匹配

excel - 如何从数据集中删除价格异常值,使其不影响平均价格

Excel函数替换子字符串