我在 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/