Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Transaction wird nicht richtig beendet ! (https://www.delphipraxis.net/61677-transaction-wird-nicht-richtig-beendet.html)

wlfmario 24. Jan 2006 23:17

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:
DM.IBShop.Insert;
auf und meine Daten in den DBEdit's eingegeben habe speichere ich die Daten mit
Delphi-Quellcode:
DM.IBShop.Post;
in der Datenbank.
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:
DM.IBShop.Post;
DM.IBTrans.Commit;
eingegeben, jetzt werden die Daten gespeichert aber ich kann keine neuen Daten eingeben.
Was mache ich Falsch ?

MagicAndre1981 24. Jan 2006 23:29

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é

wlfmario 24. Jan 2006 23:38

Re: Transaction wird nicht richtig beendet !
 
Das klappt aber leider nicht so ganz !
Wenn ich
Delphi-Quellcode:
IBTrans.StartTransaction;
ausführe, werden meine Daten nicht im DBGrid angezeigt. (Ich meine keine Daten.)

MagicAndre1981 24. Jan 2006 23:43

Re: Transaction wird nicht richtig beendet !
 
Zitat:

Zitat von wlfmario
Delphi-Quellcode:
IBTrans.StartTransaction;

Direkt noch dem Commit sollte das aber schon klappen? :gruebel: Ich hab schon 2 Jahre nix mehr mit dem FB unter Delphi gemacht :gruebel:

wlfmario 24. Jan 2006 23:47

Re: Transaction wird nicht richtig beendet !
 
Schade bei mir leider nicht :-(

Delphi-Quellcode:
 DM.IBShop.Post;
//  DM.IBTrans.CommitRetaining;
dm.IBTrans.Commit;
DM.IBTrans.StartTransaction;
Wenn ich
Delphi-Quellcode:
DM.IBTrans.CommitRetaining;
eingebe klappt es soll aber nicht grade das Gelbe vom Ei sein habe ich gelesen.

Lemmy 25. Jan 2006 07:36

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

Jelly 25. Jan 2006 07:44

Re: Transaction wird nicht richtig beendet !
 
Ein StartTransaction macht man prinzipiell vor dem Einfügen der Daten:

Delphi-Quellcode:
dm.IBTrans.StartTransAction ;
dm.IBShop.Insert ;
// Daten füllen
dm.IBShop.Post ;
dm.IBTran.Commit ;
Danach ist dann auch beim Öffnen kein weiteres Commit nötig.

alex517 25. Jan 2006 07:47

Re: Transaction wird nicht richtig beendet !
 
Hallo Mario,

Zitat:

Zitat von wlfmario
Schade bei mir leider nicht :-(

Delphi-Quellcode:
 DM.IBShop.Post;
//  DM.IBTrans.CommitRetaining;
dm.IBTrans.Commit;
DM.IBTrans.StartTransaction;
Wenn ich
Delphi-Quellcode:
DM.IBTrans.CommitRetaining;
eingebe klappt es soll aber nicht grade das Gelbe vom Ei sein habe ich gelesen.

Durch ein (Hard)Commit werden alle zur Transaction gehörenden Datenmengen geschlossen.
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

wlfmario 25. Jan 2006 11:13

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 02:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz