Hm...
also da hast du was missverstanden.
1.
Unter
IB/
FB (und in jedem vernünftigen
DBMS) wird jede
DB-Aktion (Insert/Update/Delete)
im Rahmen einer Transaktion bearbeitet.
2.
Die
Bde kennt einen Mechanismus namens "AutoCommit!
Jede
DB-Aktion wird in ein StartTransaktion/Commit gepackt,
ob man das will oder nicht.
Ausnahme siehe 3.
3.
Stösst man eine Transaktion manuell (DataBase.StartTransaction)
kann man mehrere
DB-Aktionen durchführen ohne das Commit.
Erst durch das manuelle Anstossen sind überhaupt Sachen wie
2
DB-Aktionen müssen klappen, wenn eine der Aktionen fehlschlägt, vergiss alle Aktionen
mit der
BDE überhaupt möglich.
Positiver Nebeneffekt ist eine höhere Geschwindigkeit ...
Alle bisherigen Angaben haben erst mal nichts damit zu tun,
wie viele Clients (sagen wir mal Rechner) auf die
DB zugreifen,
wir reden erst mal nur von einem Client.
Was dein Satz 50 Benutzer und Transaktion gemein haben,
verstehe ich gerade nicht
Ist ja auch schon spät...
Nun du dem "was du immer programmierst
"
Ich versuche, keine Transaktion auf dem Server offen zu haben,
wenn der Client nichts zu tun hat.
if not DataBase.InTransaction then DataBase.StartTransaction
heisst für mich, der Programmierer weiss nicht, ob ein Transaktion offen ist oder nicht.
Und genau da ist das Problem.
Eine offene Transaktion, vielleicht noch in einem Form, was auf Nutzereingaben wartet,
heisst für
IB/
FB einen Riesenaufwand betreiben (MGA).
Das beste wäre ja, für verschiedene Arbeiten (Tabellen oder Funktionsgruppen) eigene Transaktionen
zu verwenden, aber das
und BDE ;( geht nicht.
Es hilft also nur,
1.
BDE wech
(bin gerade dabei)
2. Mit der
BDE noch ein bissel leben (argzzz)
dann keine Transaktionen offen halten
Man müsste dazu sogar mal nen
Assert(DataBase1.InTransaction=False)
vor dem StartTransaction-Code setzen,
um die Stellen zu finden, wo die Transaktion noch offen ist.
Heiko