wo ist optimaler Platz für BeginTrans?
-
Hi,
mal eine Frage an die VCL-Datenbankprofis. Wenn ich bei Zugriffen über ADO-Tools (Adotable, AdoQuery) die Eingaben über Transaktionen absichern will, wo ist dann der optimale Platz für BeginTrans? Noch vor dem Edit bzw. Insert (so mache ich es bisher) oder erst unmittelbar vor dem Post?
Wäre schön, wenn jemand dazu was konkretes weis.Vielen Dan schon immer
Gruß Mümmel
-
Selbstverständlich musst du die Transaktion vor dem INSERT starten, wenn du selbiges in der Transaktion ausführen willst.
-
Er meint wahrscheinlich mit Insert nicht die SQL-Anweisung sondern das Einfügen in die Client-Datenmenge.
-
Hi,
ich meine die C++ bzw. Delphi-Insert-(bzw. Edit)-Anweisung. Da wird ja letztlich erst mal in einem lokalen Puffer was geschrieben und erst mit dem Post in die Datenbank (lokale mdb-Datei) reingeschoben.
Die Frage steht alsoAdoconection->BeginTrans(); AdoTable->Insert(); AdotableNummer->AsInteger = 10; AdoTable->Post(); Adoconection->CommitTrans();
gegen
AdoTable->Insert(); AdotableNummer->AsInteger = 10; Adoconection->BeginTrans(); AdoTable->Post(); Adoconection->CommitTrans();
Gruß Mümmel
-
Hm, kommt drauf an, was der Datenbank Client damit veranstaltet. Es muss nicht zwangsläufig ein SQL Insert daraus gemacht werden. Manche Clients arbeiten auch direkt über eine Datenbank API. In diesem Fall könnte es wohl sein, das das Insert() in Beispiel 2 nicht der Transaktion zugeordnet würde.
Was spricht denn dagegen, es wie in Beispiel 1 zu machen?
-
Hi Cpp_Junky,
vilen Dank für Deine Meinung. wird mir wohl nichts weiter bleiben als bei Beispiel 1 zu bleiben, so wie ich es derzeit mache.
Der Gedanke war nur, daß es nciht immer so knackig ist wie in den beispielen, sondern daß das Setzen in den Edit- oder Insert-Modus und das eigentliche Post im Praktischen an völlig unterschiedlichen Stellen pasieren und dazwischen wird dann fleißig von Hand eingegeben bzw. editiert. Da hatte ich die Hoffnung, daß man einfach den Ramen etwas kürzer halten könnte.Gruß Mümmel
-
Aber das ganze ist doch dann immer noch wie in Beispiel 1 Möglich.
Das man zwischen deinem Transaktionsbeginn und Ende händisch rummacht stört die Transaktion ja nicht.Wenn du nun möchtest das das händisch erledigte Zeugs NICHT Bestandteil der Tranksaktion ist, ist das einzige was du tun musst eine zweite DB-Verbindung für das händische zu öffnen. In diesem Fall bleibt die Transaktion von den manuellen Bearbeitungen unberührt.