Discussion:
IB Komponenten / Transaktionen
(zu alt für eine Antwort)
Gerhard Delfs
2006-03-31 14:46:51 UTC
Permalink
Hi,

in einem Programm sollen die BDE-Komponenten durch IB-Komponenten
ersetzt werden. Eigentlich kein großes Problem, da alles fein säuberlich
in Datanmodulen steckt etc. Bei einem kleineren Projekt ist das auch
schlicht und einfach zu machen gewesen.

Nun habe ich in diesem etwas größeren Projekt explizite
Transaktionssteuerungen und die sollen natürlich auch wieder so
funktionieren. Im ersten Test war aber das reine Chaos. Ich habe dann
festgestellt, das eine IBTransaction schon beim OPEN einer Query die
InTransaction Property auf true setzt und dass nach einem Commit oder
Rollback alle Queries und Tabellen geschlossen werden. Das ist ein ganz
anderes Verhalten, als bei den BDE-Komponenten und führt zu reinem
Chaos, wenn anderes vorrausgesetzt wird...

Ist das so gewollt? Lässt sich das ändern?

Ich habe schon etliches durchsucht, aber keine konkreten Hinweise
gefunden - vielleicht suche ich falsch ;-)

Irgendwelche Hinweise oder Ideen hier im Forum?

Danke!

Gerhard
Florian Hector
2006-03-31 18:04:58 UTC
Permalink
Post by Gerhard Delfs
Nun habe ich in diesem etwas größeren Projekt explizite
Transaktionssteuerungen und die sollen natürlich auch wieder so
funktionieren. Im ersten Test war aber das reine Chaos. Ich habe dann
festgestellt, das eine IBTransaction schon beim OPEN einer Query die
InTransaction Property auf true setzt und dass nach einem Commit oder
Rollback alle Queries und Tabellen geschlossen werden. Das ist ein ganz
anderes Verhalten, als bei den BDE-Komponenten und führt zu reinem
Chaos, wenn anderes vorrausgesetzt wird...
Ist das so gewollt? Lässt sich das ändern?
Als Alternative bietet sich CommitRetaining an, das commited ohne die Datenmenge zu schließen. Das
ist ungefähr auch das, was die BDE macht. Das Negative an dieser Lösung ist, daß eben nicht wirklich
committed wird, d.h. daß der Server ewig und drei Tage alte Datensatzversionen mit rumschleppt.
Bei IB/FB ist es halt so, dass alles außer dem Abfragen eines Generatorwertes im Kontext einer
Transaktion läuft.
CommitRetaining ist nicht wirklich eine Lösung, diesbezügliche Tipps gehen immer in die Richtung:
Benutze Commit und halte deine Transaktionen möglichst kurz.

Florian
Gerhard Delfs
2006-04-03 13:16:00 UTC
Permalink
Hallo Florian,
Post by Florian Hector
Bei IB/FB ist es halt so, dass alles außer dem Abfragen eines
Generatorwertes im Kontext einer Transaktion läuft.
...und warum sagt mir das keiner? ;-)

...mir geht es ja um den dramatischen Unterschied im Verhalten zwischen
der BDE und den IB-Komponenten. Das nervt schon...

Also werde ich alle eure Tipps beherzigen und eine eigene Überwachung
einbauen...

Aber gelesen hab' ich das nirgendwo - woher wisst ihr das dann?
Schlechte Erfahrungen gesammelt? ;-)

Grüße

Gerhard
Marian Aldenhövel
2006-04-01 06:40:42 UTC
Permalink
Hi,
Post by Gerhard Delfs
Nun habe ich in diesem etwas größeren Projekt explizite
Transaktionssteuerungen und die sollen natürlich auch wieder so
funktionieren.
In IB/FB brauchst Du _immer_ eine Transaktion, auch wenn Du nur lesen willst.
Post by Gerhard Delfs
Im ersten Test war aber das reine Chaos. Ich habe dann
festgestellt, das eine IBTransaction schon beim OPEN einer Query die
InTransaction Property auf true setzt
Dagegen hülfe nur ein eigenes Flag das Du explizit an den Stellen auf True
setzt an denen Du jetzt eine Transaktion beginnst. Also entweder eine Ableitung
von der IBTransaction baust und verwendest oder die Steuerung durch Methoden
zum Beispiel eines Datenmoduls umleitest die dann das Flag setzen/zurücksetzen.
Post by Gerhard Delfs
und dass nach einem Commit oder Rollback alle Queries und Tabellen
geschlossen werden.
Dagegen hilft nur COMMIT RETAINING. Aber lies' vorher nach was Du Dir sonst
damit einhandelst.

Ciao, MM
--
Marian Aldenhövel, Rosenhain 23, 53123 Bonn
http://www.marian-aldenhoevel.de
"I ran some quick calculations on it. He's about 80% on the right
track. That leaves him only 20% dead when he crashes." Bob C
Gerhard Delfs
2006-04-03 13:19:24 UTC
Permalink
Hallo Marian,
Post by Marian Aldenhövel
In IB/FB brauchst Du _immer_ eine Transaktion, auch wenn Du nur lesen willst.
...dann wird die aber in der BDE - ganz offensichtlich - so nicht
durchgereicht, wohl aber bei den IB-Komps... das macht dann auch den
Unterschied aus...

Ich werde alle Tipps bündeln und die direkte Überwachung selbst
vornehmen, damit ich weiss, was wann gemacht wurde...

Grüße

Gerhard
Dirk Stein
2006-04-01 10:58:24 UTC
Permalink
Post by Gerhard Delfs
in einem Programm sollen die BDE-Komponenten durch IB-Komponenten
ersetzt werden.
Nur eine Anmerkung zu IBX, denke daran das IBX und Firebird >= 1.5
nicht 100% kompatible ist.
Und mit jeder Version von Firebird der "Abstand" immer größer wird.

Nur so am Rande ;-)

Dirk Stein
Gerhard Delfs
2006-04-03 13:20:30 UTC
Permalink
Post by Dirk Stein
Post by Gerhard Delfs
in einem Programm sollen die BDE-Komponenten durch IB-Komponenten
ersetzt werden.
Nur eine Anmerkung zu IBX, denke daran das IBX und Firebird >= 1.5
nicht 100% kompatible ist.
Und mit jeder Version von Firebird der "Abstand" immer größer wird.
Nur so am Rande ;-)
Dirk Stein
Hallo Dirk,

ja, ich weiss - es wird nur 1.0... benutzt - Danke!

Grüße

Gerhard

Lesen Sie weiter auf narkive:
Loading...