Transaktionsproblem
-
Hallo!
Ich habe ein Problem mit Transaktionen beim Datenbankzugriff. Ich verwende Visual C++ 6 und greife auf die Datenbank mittels ODBC und den MFC-Klassen CDatabase und CRecordset zu.
Gibt es hier irgendeine Möglichkeit festzustellen, ob eine Transaktion, die mit CDatabase::BeginTrans gestartet wurde schon abgeschlossen ist?
Das Problem ist, daß es sich hier um ein altes C++ Projekt handelt, daß ich nun erweitern muß. Das CDatabase-Objekt ist global und offensichtlich wurde da irgend eine Transaktion nicht beendet. D.h. im Debug-Modus bekomme ich immer eine Assertion, wenn ich meine eigene Transaktion starten will, weil man ja keine Transaktion innerhalb einer Transaktion starten kann. Habe auch schon gleich am Anfang meiner Methode den Aufruf CDatabase::CommitTrans gesetzt, um eine noch offene Transaktion zu beenden. Dann bekomme ich allerdings eine Assertion, wenn ich meine Methode 2x hintereinander aufrufe, weil man eine Transaktion erst commiten darf, wenn vorher CDatabase::BeginTrans aufgerufen wurde. Ich brauch also etwas wie
if (transaktion_noch_nicht_beendet)
m_database.CommitTRans();
-
Mach dir dochn Zähler der bei BeginTrans hochzählt und bei Commit/Rollback zurückzählt. Dann weisst du immer ob irgendwo ne Transaktion offen ist wenn der Zähler != 0 ist. Und bastel dir TRACE("Start"), TRACE("COMMIT") usw zu deinen Funktionen dann kannst du besser debuggen wo und wann gerade Transaktionen gestartet, beendet oder zurückgerollt werden.
-
Gute Idee. Werde das mal probieren. Danke für die Antwort.