MySQL und Last_insert_id()
-
Probiers mal hiermit
SELECT * FROM tbl_name WHERE id_field IS NULL
[ Dieser Beitrag wurde am 24.01.2003 um 13:28 Uhr von F98 editiert. ]
-
Versuch mal anstatt:
long x = Daten->SQLBefehl->Fields->FieldByName("newid")->Value;
folgendes:
long x = Daten->SQLBefehl->Fields->FieldByName("newid")->AsInteger;
Stimmt der Wert dann immer noch nicht?
-
Also last_insert_id() soll den letzten automatisch vergebenen wert der Spalte ID zurückgeben, und zwar Sitzungsabhängig. Den Hinweis von F98 kann ich nicht verstehen, da es kein id-feld gibt, welches Null ist. Die werte werden richtig vergeben. nur die Funktion liefert immer null. ganz sicher! Habe ich schon mächtig viel getestet. Datentyp ftFMTBcd, Größe 34 und alles \x0.
-
Das brauchste auch nicht verstehen sondern sollte einfach mal anwenden. Statt tbl_name und id_field mußt Du natürlich Deine Tabelle bzw. ID-Spalte einsetzen.
[ Dieser Beitrag wurde am 24.01.2003 um 14:01 Uhr von F98 editiert. ]
-
Es ist ja schön wenn du versuchst mir zu helfen, aber es gibt bei mir keine ID-Spalte mit dem wert "0", da die Daenbank diesen Wert automatisch hochzählt , und somit liefert auch dein Selectbefehl eine leere Datenmenge zurück. Das hat leider gar nichts mit meine Problem zu tun. Was eine Select Anweisung macht verstehe ich sehr gut.
Gruß Gh
-
Hallo,
der Aufruf der Funktion ist etwas anders :
SELECT LAST_INSERT_ID(Feldname) FROM TableName
liefert Dir das gewünscte Ergebnis (Quasi als RecordSet in der Reihenfolge des Einfügens!)Ciao
Wilfrid
-
1. Vorsicht: 0 != NULL
2. das NULL am Ende des SELECTs muß man im Zusammenhang mit der gesamten Anweisung sehen, d.h. so wie die Anweisung da steht liefert sie Dir (insofern Du die Autoinc-Spalte und die Tabelle richtig angegeben hast) den letzten Autoinc-Wert zurück.
-
Hallo F98
dein Select Befehl funktioniert genausogut wie last_insert_id(). Das Problem ist, er muß unmittelbar!! nach der Insert Anweisung erfolgen. Im MySQl Client ist das kein Problem. Die sch.. TSQLQuery Komponente scheint sich aber selber mit der Datenbank zu unterhalten. Selbst wenn ich wie oben angegeben die beiden SQL Befehle hintereinander wegschicke, bekomme ich nicht mehr meine letzten autoinc Wert, sondern einfach 0.
gruß gh
-
Tja, ist halt so eine Sache. Egal was man macht man bekommt meißt immer eine gültige ID zurück, aber weißt Du auch, ob die von Deinem INSERT ist? Oder doch vielleicht von jemand anderem. Getreu dem Motto: "Der letzte gewinnt!"
-
Die Lösung:
Die TSQLQuery Komponente darf sich die Verbindung nicht mit einer TSQLTable Komponente teilen. Verwende für die TSQLQuery´s und TSQLTable´s je eine eigene VerbindungsKomponente und schon funktioniert der obige Code.