@Piligr1m

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

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

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


Оно вроде изменяется и отображается в cxGrid (Изменен аварком на Яковлева)

f339b23059f41f98c80da59c9b074a45.png

Запускаю фильтр :

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;


37e02a058616d2f36b8eec7e46c74b0b.png

И вижу старые данные (аварком стал Уваров как и был), то есть поле записалось в грид, а в бд нет.Не могу понять в чем проблема.Однако если фильтр не запускать, то данные почему-то сохраняются, а после применения фильтра поменять уже ничего не получается.
  • Вопрос задан
  • 4412 просмотров
Решения вопроса 1
@Piligr1m Автор вопроса
Проблема решилась довольно просто .... DM.tviezdi.LockType:= ltBatchOptimistic или ltOptimistic ,
далее добавил кнопку в окне, где Grid ,и на нее дописал: DM.Tviezdi.UpdateBatch(arAll); и все заработало. Здесь есть по подробней
www.da-soft.com/forums/freedac-osnovnoj-russkij/ra...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@pihel
Sql, Oracle, pl/sql, BI, ETL, php, olap
А каким образом по вашем изменения должны уйти в бд?
К query с изменяемым запросом нужно подвязать еще update query в которой написать insert, update и delete запросы.
А после post, вызвать applyupdates, который уже вызовет в зависимости от режима обновление или вставку.
Ответ написан
taliban
@taliban
php программист
Dm.Tviezdi.FieldByName('Выезд').AsString := 'Да';
Подозреваю что это геттер а не сеттер.
Ответ написан
@varus
А если профайлером запросы посмотреть, которые в базу генерятся? Это, как правило, может на мысли навести.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы