Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Programm 2x offen=falsche Daten (https://www.delphipraxis.net/146767-programm-2x-offen%3Dfalsche-daten.html)

Teekeks 26. Jan 2010 21:15

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBConnection und/oder Zeos

Programm 2x offen=falsche Daten
 
Hallo!

Ich habe hier ein Problem mit meiner Datenbank.

Szenario:
-2x das selbe Programm welches immer die eigenen Daten von der Datenbank holt (selbe Tabellen)
-Beide sind Connectet
-Das eine Programm schreibt ein INSERT (z.B.)
-Beide Aktualisieren (SELECT)
-Bei dem von dem das INSERT ausgeht wird alles richtig angezeigt (also der Datensatz ist da)
-Bei dem anderen wird trotz SELECT der Datensatz nicht Angezeigt

Ich muss mich neu zur Datenbank Connecten damit der auch dort richtig angezeigt wird.


Was mache ich da falsch/ wie mach ich es richtig?

Das Problem tritt bei den Zeos-Komponenten genau so auf wie bei der IBConnection


Gruß Teekeks

mkinzler 26. Jan 2010 21:27

Re: Programm 2x offen=falsche Daten
 
Die beiden Verbindungen laufen ja in verschiedenen Transaktionen. Vermutlich wir nach dem Insert kein Commit ausgeführt.

Teekeks 26. Jan 2010 21:32

Re: Programm 2x offen=falsche Daten
 
Doch doch, es wird ein Insert ausgeführt.
Die Daten landen ja auch in der Datenbank...

mkinzler 26. Jan 2010 21:34

Re: Programm 2x offen=falsche Daten
 
Der Insert vielleicht schon, wird aber auch die Tranaktion abgeschlossen (commit)? Vorher sind die Änderungen nur in der selben Transaktion oder bei dirty-read sichtbar.

alex517 26. Jan 2010 21:40

Re: Programm 2x offen=falsche Daten
 
Zitat:

Zitat von mkinzler
Der Insert vielleicht schon, wird aber auch die Tranaktion abgeschlossen (commit)? Vorher sind die Änderungen nur in der selben Transaktion oder bei dirty-read sichtbar.

Firebird kennt kein "dirty-read".
Es muß immer ein Commit oder wenigstens ein CommitRetaining(führt auf Dauer zu Problemen) ausgeführt werden,
damit andere Transaktionen die geänderten Daten sehen können.


alex

Teekeks 26. Jan 2010 21:42

Re: Programm 2x offen=falsche Daten
 
es wird ja auch ein commit hinterher geschickt...

haentschman 26. Jan 2010 22:01

Re: Programm 2x offen=falsche Daten
 
Guten Abend... :hi:

ich denke das Stichwort heißt Transaktion Level.

Stelle mal TransactionIsolationLevel auf tiReadCommitted statt auf tiNone dann werden alle Transaktionen welche commited sind für "andere" sichtbar.

Teekeks 26. Jan 2010 22:12

Re: Programm 2x offen=falsche Daten
 
Zitat:

Zitat von haentschman
Guten Abend... :hi:

ich denke das Stichwort heißt Transaktion Level.

Stelle mal TransactionIsolationLevel auf tiReadCommitted statt auf tiNone dann werden alle Transaktionen welche commited sind für "andere" sichtbar.

Sowas gibt es hier irgendwie nicht... Bei welcher Komponente soll das sein?

Luckie 26. Jan 2010 22:16

Re: Programm 2x offen=falsche Daten
 
Guck mal in den Datenbakeinstellungen. Zumindest ich würde es da suchen.

hoika 27. Jan 2010 07:30

Re: Programm 2x offen=falsche Daten
 
Hallo,

Zitat:

Firebird kennt kein "dirty-read".
Besser ist das auch.


Das Problem ist, dass Programm 2 (Select)
erst eine neue Transaktion starten muss,
bevor es die Daten von Programm1 (nach dessen Commit) sehen kann.

Prog 1 Prog 2
StartTrans StartTrans
Insert Select -> keine Daten
Commit Select -> keine Daten
Commit
Select -> Daten sind sichtbar


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.
Seite 1 von 2  1 2      

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