![]() |
Datenbank: Interbase / Firebird • Zugriff über: IB
Transaction wird nicht richtig beendet !
Hallo zusammen,
ich habe hier ein kleines Prob. mit meiner Interbase Datenbank. Ich benutze die IBDatabase, IBTranaction und IBDataSet Komponenten um werte in die DB zu schreiben oder zu bearbeiten. Wenn meine Eingabemaske aufrufe, (vorher rufe ich
Delphi-Quellcode:
auf und meine Daten in den DBEdit's eingegeben habe speichere ich die Daten mit
DM.IBShop.Insert;
Delphi-Quellcode:
in der Datenbank.
DM.IBShop.Post;
So lange mein Programm läuft, sehe ich die Daten in dem DBGrid. Beende ich das Programm und starte neu, sind die Daten nicht mehr da. Jetzt habe ich mal
Delphi-Quellcode:
eingegeben, jetzt werden die Daten gespeichert aber ich kann keine neuen Daten eingeben.
DM.IBShop.Post;
DM.IBTrans.Commit; Was mache ich Falsch ? |
Re: Transaction wird nicht richtig beendet !
Nöö, das ist alles richtig so. Du musst die Transaktion abschließen und das geht mit COMMIT. Dann stehen die Daten sicher in der DB. Als du das nicht gemacht hast und dein Programm beendet hast wurde automatisch ein ROLLBACK gemacht und die Daten wurde nicht eingetragen, das ist so richtig.
Da du die Datenbankkompos von Delphi nimmst, musst du wieder eine Transaktion starten um die Daten zu sehen, das liegt am Interbase/Firebird. Wegen der Multi-Genration-Architektur muss auch jedes SELECT in einer Transaktion laufen. André |
Re: Transaction wird nicht richtig beendet !
Das klappt aber leider nicht so ganz !
Wenn ich
Delphi-Quellcode:
ausführe, werden meine Daten nicht im DBGrid angezeigt. (Ich meine keine Daten.)
IBTrans.StartTransaction;
|
Re: Transaction wird nicht richtig beendet !
Zitat:
|
Re: Transaction wird nicht richtig beendet !
Schade bei mir leider nicht :-(
Delphi-Quellcode:
Wenn ich
DM.IBShop.Post;
// DM.IBTrans.CommitRetaining; dm.IBTrans.Commit; DM.IBTrans.StartTransaction;
Delphi-Quellcode:
eingebe klappt es soll aber nicht grade das Gelbe vom Ei sein habe ich gelesen.
DM.IBTrans.CommitRetaining;
|
Re: Transaction wird nicht richtig beendet !
Hi,
bei einem Commit werden die DataSets geschlossen, d.h. Du musst diese wieder öffnen. Ich gehe da immer her und schließe vor einem Commit die entsprechednen DataSets, mache dann ein Commit und öffne die Dinger wieder. CommitRetaining verhindert das schließen der DataSets, macht aber die Transaktion nicht komplett zu. Das führt bei Mehrbenutzersystemen, die lange laufen und viele Leute gleichzeitig auf die Daten zugreifen, über kurz oder lang zu Problemen, da Transaktionen lange laufen. Grüße Lemmy |
Re: Transaction wird nicht richtig beendet !
Ein StartTransaction macht man prinzipiell vor dem Einfügen der Daten:
Delphi-Quellcode:
Danach ist dann auch beim Öffnen kein weiteres Commit nötig.
dm.IBTrans.StartTransAction ;
dm.IBShop.Insert ; // Daten füllen dm.IBShop.Post ; dm.IBTran.Commit ; |
Re: Transaction wird nicht richtig beendet !
Hallo Mario,
Zitat:
Du mußt diese wieder mit Open öffnen. Bei einem CommitRetaining bleiben die Datenmengen geöffnet. Ein CommitRetaining belastet aber den Server bis zum eigentlichen (Hard)Commit. Welche weiteren Vor- oder Nachteile ein CommitRetaining hat kann ich die aber nicht sagen, ich weis nur das man es wen es geht vermeiden sollte. alex |
Re: Transaction wird nicht richtig beendet !
Danke das war es !
Es lag an der DataSet.Open .... Was mich nur etwas Irretiert, ist das in meinem ersten Projekt wo ich die gleichen Kompos benutze ich kein Commit und Rollback im Script habe und es klappt trozdem. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz