1

I'm trying to do an UPSERT (since that's what it appears to be called) and I'm getting an error: Microsoft JET Database Engine error '80040e14' Syntax error (missing operator) in query expression ...

UPDATE myTable
SET Field1='10', Field2='11'
WHERE Date = #06/05/2013#
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO myTable
(Field1, Field2)
VALUES (10, 11)
END
4

1 回答 1

4

您的代码使用 Access SQL 无法理解的 T-SQL (SQL Server) 语法。VBA 等效项是:

Dim cdb As DAO.Database
Set cdb = CurrentDb
cdb.Execute "UPDATE myTable SET Field1='10', Field2='11' WHERE [Date] = #2013-06-05#", dbFailOnError
If cdb.RecordsAffected = 0 Then
    cdb.Execute "INSERT INTO myTable (Field1, Field2) VALUES ('10', '11')", dbFailOnError
End If
Set cdb = Nothing

笔记:

  1. Date是 Access 中的保留字,因此应将字段名称指定为[Date].

  2. 请注意,代码使用明确的日期格式yyyy-mm-dd。任何时候您都应该使用该格式,只要您有一个包含在井号 ( #) 中的日期文字。

  3. 另请注意,它修复了代码中的类型不匹配:UPDATE 语句尝试将字段更新为文本,而 INSERT 语句尝试将它们插入为数字。

编辑回复:评论

上面的 ADO 等效项是

conntemp.Execute "UPDATE myTable SET Field1='10', Field2='11' WHERE [Date] = #2013-06-05#", RecordsAffected
If RecordsAffected = 0 Then
    conntemp.Execute "INSERT INTO myTable (Field1, Field2) VALUES ('10', '11')"
End If
于 2013-06-05T20:38:27.380 回答