Hallo Hansa,
klar geht es darum, die
BDE nachzubauen.
sonst muss ich zu viel am Code ändern !
AutoCommit war falsch ausgedrückt, das hat auch TpFIBQuery.
Was ich meinte, war das automatische StartTransaction (qoStartTransaction).
Die Anzahl der Ereignisse sind mir doch Schnuppe
Zuerst mal muss ein lauffähiges Programm her, was zur Not noch mit der
BDE
"rück"-compilierbar ist.
Einem existierenden
BDE-Kunden ist es doch Brust,
ob das Teil über die
BDE oder sonstwas läuft.
Die Korrektheit ist wichtig.
Deswegen kann ich nicht ewig wegen den Transaktionen am Code rumfummeln.
In meinem
BDE-Code steht ne Menge
Delphi-Quellcode:
with Query do
begin
//
end;
aber auch
Delphi-Quellcode:
DB.StartTransaction;
try
with QueryA
do
begin
end;
with QueryB
do
begin
end;
finally
DB.Commit;
end;
Beides muss mit FIBPlus funktionieren,
ohne das ich hier noch gross was mit Transaktionen am Hut haben muss.
Hier übrigens mein Ansatz dazu.
Delphi-Quellcode:
type
TMyQuery = class(TpFibQuery)
public
bAutoTransaction: Boolean;
constructor Create(AOwner: TComponent); override;
procedure PrepareAutoCommit(Sender: TObject);
procedure UnPrepareAutoCommit(Sender: TObject);
end;
constructor TMyQuery.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
BeforeExecute := PrepareAutoCommit;
AfterExecute := UnPrepareAutoCommit;
end;
procedure TMyQuery.PrepareAutoCommit(Sender: TObject);
begin
Assert(Self.Database<>NIL, 'theQuery.Database=NIL');
Assert(Self.Transaction<>NIL, 'theQuery.Transaction=NIL');
if Self.Database=NIL then Exit;
if Self.Transaction=NIL then Exit;
if Self.Transaction.InTransaction=False then
begin
Self.Options:= Self.Options + [qoStartTransaction];
bAutoTransaction:= True;
end;
end;
procedure TMyQuery.UnPrepareAutoCommit(Sender: TObject);
begin
if Self.bAutoTransaction then
begin
if Self.Transaction.InTransaction then
begin
Self.Transaction.Commit;
end;
Self.Options:= Self.Options - [qoStartTransaction];
Self.bAutoTransaction:= False;
end;
end;
Klappt ja auch
#Update#:
Ein gleichzeitiges Setzen von
qoStartTransaction
und
qoAutoCommit bringt übrigens nichts.
Dann funktionieren die expliziten (manuellen) Transaktionen nicht.
Heiko