AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi mySQL - ID eines neuen Datensatzes ermitteln?
Thema durchsuchen
Ansicht
Themen-Optionen

mySQL - ID eines neuen Datensatzes ermitteln?

Ein Thema von Sharky · begonnen am 14. Feb 2004 · letzter Beitrag vom 16. Feb 2004
Antwort Antwort
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#1

mySQL - ID eines neuen Datensatzes ermitteln?

  Alt 14. Feb 2004, 12:04
Hai,

gibt es eine möglichkeit die ID (autoincrement-Feld) eines neuen Datensatzes bei einem mySQL-Servers zu ermitteln?

Ich brauche diese innerhalb meines Programmes. Oder hat jemand einen anderen tipp für mich?
Ich könnte natürlich als "ID-Feld" eine GUID verwenden aber das ist ja wohl nicht das ware
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#2

Re: mySQL - ID eines neuen Datensatzes ermitteln?

  Alt 14. Feb 2004, 13:14
Hallo Sharky,

habe dazu folgendes gefunden. Vielleicht hilft es Dir weiter.
Zitat von MySQL Manual:
19.2.6 How to Get the Value of an AUTO_INCREMENT Column in ODBC

A common problem is how to get the value of an automatically generated ID from an INSERT. With ODBC, you can do something like this (assuming that auto is an AUTO_INCREMENT field):

INSERT INTO foo (auto,text) VALUES(NULL,'text');
SELECT LAST_INSERT_ID();
Or, if you are just going to insert the ID into another table, you can do this:

INSERT INTO foo (auto,text) VALUES(NULL,'text');
INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text');
See section 19.1.12.3 How to Get the Unique ID for the Last Inserted Row.

For the benefit of some ODBC applications (at least Delphi and Access), the following query can be used to find a newly inserted row:

SELECT * FROM tbl_name WHERE auto IS NULL;
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: mySQL - ID eines neuen Datensatzes ermitteln?

  Alt 14. Feb 2004, 13:21
In der C-API und der PHP-API gibt es außerdem noch den Befehl mysql_insert_id(). Eine Bibliothek, die auf dieser API aufsetzt, kapselt diese Funktion vielleicht.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
ahachmann

Registriert seit: 15. Sep 2003
Ort: Hamburg
54 Beiträge
 
Delphi 7 Professional
 
#4

Re: mySQL - ID eines neuen Datensatzes ermitteln?

  Alt 14. Feb 2004, 14:12
Hallo,
Ansonsten könnte man auch einfach einen Timestamp in den Datensatz mit einbauen.
Wenn evtl. viele gleichzeitig auf die Datenbank zugreifen, dann könnte es sein, das die Last ID schon die ID eines weiteren eingefügten Datensattzes ist.
Wenn Du aber einen Timestamp mit einfügst, und auf diesen Timestamp einen query machst, wird mit der Genauigkeit des Timestamps die wahrscheinlichkeit den falschen Datensatz zu erwischen immer geringer.
Gruß,
Alexander
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#5

Re: mySQL - ID eines neuen Datensatzes ermitteln?

  Alt 14. Feb 2004, 14:24
Zitat von ahachmann:
Wenn evtl. viele gleichzeitig auf die Datenbank zugreifen, dann könnte es sein, das die Last ID schon die ID eines weiteren eingefügten Datensattzes ist.
Bei MySQL (und vermutlich auch bei allen anderen) wird die letzte ID für jede Verbindung einzeln gespeichert, man kriegt also immer seine eigene ID zurück, egal wer in der Zwischenzeit schon von einem anderen Client auf die DB zugegriffen hat:
Zitat von MySQL-Doku:
The most recently generated ID is maintained in the server on a per-connection basis. It will not be changed by another client. It will not even be changed if you update another AUTO_INCREMENT column with a non-magic value (that is, a value that is not NULL and not 0).
Gruß, teebee

[edit]Doku-Auszug eingefügt[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#6

Re: mySQL - ID eines neuen Datensatzes ermitteln?

  Alt 16. Feb 2004, 17:02
Hai ihr,

danke für die Antworten

Mit diesem Code habe ich es jetzt gelöst:

Delphi-Quellcode:
with DataModule1.ZQuery1 do
begin
  close;
  SQL.Clear;
  SQL.Add('INSERT INTO standorte (bezeichnung) VALUES (:bezeichnung)');
  Params[0].AsString := E_Bezeichnung.Text;
  ExecSQL;
  Close;
  SQL.Clear;
  SQL.Add('SELECT LAST_INSERT_ID()');
  Open;
  i_standortid := Fields[0].AsInteger;
  Close;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: mySQL - ID eines neuen Datensatzes ermitteln?

  Alt 16. Feb 2004, 21:14
Gibt es keine Returning-Clause für DML-Statements in mySQL?
Müsste dann ungefähr so aussehen:
Delphi-Quellcode:
  With Query Do
  Begin
    SQL.Text :=
      'INSERT INTO xyz.Table1' + #10 +
      ' VALUES ( :i_F1, :i_F2)' + #10 +
      ' RETURNING ID INTO :o_NewID';
    Parameters.ParamByName('i_F1').Value := 'Hallo';
    Parameters.ParamByName('i_F2').Value := 1;
    Parameters.ParamByName('o_NewID').Direction := pdOutput;
    Prepared := True;

    ExecSQL;

    NewID := Parameters.ParamByName('o_NewID').Value;

  End;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz