FireDAC.Comp.Client.TFDCustomTransaction.CommitRetaining
Delphi
procedure CommitRetaining;
C++
void __fastcall CommitRetaining();
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
procedure function |
public | FireDAC.Comp.Client.pas FireDAC.Comp.Client.hpp |
FireDAC.Comp.Client | TFDCustomTransaction |
Description
Enregistre de façon permanente les modifications apportées aux données dans la transaction en cours, sans y mettre fin.
Appelez CommitRetaining pour enregistrer de façon permanente les modifications, comme les commandes INSERT / UPDATE / DELETE
, apportées à la base de données lors de la transaction en cours, sans mettre fin à la transaction.
Comme FireDAC supporte les transactions imbriquées, la transaction en cours est celle qui a été démarrée par l'appel StartTransaction le plus récent. Si la base de données ne supporte pas les transactions imbriquées, comme la plupart des SGBD, FireDAC émule des transactions imbriquées à l'aide de points de sauvegarde. CommitRetaining est utile uniquement pour la transaction principale, et non pour celles qui sont imbriquées.
Avant d'appeler CommitRetaining, une application peut vérifier l'état de la propriété Active. Si une application appelle CommitRetaining alors qu'il n'existe pas de transaction en cours, une exception est déclenchée.
CommitRetaining utilisera les fonctionnalités natives sur Interbase/Firebird. Dans d'autres SGBD, la méthode équivaut à appeler Commit, puis StartTransaction.
Exemple
procedure TForm1.ChangeButtonClick(Sender: TObject);
begin
FDQuery1.Transaction := FDTransaction1;
FDQuery1.SQL.Text := 'select * from employees';
FDQuery2.Transaction := FDTransaction1;
FDQuery2.SQL.Text := 'update employees set salary = salary * :k where id = :id';
FDTransaction1.StartTransaction;
try
FDQuery1.Open;
while not FDQuery1.Eof do begin
FDQuery2.ExecSQL('', [1.2, ADQuery1.FieldByName('id').AsInteger]);
FDTransaction1.CommitRetaining;
FDQuery1.Next;
end;
FDTransaction1.Commit;
except
FDTransaction1.Rollback;
raise;
end;
end;