AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi FIBPlus: BDE-AutoCommit nachbauen
Thema durchsuchen
Ansicht
Themen-Optionen

FIBPlus: BDE-AutoCommit nachbauen

Ein Thema von hoika · begonnen am 7. Aug 2009 · letzter Beitrag vom 7. Aug 2009
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#1

FIBPlus: BDE-AutoCommit nachbauen

  Alt 7. Aug 2009, 09:06
Datenbank: Firebird • Version: 1.5 • Zugriff über: FIBPlus
Hallo,

jeder TFIBQuery muss ja eine Transaktion zugeordnet werden.
Sonst kommt zu Recht eine Exception.
Das würde aber einen noch mehr Umstellung bei mir bedeuten.

Jetzt gibt es ja OnBeforeExecute/OnAfterExecute und qoAutoCommit.

Da könnte ich doch ne allgemeine Transaktion dranbasteln, oder ?


Ist das ein denkbarer Weg ?


Mensch, ist das Wegkommen von der BDE schwer ;(



Heiko
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: FIBPlus: BDE-AutoCommit nachbauen

  Alt 7. Aug 2009, 10:05
Hallo,

klappt damit.


Heiko
Heiko
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: FIBPlus: BDE-AutoCommit nachbauen

  Alt 7. Aug 2009, 11:38
Zitat von hoika:
Mensch, ist das Wegkommen von der BDE schwer ;(
Mit Verlaub gesaagt : mir kommt es fast so vor, als versuche einer die BDE mit FIBplus nachzubauen. 8) Wieso FIBQuery statt ein FIBDataSet ? Guck Dich nur mal im OI um : FIBQuery : 10 Ereignisse. FIBDataset : 59. Bei den Eigenschaften ist das Verhältnis 12:32 und siehe da : das FIBDataset hat auch ein AutoCommit.

Zitat von FIBPlus-Hilfe:
AutoCommit Sets a mode of automatic committing of dataset changes.
Gruß
Hansa
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: FIBPlus: BDE-AutoCommit nachbauen

  Alt 7. Aug 2009, 11:57
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz