Заявление об обновлении VBA - отсутствует оператор в выражении запроса

Во-первых, я знаю, что этот вопрос уже задавался на этом форуме, но каждый предыдущий вопрос отличается от моей ситуации, и решения не работают. Мои запятые все там, и я использую очень простой запрос. Двигаемся прямо:

Я использую связанную таблицу в Access, которая ссылается на базу данных SQL Server. Все работает, кроме этого запроса. Если я запускаю текст непосредственно в SQL Server, он работает нормально. Поэтому синтаксис запроса должен быть в порядке.

Вот что я запускаю:

CurrentDb.Execute "Update dbo_TS_Activity Set [Remarks] = ''Updated Remarks''   Where [id] = 1124 AND [Emp_Name] = ''CONFUSED''  AND [Approved] = 0"

Я получаю ошибку времени выполнения "3075" Синтаксическая ошибка (отсутствует оператор) в выражении запроса "Обновленные примечания"

Что я пробовал:

  • Одинарные кавычки
  • Двойные кавычки
  • Двойные одинарные (два апострофа) кавычки
  • Без кавычек
  • Открытие связанной таблицы и ее ручное редактирование (работает)
  • Плачет (шутка)

person Flat Cat    schedule 08.04.2012    source источник
comment
Ваш контекст немного не ясен. Являются ли Updated Remarks и CONFUSED буквальным текстом или это переменные, которые вы пытаетесь объединить в SQL?   -  person Ken White    schedule 08.04.2012
comment
Это просто строки, которые я пытаюсь вставить. Updated Remarks — это обновляемая строка. Смущено имя сотрудника, которое обновляется.   -  person Flat Cat    schedule 08.04.2012


Ответы (2)


Это должно работать нормально, AFAICT, из того, что вы разместили вместе с вашим комментарием выше.

CurrentDb.Execute "Update dbo_TS_Activity Set [Remarks] = 'Updated Remarks'   Where [id] = 1124 AND [Emp_Name] = 'CONFUSED'  AND [Approved] = 0"
person Ken White    schedule 08.04.2012
comment
Тогда из-за чего Access заморачивался? :) Это все равно не будет работать как код VBA. - person Flat Cat; 09.04.2012
comment
@Ben: Как я уже сказал, то, что вы опубликовали, должно работать. Трудно сказать, почему это не так, если вы не опубликовали свой фактический запрос. (Я сомневаюсь, что вы действительно пытаетесь установить Remarks в Updated Remarks для сотрудника по имени CONFUSED.) - person Ken White; 09.04.2012
comment
Ну, это было сложнее, поэтому я сократил его до того, что было в моем примере. Даже это простое утверждение не работает. Это фактическое утверждение, которое терпит неудачу. Он не работает с переменными или жестко закодированными значениями. - person Flat Cat; 09.04.2012

2 вещи, наконец, исправили это... Я запустил обновление в конструкторе запросов, и он дал мне этот странный синтаксис круглых скобок вокруг оператора WHERE, так что это выглядело так:

Where (((dbo_vw_TS_Activity.[id]) = 1124))

Наконец, ему нужны двойные двойные кавычки для переменных, например:

SET [Remarks] = ""The updated remarks...""

Внезапно он счастлив. Следовательно, я тоже.

person Flat Cat    schedule 09.04.2012
comment
Скобки в первом примере необязательны. Разработчик запросов вставляет их, потому что они могли бы понадобиться, если бы выражение было более сложным. Существенным фактором является использование символов двойных кавычек, а не символов одинарных кавычек. Чтобы указать символ двойной кавычки в строке VBA, вам нужно удвоить его, отсюда и необходимость в двойных кавычках в строковом литерале. Строка фактически содержит одиночные символы двойных кавычек. Например, строка """" состоит из одного символа. - person phoog; 09.04.2012