Einzelnen Beitrag anzeigen

Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TIBTransaction.Commit schließt Datenverbindung?

  Alt 17. Apr 2005, 08:05
Guten Morgen,

muss hier mal den Zeigefinger heben und Achtung! rufen.

1. CommitRetaining muss mit sehr großer Vorsicht genossen werden! Bei der Transaktionssteuerung in IB/FB passiert folgendes: Jede Transaktion erhält eine eindeutige Transaktionsnummer. Durch die Multigenerationenarchitektur von IB/FB erhält die Transaktion dann Zugriff auf eine "Kopie" des Datenbestandes, der zum Zeitpunkt des Startes der Transaktion gültig war. Wird diese Transaktion jetzt eine zeitlang mit CommitRetaining bearbeitet, passiert folgendes: Es werden von anderen Clients immer weitere Transaktionen gestartet. Somit steigt der Unterschied zwischen unserer Transaktion (oldest active transaction) und der neuesten Transaktion immer weiter an. Das muss IB/FB aber verwalten, was Systemressourcen und damit Performance benötigt.

2. Es gibt einen viel eleganteren Weg das Problem zu umgehen:

Schreibe eine spezielle Prozedur, die das erledigt:

Delphi-Quellcode:
procedure SQLUpdate;
begin
  GridDataset.Close;
  if Transaction.InTransaction then
    Transaction.Commit;
  Transaction.StartTransaction;
  GridDataSet.Open;
end;
Nach dem Post rufst Du einfach diese Proc auf und alles ist in Ordnung.

Zudem ist Dein Code etwas "schlecht" da Du momentan die automatische Transaktionssteuerung und die manuelle Transaktionssteuerung miteinander vermischt. Das ist nicht gut!


Hinweis: Selbstverständlich sind die Auswirkungen in Datenbanken mit einer Tabelle und 20 Datensätzen nicht zu spüren. Im Dauerbetrieb machen sich diese allerdings sehr schnell bemerkbar! Dennoch sollte auch bei kleinen Appl. auf solche Dinge Rücksicht genommen werden, ist zum einen nicht schwer, zum anderen schleift sich da nicht etwas ein, was nciht sein darf....

Grüße
Lemmy
  Mit Zitat antworten Zitat