Я могу воспроизвести вашу проблему и получить
Синтаксическая ошибка в выражении UPDATE.
Обновленный ответ Я еще не полностью исследовал это, но я думаю, что ваша проблема возникает из-за вашего выбора Value
в качестве имени столбца. Я думаю, что это имя может конфликтовать с тем, как оператор UPDATE интерпретируется уровнем ADO. Я думаю, потому что, если я использую это заявление Sql
'Обновить [Лист1 $] Установить [Значение] = 88, где [Значение] = 5'
, запрос выполняется правильно и корректно обновляет значение ячейки, содержащей 5
.
Я оставлю свой первоначальный ответ на месте ниже, на случай, если он поможет другим.
Оригинальный ответ:
Чтобы убедиться, что это не проблема с FieldName столбца Value
, я добавил это в TForm1.Create
:
Caption := AdoQuery1.Fields[0].FieldName;
и это подтвердило, что FieldName действительно Value
.
Итак, я добавил TDBNavigator и TDBEdit в форму и обнаружил, что могу без проблем редактировать значение Value
в TDBEdit.
Это дало мне идею:
procedure TForm1.Button2Click(Sender: TObject);
begin
if AdoQuery1.Locate('Value', '5', []) then begin
AdoQuery1.Edit;
AdoQuery1.FieldByName('Value').AsString := '99';
AdoQuery1.Post;
end;
end;
и это прекрасно работает. Очевидно, что это не совсем то, что вы хотите, потому что он не полностью повторяет то, что делал бы оператор UPDATE, если бы было несколько строк, соответствующих предложению WHERE, но есть разные способы, которыми вы могли бы этого достичь, например, используя метод AdoQuery Seek
.
Если я добьюсь прогресса в получении ОБНОВЛЕНИЯ для работы, я опубликую обновление к этому ответу.