Hallo Hansa, wie angekündigt lesen wir uns hier wieder.
Was JoelH in seinem ersten Beitrag schreibt, entspricht genau dem, was ich meinte. Ich hoffe, das ist Dir jetzt so weit klar geworden.
Was jetzt die "Konflikte" angeht, kurz gesagt: die 99%ige Wahrscheinlichkeit hast Du, dass es keinen Konflikt gibt, aber du hast 100%ige Sicherheit, dass die
DB in jedem Fall konsistent bleibt.
Ich versuche das mal am konkreten Beispiel der Überweisung zu erläutern.
Angenommen Du liest ein, dass Du 2.000 € auf dem Konto und füllst (offline, z.B. in Deiner selbst geschriebenen Datenstruktur) eine Überweisung über 1.500 € aus. In der Zwischenzeit (während Deiner Kaffeepause) führt jemand im Nebenbüro eine Überweisung von 1.000 € durch. Wenn Du vom Kaffee zurück kommst, weißt Du natürlich nicht, dass jetzt nur noch 500 € auf dem Konto sind.
Wenn Du jetzt die Transaktion startest und die Daten einträgst, "sieht" die Transaktion die 500 € und zieht davon 1.500 ab (und spuckt wahrscheinlich eine Fehlermeldung wegen der Kontoüberziehung aus). Hättest Du die Transaktion beim Öffnen des Formulars gestartet, "sähe" die Transaktion den Wert 2.000 € und würde als neuen Kontostand 500 € eintragen, wodurch natürlich die
DB fehlerhaft würde.
Damit dies nicht passiert, hat jede
DB (individuelle) Methoden, die Datensätze zu sperren. In dem Beispiel hätte der andere Benutzer bei der "langen" Transaktionsversion wahrscheinlich seine Überweisung gar nicht eintragen dürfen, da Du während der Kaffeepause die Tabelle oder die Datensätze gesperrt hast. Oder er bekommt eine Meldung, die besagt, dass er die Transaktion nicht committen kann, bevor Deine Transaktion nicht beendet ist oder so etwas.
Das Thema der Datensatzsperrung und die Frage der "Isolation" der Transaktionen (-->welche Daten aus einer anderen Transaktion "siehst" du) ist aber ziemlich komplex, und ich bin da auch nicht sicher genug, es Dir wirklich zu erklären.
Nochmals: entscheidend ist nicht die 99%ige Wahrscheinlichkeit, keine Interessenskonflikte beim Posten der Daten zu haben, sondern die Garantie der Datenkonsistenz und die Möglichkeit, auf die Konflikte zu reagieren.
Zu der Frage der Automatischen Transaktionen kann ich nichts sagen, da ich keine Ahnung habe, wie FIBPlus damit umgeht.
Bei IBX geht es so (vielleicht hilft das fürs Verständnis): Die IBDatabase-Komponente hat eine Eigenschaft DefaultTransaction, die mit einer IBTransaction-Komponente belegt werden muss. Jede Datenmengenkomponente hat dadurch über die IBDatabase eine Verbindung zu einer Transaktionskomponente.
Wenn man nun nicht mit IBTransaction1.StartTransaction und .Commit oder .Rollback explizit steuert, wann die Transaktionen gestartet und beendet werden, erledigt IBX das von selbst, d.h. ungefähr: jede Aktion wird in einer eigenen Transaktion gekapselt. Die automatische Steuerung ist i.d.R. sehr bequem, man kann aber u.U. unerwartete Ergebnisse bekommen (dafür weiß ich jetzt aber kein Beispiel).
Wenn ich recht weiß, werben FIBPlus und IBO unter Anderem damit, bessere Möglichkeiten der Transaktionssteuerung zu bieten - frag mich aber nicht, welche. Du solltest Dich auf jeden Fall genau damit beschäftigen, denn hier liegen Möglichkeiten für sehr versteckte Fehler und unerklärliche "Datenverluste".
(Da Du in Deinem alten Beispiel aus dem anderen Thread aber mit einer langen expliziten Transaktion arbeitest, sollte das dort nicht der Fehler sein).
Das muss für jetzt genügen. Ich sollte auch noch was anderes tun...
Grüße
Urs