1

私はUPSERT(それが呼ばれているように見えるので)やろうとしていますが、エラーが発生しています: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 に答える