![]() |
Datenbank: mysql • Version: 5 • Zugriff über: zeos
last_insert_id() funzt nicht..
Hi,
Ich hab folgendes Problem: Zunächst lege ich eine Testtabelle in meinem Schema "hwpool" an :
SQL-Code:
Danach fuege ich einen Datensatz ein :
CREATE TABLE `hwpool`.`test` (
`ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `TEST` VARCHAR(45) NOT NULL DEFAULT '', PRIMARY KEY(`ID`) ) ENGINE = InnoDB;
SQL-Code:
Nun schau ich nach, ob der Datensatz in der Tabelle test angelegt wurde. Er wurde angelegt und die ID des Datensatzes ist 1
INSERT INTO hwpool.test (`test`) VALUES ('bla')
Nun moechte ich durch last_insert_id() herausfinden, was meine zuletzt eingefuegte ID war.
SQL-Code:
Als Rueckgabe bekomme ich nun aber die 0, statt der 1, obwohl ich doch grade eben erst einen Datensatz eingefuegt habe, und der autoincrement Wert dort auf 1 gestiegen ist.
SELECT last_insert_id()
Woran koennte es liegen ? |
Re: last_insert_id() funzt nicht..
Welche Version von MySQL (1.1.20 kenn ich nicht) welche Storage-Engine? Ggf Transaktion committen
|
Re: last_insert_id() funzt nicht..
Hm Fehler von mir..
Vom Server: 5.0.4-beta-nt (via TCP/IP) Vom Client: 5.0.11 Was meinst du mit Transaktion commiten ? |
Re: last_insert_id() funzt nicht..
Ich kenne mich in MySQL im Detail nicht mehr so aus, aber es gibt bestimmte Storage Engines, welche Transaktion ermöglichen. Diese kann man am Stück zurückfahren (rollback) bzw. abschließen (commit).
|
Re: last_insert_id() funzt nicht..
Ja aber meine Transaktion (also das Insert) ist doch abgeschlossen...
Im Query steht ja auch "1 Row affected by the last command..." Im Referenzbuch steht : Zitat:
Zitat:
:gruebel: |
Re: last_insert_id() funzt nicht..
Eine Transaktion kann aber aus mehreren Statements bestehen.
|
Re: last_insert_id() funzt nicht..
Wie würde sich sowas auf mein Problem auswirken bzw. was würdest du anstattdessen schreiben ?
Schreibe ich bspw.
SQL-Code:
Verändert sich nichts an der Tabelle test...
start transaction;
INSERT INTO hwpool.test (`test`) VALUES ('blaaa'); commit; SELECT * FROM test t; |
Re: last_insert_id() funzt nicht..
Du hast zwar geschrieben, das Du mit Zeos auf die DB zugreifst, aber kann es sein, das Du Deine Statements mit einem MySQL-Admintool abschickst?
Last_insert_id funktioniert soweit ich mich erinnere nur innerhalb einer Session. Wenn Du also ein Insert absetzt, gugst ob es geklappt hat und dann erst die Id abfragst (in einer neuen Session)bekommst Du Null. In einer Mehrbenutzerumgebung wird damit gewährleistet, dass man die Id seines eigenen zuletzt eingefügten Satzes bekommt und nicht die von einem anderen Users erhält. Einfach hier eingetippt, also ungestestet:
Delphi-Quellcode:
Wenn du nur den grössten Wert brauchst nimm: Max(ID)
Query1.Sql.Text := 'INSERT INTO hwpool.test (test) VALUES '+QuotedStr('bla') ';
Query1.Execute; //oder wie es bei Zeos heisst Query1.Sql.Text := 'Select Last_Insert_Id() from test'; Query1.Open; ShowMessage(Query.Fields[0].AsString); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 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-2025 by Thomas Breitkreuz