Autor Beitrag
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Mo 11.12.06 22:59 
Hi

hab da ein Problemchen.

Hoffe ist einer hier, der mit MyDAC arbeitet.
Also, beliebtes Spiel mit der Vergabe der Rechnungsnummer, oder ähnlich...Satzsperre ist angesagt.
Hab das mit Transaktionseinleitung und myquery1.lock(lrImmediately) versucht und dann haut er mir ne Fehlermeldung um die Ohren, daß er die Spalte nicht gefunden hätte, was mich auch nicht weiter wundert, denn mydac haut offenbar beim Locking ein _1 an den Primary Key dran. Also Matchcode heißt dann aufeinmal nicht mehr MatchCode sondern MatchCode_1.
Hatte vorher noch ein Auto_inc-Feld als Primary, war dasselbe BK_lfdNr war dann in der Fehlermeldung BK-lfdNr_1

Soweit so schlecht...Satzsperre habe ich dann mit innodb SELECT.....FOR UDPATE, damit wird der Satz auch fürs Lesen gesperrt.
Entsprechenden Test zufolge sogar wirklich prima.
Hab den Test mit Haltepunkt gemacht, hieß User1 war gesperrt, user2 will auch ne Rechnungsnummer, kriegt keine. Entweder läuft das Ganze in ein Timeout, oder aber User1 hoppelt vom Record runter und gibt den Satz frei per Commit...Und User2 kriegt die nächste Rechnungsnummer.
Müßte so eigentlich auch mit mehreren Usern funktionieren...hoff
Was mich aber jetzt noch kosmetisch stört, ist, daß ich im Prozess von User2 nicht weiß, daßm der record gelockt ist, der User drückt auf Rechnung drucken...kommt mit dem Lock ins Gehege, bekommt den StandardMauszeiger und nix tut sich.

Hoffe hab mich verständlich ausgedrückt

LG

Aga