AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Transaktionsprobleme, bei konkur. Updates bleibt Programm hä

Transaktionsprobleme, bei konkur. Updates bleibt Programm hä

Offene Frage von "Darkmorph"
Ein Thema von Darkmorph · begonnen am 3. Sep 2009 · letzter Beitrag vom 4. Sep 2009
Antwort Antwort
Darkmorph

Registriert seit: 24. Mär 2003
37 Beiträge
 
Delphi 6 Professional
 
#1

Transaktionsprobleme, bei konkur. Updates bleibt Programm hä

  Alt 3. Sep 2009, 10:37
Datenbank: Firebird • Version: 1.5 • Zugriff über: Delphi Express
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.

SqlConnection.ExecuteDirect('Update personal set vorname="JÖRG SQLCON1" where id=14438'); Bei der Zeile Status := Command.executeImmediate(PChar(SQL), Cursor); bleibt der obige Aufruf dann hängen. Dieser scheint in der DbExpint.dll dann zu liegen.

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:
"lock conflict on no wait transaction.
deadlock.
update conflicts with concurrent update."
Zitat:
SQLCONNECTION ist mit folgenden Parametern gefüttert:
BlobSize=-1
CommitRetain=False //True or False macht keinen Unterschied
Database=127.0.0.1/3050:C:\database.ibf
DriverName=Interbase
ErrorResourceFile=
LocaleCode=0000
Password=masterkey
RoleName=RoleName
ServerCharSet=win1252
SQLDialect=1
Interbase TransIsolation=ReadCommited
User_Name=sysdba
WaitOnLocks=false //True or False macht keinen Unterschied
Wieso kriege ich bei meinem Programm nicht auch eine Exception, wie sie offenbar bei IBExpert geworfen wird?
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
  Mit Zitat antworten Zitat
Darkmorph

Registriert seit: 24. Mär 2003
37 Beiträge
 
Delphi 6 Professional
 
#2

Re: Transaktionsprobleme, bei konkur. Updates bleibt Program

  Alt 3. Sep 2009, 12:09
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?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.010 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Transaktionsprobleme, bei konkur. Updates bleibt Program

  Alt 3. Sep 2009, 14:21
Hallo,

aso es sollte gehen, siehe hier
1

Hast du vielleicht false statt False geschrieben ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Darkmorph

Registriert seit: 24. Mär 2003
37 Beiträge
 
Delphi 6 Professional
 
#4

Re: Transaktionsprobleme, bei konkur. Updates bleibt Program

  Alt 3. Sep 2009, 16:16
Zitat von hoika:
Hallo,
Hast du vielleicht false statt False geschrieben ?
Heiko
Hier die Stelle wo DBExpress diese Option ausliest, du siehst, er uppercased es und nur wenn True steht passiert was. D. h. ich könnte "nö" schreiben und er würde es auch als False interpretieren
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:
If you long transactions
wait, your app will appears to hang when this occurs. Naturally, the
second option is to not wait. This means when an update conflict occurs
you get an error immediately.
Der andere Lösungsansatz mit der LockTable würde zu viel Aufwand und Unwägbarkeiten für mein Projekt bedeuteten. Und davon abgesehen halte ich es für unsinnig FirebirdsLockTable nochmal für meine App zu programmieren.

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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.010 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Transaktionsprobleme, bei konkur. Updates bleibt Program

  Alt 3. Sep 2009, 19:11
Hallo,

könnte auch nen Bug sein,
versuch doch mal die neueste Version von DBExpress zu laden.



Heiko
Heiko
  Mit Zitat antworten Zitat
Darkmorph

Registriert seit: 24. Mär 2003
37 Beiträge
 
Delphi 6 Professional
 
#6

Re: Transaktionsprobleme, bei konkur. Updates bleibt Program

  Alt 4. Sep 2009, 11:06
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.010 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Transaktionsprobleme, bei konkur. Updates bleibt Program

  Alt 4. Sep 2009, 11:17
Hallo,

meinest du den ?
D6 DBExpress

Wieder ein Grund, weg von DBExpress ...
oder halt D2010 (native Firebird Treiber)


Heiko
Heiko
  Mit Zitat antworten Zitat
Darkmorph

Registriert seit: 24. Mär 2003
37 Beiträge
 
Delphi 6 Professional
 
#8

Re: Transaktionsprobleme, bei konkur. Updates bleibt Program

  Alt 4. Sep 2009, 12:12
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.010 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Transaktionsprobleme, bei konkur. Updates bleibt Program

  Alt 4. Sep 2009, 13:01
Hallo,

war denn mein Link der zu der Version, die du schon hast ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Darkmorph

Registriert seit: 24. Mär 2003
37 Beiträge
 
Delphi 6 Professional
 
#10

Re: Transaktionsprobleme, bei konkur. Updates bleibt Program

  Alt 4. Sep 2009, 16:04
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf