После Sql запроса не могу изменять данные в БД

программирование базы данных sql Delphi ms sql

Клиентское приложение написано на Delphi с использованием библиотек DevExpress vcl, подключаюсь к MS SQl серверу. Подключаюсь к БД в связке ADOconnect ADOQuery DataSourse. Данные отображаю в cxGride.
Столкнулся с таково рода проблемой:

Изменяю значение поля в отдельной форме:

procedure TForm24.cxButton2Click(Sender: TObject);
begin
DM.tviezdi.edit;
Dm.Tviezdi.FieldByName('Выезд').AsString := 'Да';
DM.Tviezdi.post;
showmessage ('Аварком '+cxDBLookupComboBox3.Text+' назначен')
end;

Аварком в cxGride меняется

Применяю фильтр:

procedure TForm13.cxButton5Click(Sender: TObject);
begin
dm.Tviezdi.Active := false;
dm.Tviezdi.SQL.clear;
Dm.Tviezdi.SQL.Add('set language Russian set dateformat dmy ');
// Dm.Tviezdi.SQL.Add('select *');
Dm.Tviezdi.SQL.Add('select ');
Dm.Tviezdi.SQL.Add('[dbo].[Дата последнего изменения состояния дела]([dbo].[БД].[№ Заявки]) [Дата последнего изменения состояния дела],');
Dm.Tviezdi.SQL.Add('[dbo].[Просрочка состояния дела]([dbo].[БД].[№ Заявки])[Просрочено],');
Dm.Tviezdi.SQL.Add('[dbo].[БД].[№ Заявки] idLoss,');
Dm.Tviezdi.SQL.Add('*');
Dm.Tviezdi.SQL.Add('FROM [dbo].[БД]');
Dm.Tviezdi.SQL.Add('LEFT JOIN [dbo].[Фото инфо]');
Dm.Tviezdi.SQL.Add('ON [dbo].[Фото инфо].[№ заявки] = [dbo].[БД].[№ Заявки]');
DM.Tviezdi.SQL.Add('WHERE 1=1');
DM.Tviezdi.SQL.Add('-- find');
Dm.Tviezdi.SQL.Add('AND([Дата осмотра] >= '+#39+cxDateEdit1.Text+#39')');
Dm.Tviezdi.SQL.Add('and ([Дата осмотра] <= '+#39+cxDateEdit2.Text+#39')');
Dm.Tviezdi.SQL.Add('Order By [№ Заявки] Desc');
Dm.Tviezdi.ExecSQL;
dm.Tviezdi.Active := true;
end;

И Аварком не поменялся, то есть поле записалось в грид, а в бд нет. Как я понял ,что при работе с Sql запросами есть два варианта , в одном случае он создает копию таблицы и она доступна только для просмотра, во втором случае никакой таблицы не создается и данные доступны для редактирования , видимо необходимо писать запрос с update.С компонентами BDE был компонент SqlUpdate , его настроил и проблема решена , а как с компонентами ADO реализовать?

Примечание:
Проблема решилась довольно просто .... DM.tviezdi.LockType:= ltBatchOptimistic или ltOptimistic ,
далее добавил кнопку в окне, где Grid ,и на нее дописал: DM.Tviezdi.UpdateBatch(arAll); и все заработало. Здесь есть по подробней
http://www.da-soft.com/forums/freedac-osnovnoj-russkij/raznitsa-mezhdu-ado-i-freedac.html
Ответы:
Update тот же можно написать и разместить в ADoQuery.
Для Его выполнения нужно использовать AdoQuery.ExecSQL или AdoQuery.Exec.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.