![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: Delphi Express
Transaktionsprobleme, bei konkur. Updates bleibt Programm hä
Hi,
ich hab folgendes Problem. Wenn ich einen Datensatz ändere und diese Transaktion offen lasse und dann eine zweite instanz von meinem Programm darauf zugreift, um diesen auch zu ändern, bleibt die 2. Instanz erst hängen ohne auslastung und wenn meine erste Instanz commited, produziert die 2. Instanz 100% Last.
SQL-Code:
Bei der Zeile
SqlConnection.ExecuteDirect('Update personal set vorname="JÖRG SQLCON1" where id=14438');
Delphi-Quellcode:
bleibt der obige Aufruf dann hängen. Dieser scheint in der DbExpint.dll dann zu liegen.
Status := Command.executeImmediate(PChar(SQL), Cursor);
Es muß aber auch anders gehen, da wenn ich z. B. mit IBExpert als 2. Instanz auf den Datensatz gehe und diesen ändern und commiten will, bringt dieser sofort die Meldung Datensatz blockiert. Zitat:
Zitat:
Falls Ihr Probleme habt meinen Wirren Gedanken zu folgen, bitte einfach nachfragen. An der Lösung wäre ich echt brennend interessiert. Vielen Dank für eure Mühen, Gruß Benjamin |
Re: Transaktionsprobleme, bei konkur. Updates bleibt Program
Durch Stunden der Recherche hab ich ermitteln können, dass andere Komponenten eine Property Namens "NoWait" bieten, welche wenn es zu beschriebener Situation eine abfangbare Expception auslöst. Es würde mir schon helfen, wenn ich wüßte, wie man diese über die TSQLConnection setzen kann. Einfaches einfügen in die Params geht leider nicht, hab das in meiner Verzweiflung schon versucht...
Update: Hab das Szenario mit IBDataBase und IBSQL + IBTransaktion nachgestellt, dort wird die gewünschte Exception geschmissen, wenn im IBTransaktion das Setting NOWAIT gesetzt ist. Wie bekomme ich dbExpress dazu, Firebird mitzuteilen genauso zu handeln? |
Re: Transaktionsprobleme, bei konkur. Updates bleibt Program
|
Re: Transaktionsprobleme, bei konkur. Updates bleibt Program
Zitat:
FISQLConnection.SetOption(eConnWaitOnLocks, LongInt(UpperCase(trim(FParams.Values[WAITONLOCKS_KEY])) = 'TRUE')); Also anders als im Artikel gesagt, funktioniert WaitOnLocks leider garnicht bei mir. Was ich bräuchte wäre, wie es die IBTransaction-Komponente bietet, ist die Möglichkeit NOWAIT für eine Transaktion zu definieren, so daß ich sofort eine Fehlermeldung bekomme. Die Erste Antwort im deinem Artikel spricht von einer 2. Option "Not Wait" aber wie man diese zum Laufen bringt, verät der Autor leider nicht: Zitat:
Falls euch noch andere Wege einfallen, wäre ich auch weiterhin sehr dankbar für Input :) Vielen Dank Hoika für die schnelle Hilfe, Grüße Benjamin |
Re: Transaktionsprobleme, bei konkur. Updates bleibt Program
Hallo,
könnte auch nen Bug sein, versuch doch mal die neueste Version von DBExpress zu laden. Heiko |
Re: Transaktionsprobleme, bei konkur. Updates bleibt Program
Hi Hoika,
auf die Idee war ich auch schon gekommen, aber wie und wo für delphi 6? Von Embarcardo gabs nur das Update zu Interbase 6.5, welches eine ältere DLL mitlieferte, als ich im Einsatz hatte. Ich hab spasseshalber mal den dbExpress Interbase-Treiber von DevART ausprobiert ("DevartInterBase"). Voila, auch mit der originalen TSQLConnection funktioniert alles Prima, ich kriege sofort die Meldung Lock Conflickt. D. h. meine DBExpInt.dll (also der Interbase-Treiber der mit Delphi mit kommt D6) ist zu alt oder buggy. Bekomme ich irgendwo einen neuen? D7 funzt leider nicht 100% aber wirft wenigstens 'ne accessviolation bei Lock conflict. Gruß Ben |
Re: Transaktionsprobleme, bei konkur. Updates bleibt Program
Hallo,
meinest du den ? ![]() Wieder ein Grund, weg von DBExpress ... oder halt D2010 (native Firebird Treiber) Heiko |
Re: Transaktionsprobleme, bei konkur. Updates bleibt Program
Hi Hoika,
glaub mir, wenn ich könnte würde ich sofort switchen. Aber mein Projekt ist mittlerweile so umfangreich, daß eine Portierung zu den IBComponenten oder D2010 zu aufwendig wäre. Es darf nicht war sein, aber am Ende wird mir wohl doch nichts anderes übrig bleiben, als einen eigenen Lock-Mechanismuß zu proggen, weil dbExpint buggy ist. Ich hoffe immer noch auf einen Fingerzeig auf eine Möglichkeit diese Sache einfacher zu lösen, aber werde mir schon einmal parallel Gedanken zum Locking machen... Gruß Benjamin |
Re: Transaktionsprobleme, bei konkur. Updates bleibt Program
Hallo,
war denn mein Link der zu der Version, die du schon hast ? Heiko |
Re: Transaktionsprobleme, bei konkur. Updates bleibt Program
nein, zu einer noch älteren Version. Vor der DbExpint.dll V7 wurden ja leider keine Versionsinformationen in die DLL eingetragen, aber am Timestamp konnte ich erkennen, daß meine paar Monate jünger war, als die zu dem Update von dir....
Gruß Benjamin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 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-2025 by Thomas Breitkreuz