Delphi. FDQuery. «Принудительное» выполнение POST и CANCEL

На предыдущую страницу…



В некоторых случаях бывает крайне необходимо оперативно и максимально надежно сохранять в БД любые, внесенные пользователем, данные.

Для этих целей можно использовать следующий код:

procedure FDQuery_POST(Q : TFDQuery);
//"Принудительный" POST
begin
  if Assigned(Q) then begin
     if Q.Active then begin
        TRY
          if (Q.State<>dsBrowse) then begin
             Q.POST;
          end;
        FINALLY

        END;
     end;
  end;
end;

Вызов этой функции необходимо добавить во все соответствующие обработчики событий.
Примеры:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if FDConnection1.Connected then begin
     FDQuery_POST;
  end;
end;

procedure TForm1.FDConnection1BeforeDisconnect(Sender: TObject);
begin
  FDQuery_POST;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  Application.ProcessMessages;
  FDQuery_POST;
  FDConnection1.Connected:=false;
  FDConnection1.Connected:=true;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  Application.ProcessMessages;
  FDQuery_POST;
  FDConnection1.Connected:=false;
end;

procedure TForm1.DBMemo1Exit(Sender: TObject);
begin
  FDQuery_POST;
end;

procedure TForm1.DBGrid1Exit(Sender: TObject);
begin
  FDQuery_POST;
end;

В том случае, если необходимо отказаться от сохранения в БД введенных пользователем данных, можно использовать следующий код:

procedure FDQuery_Cancel(Q : TFDQuery);
//"Принудительный" CANCEL
begin
  if Assigned(Q) then begin
     if Q.Active then begin
        TRY
          if (Q.State=dsEdit) then begin
             Q.Cancel;
          end;
        FINALLY

        END;
     end;
  end;
end;

На предыдущую страницу…


Дата: 02.10.2022