В некоторых случаях бывает крайне необходимо оперативно и максимально надежно сохранять в БД любые, внесенные пользователем, данные.
Для этих целей можно использовать следующий код:
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