Hallo,
ich habe ein kleines Problem und kann keinen Lösungsansatz finden.
Ich verwende D7, BDE, Paradox und möchte gerne in eine DB einen Datensatz mit einer einzigartigen ID einfügen, jedoch NICHT auto_increment verwenden (selbst, wenn es damit geht, möchte ich wissen, wie ich das Problem lösen kann

)
Also: folgendes Query an die DB um die nächste freie ID zu finden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| SaveData[Nr].Close; SaveData[Nr].SQL.Clear; SaveData[Nr].SQL.Add('select max(id) from test'); SaveData[Nr].Prepare; SaveData[Nr].Open; SaveData[Nr].First; if SaveData[Nr].eof then id:=1 else if SaveData[Nr].Fields[0].Value=NULL then id:=1 else id:=SaveData[Nr].Fields[0].Value+1; SaveData[Nr].Close; |
So, nun steht in ID der nächste freie Wert.
Als nächstes wird das Insert gemacht
Delphi-Quelltext
1: 2: 3: 4: 5:
| SaveData[Nr].SQL.Clear; SaveData[Nr].SQL.Add('Insert into test '); SaveData[Nr].SQL.Add('(id, info) values ('+IntToStr(befund_id)+', 3)'); SaveData[Nr].ExecSQL; SaveData[Nr].Close; |
So weit - so gut - funktioniert alles.
Jetzt würde ich allerdings um diese beiden Anweisungen herum ein Lock auf die Tabellen legen (in MySql einfach mit einem "lock table write"), damit sichergestellt ist, daß eine ID nicht zweimal verwendet wird, weil eine andere Stelle im Prg genauso vorgeht.
Ich habe schon nach "Lock" und "Transactions" hier im Forum gesucht, aber nichts sinnvolles gefunden; auch die localsql.hlp hat mich nicht weitergebracht
Kann jemand helfen ?
lg
Sebastian