Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Prism Auto_inc Wert vor bzw. sofort nach dem speichern ermitteln. (https://www.delphipraxis.net/75731-auto_inc-wert-vor-bzw-sofort-nach-dem-speichern-ermitteln.html)

Mavarik 24. Aug 2006 08:44

Datenbank: MySQL • Version: 5 • Zugriff über: MySQL .Net Client

Auto_inc Wert vor bzw. sofort nach dem speichern ermitteln.
 
Hallo Zusammen!

Ich würde gerne wissen, wie ich den Auto_inc Wert des so eben erzeugten Datensatzes ermitteln kann?

Beispiel

Ich erzeuge einen Datensatz und muss in eine Fremddatei das so eben geschriebene ID speichern.

Das Auto_inc ID ist primary Key.

Danke Frank :wiejetzt:

chrisw 24. Aug 2006 08:47

Re: Auto_inc Wert vor bzw. sofort nach dem speichern ermitte
 
Also mit SQL geht das so:

SELECT LAST_INSERT_ID()

oder

SELECT * FROM table_name WHERE id_field IS NULL

oder

SELECT @@IDENTITY

mkinzler 24. Aug 2006 08:48

Re: Auto_inc Wert vor bzw. sofort nach dem speichern ermitte
 
Ich weiß nicht, wie es beim .Net-Client ist, die Mysql-API bietet aber die Funktion mysql_insert_id(), über die man die letzte in der aktuellen Session vergebene ID zurückgeliefet bekommt.

Mavarik 24. Aug 2006 08:49

Re: Auto_inc Wert vor bzw. sofort nach dem speichern ermitte
 
Danke!

Zitat:

Zitat von chrisw
Also mit SQL geht das so:
SELECT * FROM table_name WHERE id_field IS NULL

NULL?

Wie kann ein Auto_inc Feld Null sein?

Frank

Jelly 24. Aug 2006 08:58

Re: Auto_inc Wert vor bzw. sofort nach dem speichern ermitte
 
Zitat:

Zitat von chrisw
SELECT LAST_INSERT_ID()

Das sollte bei MySQL klappen... Aufruf nachdem in Delphi der Datensatz geschrieben wurde. Unter Delphi32 wäre das z.B. im AfterPost Ereignis.

Zitat:

Zitat von chrisw
SELECT * FROM table_name WHERE id_field IS NULL

Das klappt nicht. Rufst Du den Befehl vor dem Speichern auf, kriegst du die nicht die ID des Datensatzen, der ja neu angelegt wird. Rufst du den Befehl nach dem Speichern auf, so ist das id_field sicherlich nicht null... Und selbst wenn du ein "order by id_field desc limit 0,1" hinzufügst, kriegst du zwar den zuletzt eingefügte ID zurück, aber es garantiert Dir keiner, dass der Datensatz auch von DIR hinzugefügt wurde. Schliesslich hängen normalerweise noch mehrere Clients an der gleichen Datenbank und können unter Umständen gleiche Aktionen ausführen.

Zitat:

Zitat von chrisw
SELECT @@IDENTITY

Das wäre die MSSQL Variante, aber nicht ausführbar für MySQL. Entspricht im Grunde einem Select LAST_INSERT_ID()

chrisw 24. Aug 2006 10:44

Re: Auto_inc Wert vor bzw. sofort nach dem speichern ermitte
 
Also hier mal die entsprechenden Passagen aus dem aktuellen MySQL Handbuch !!!


IDENTITY = value

Diese Variable ist synonym zur Variablen LAST_INSERT_ID. Sie ist aus Gründen der Kompatibilität mit anderen Datenbanksystemen vorhanden. Sie können ihren Wert mit SELECT @@IDENTITY auslesen und mit SET IDENTITY einstellen.


LAST_INSERT_ID = value

Stellt den von LAST_INSERT_ID() zurückzugebenden Wert ein. Dieser wird im Binärlog gespeichert, wenn Sie LAST_INSERT_ID() in einer Anweisung verwenden, die eine Tabelle aktualisiert. Durch Einstellen dieser Variablen wird der von der C-API-Funktion mysql_insert_id() zurückgegebene Wert nicht geändert.

SQL_AUTO_IS_NULL = {0 | 1}

Bei der Einstellung 1 (Vorgabe) ermitteln Sie den zuletzt eingefügten Datensatz für eine Tabelle, die eine AUTO_INCREMENT-Spalte umfasst, mithilfe des folgenden Konstrukts:

WHERE auto_increment_column IS NULL


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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 by Thomas Breitkreuz