У меня есть подпрограмма в excel, которую я хотел бы записать в таблицу Access. Я пытаюсь обновить строку в таблице, если она уже существует, добавить ее, если она не существует. Исходя из предложения , данного Джеремией Кларком в этом блоге MSDN, у меня есть запрос, который я выполню из подпрограммы VBA в Excel:
UPDATE tblName
SET [Column1] = 'text', ...(other values)... [ColumnN] = 1234
WHERE ([Column1] = 'text' AND [Column2] = 'text2')
If @@ROWCOUNT = 0
INSERT INTO tblName
VALUES ( [Column1] = 'text', ...(other values)... [ColumnN] = 1234 )
Ошибка, которую он мне дает:
Syntax error (missing operator) in query expression '([Column1] = 'text' AND [Column2] = 'text2')
If @@ROWCOUNT = 0
INSERT INTO tblName
VALUES ( [Column1] = 'text', ...(other values)...'.
Я довольно новичок в SQL, но попробовал различные способы заключить в скобки (в скобках) строку IF, если порядок оценки оказался не таким, как я ожидал, но это было напрасно. Не проверяется ли первая часть запроса и, следовательно, @@ ROWCOUNT не может быть выполнен должным образом?
Edit1 : Использование Access 2003, если это имеет значение.
Решение:
На основании предложения bluefeet (см. Весь его ответ):
objDB.Execute sqlStrSelect
recordset.Source = sqlStrSelect
recordset.Open , , adOpenDynamic, adLockOptimistic
If recordset.Fields(0) = 0 Then
objDB.Execute sqlStrInsert
Else
objDB.Execute sqlStrUpdate
End If
Это зависит от модифицированного запроса SELECT, чтобы получить доступ для возврата количества записей:
sqlStrSelect = "SELECT Count(id) FROM table1 WHERE id = 3"
HansUp правильно предположил, что я использовал соединение ADO, поэтому выполнение кода должно было выполняться не так, как первоначально предлагал bluefeet.