Entwickler-Ecke
Datenbanken - [ZEOS] Autoincrement-Wert zurückgeben
MasterBasti - Mi 18.01.06 17:50
Titel: [ZEOS] Autoincrement-Wert zurückgeben
Hallo zusammen,
ich arbeite gerade an einer ziemlich großen Multi-User-Anwendung.
Jetzt stellt sich mir jedoch das Problem bei einem neuen Eintrag den Autoincrement-Wert
zuverlässig zurückzugeben.
Heisst, ich mache einen neuen Datensatz und brauche dann dringend dessen ID, welche per
Autoincrement zugeteilt wurde um in weiteren Tabellen zu schreiben....
Ich stelle mir vor, dies mir den Parametern eines UpdateSQL´s zu lösen.....
Also qausi die ID dort beim Insert mit zu speichern.
Like:
Delphi-Quelltext
1:
| INSERT INTO TABELLE () VALUES () RETURN ID INTO PARAMETERNAME |
Bloß wie ist jetzt der Code genau, bzw. geht das überhaupt ?
Gruß
MasterBasti
UGrohne - Mi 18.01.06 20:37
Kommt auf die Datenbank an. Aber so einen Befehl wie Du in derzeit verwenden willst, gibt es im Moment noch nicht. Firebird 2.0 wird aber so etwas bieten:
SQL-Anweisung
1:
| INSERT INTO TABELLE () VALUES () RETURNING ID; |
Bis dahin musst Du es aber in FB mit einer Stored Procedure machen, wenn Du alles in einem haben willst oder Du setzt den neuen ID-Wert von Hand, indem Du vorher den Generator abfragst.
mkinzler - Mi 18.01.06 21:00
Für diesen Zweck gibt es bei Zeos die Klasse TZSequenz mit Hilfe der man den Aktuelle Wert der Sequenz ( letzter vergebener Wert bzw den nächsten Wert ermittlen kann.
MasterBasti - Mi 18.01.06 22:49
HEy, danke erstmal für eure schnellen Antworten....
Zitat: |
Für diesen Zweck gibt es bei Zeos die Klasse TZSequenz mit Hilfe der man den Aktuelle Wert der Sequenz ( letzter vergebener Wert bzw den nächsten Wert ermittlen kann. |
Wie kommt diese Konkret zum einsatz, bzw. wie wende ich diese an ?
Ich habe z.B. eine bestimmte Tabelle KundenDB, in welche ein Eintrag per UpdateSQL erfolgt, wie und
wo kommt jetzt diese Klasse zum Einsatz ?
Würde mich nochmal über Antwort freuen.
mkinzler - Mi 18.01.06 23:07
Ich habe selber noch nicht mit dieser neuen Komponente gearbeitet (gibts es bisher nur in der alpha Version). Allgemein werden Sequenzen im neuen SQL2003 Standard zur Generierung eindeutiger Schlüssel verwendet. ( Kommt von Oracle wird u.a. aber auch in FB ab 1.5.2 unterstützt.)
Die Komponente wird mit einer TZConnection verbunden. Hat eine Eigenschaft SequenzNmae ( müßte der Namen des Generator/Sequenz sein). Nun gibt es die Eigenschaften GetCurrentValue und GetNextValue. Welche die letzte und die nächste ID einer Sequenz darstellen. Mit der ersten müßte nach einem Insert die vergebene ID ermittelt werden könne. Habe das Ganze aber noch nicht getestet. Im offiziellen Zeosforum wurde die
http://seegernet.koolhost.de/zeosforum/viewtopic.php?t=344Frage auch gestellt, aber leider noch nicht beantwortet.
MasterBasti - Do 19.01.06 19:00
Gibt es denn evtl. noch eine andere Möglichkeit ?
Habe ehrlich gesagt keine große Lust meine mitlehrweile 50 Tabellen neu in meinen Datenmodul zu erstellen ;-)
Kann doch nicht sein, dass ich der einzige bin mit diesem Problem :(
Gruß
Master-Basti
Blawen - Sa 18.02.06 14:27
MasterBasti hat folgendes geschrieben: |
Gibt es denn evtl. noch eine andere Möglichkeit ?
Habe ehrlich gesagt keine große Lust meine mitlehrweile 50 Tabellen neu in meinen Datenmodul zu erstellen ;-)
Kann doch nicht sein, dass ich der einzige bin mit diesem Problem :(
Gruß
Master-Basti |
Der Topic ist zwar älter, aber vielleicht trotzdem noch "aktuell" ?
Wie wäre es hiermit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var ID : Integer;
ZQ.SQL.Text := 'Select LAST_INSERT_ID()'; ZQ.Active := True; ID := ZQ.Fields[0].AsString; |
(Das Beispiel stimmt für eine MySQL-DB. Welche Du einsetzt, hast Du leider nicht geschrieben - in anderen DB dürfte es gleich/ähnlich funktionieren)
Gruss
Blawen
afk - Sa 18.02.06 16:07
In TSQL (MS SQL-Server) geht das mit
direkt nach der Insert-Query.
Gruß Axel
Segelflieger - Di 28.02.06 23:34
Sorry für das Thread-Ausgraben :wink:
aber ich habe ein ähnliches Problem:
Ich benutze eine Paradox7-Tabelle und die BDE-Komponente TTable. Die Tabelle enthält ein AutoIncrement-Feld, dessen Wert ich dringend brauche, sobald ich einen neuen Datensatz per TableX.Append erstellt habe.
Kann mir da jemand weiterhelfen?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!