Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Autoincwert zurück bekommen (https://www.delphipraxis.net/201553-autoincwert-zurueck-bekommen.html)

mcinternet 31. Jul 2019 16:17

Datenbank: mysql • Version: 8.0.15 • Zugriff über: MyDAC

Autoincwert zurück bekommen
 
Hallo die Gemeinde,

ich stehe hier irgendwie wie ein Ochs vorm Berg und sehe den Wald vor lauter Bäumen nicht.

Ich mache ein query.insert - es werden auch alle Werte eingetragen.
Nur die ID (unique, autoinc) bekomme ich nicht ausgelesen. Auch nicht nach query.post :?::?::?:

Wie kann ich diesen Wert - am liebsten direkt nach query.insert - bekommen?

also in der Form: meinwert := queryID.asInteger;

beste Grüße aus dem Odenwald

mcinternet

mkinzler 31. Jul 2019 16:21

AW: Autoincwert zurück bekommen
 
SQL-Code:
select LAST_INSERT_ID() from ...

mcinternet 31. Jul 2019 16:27

AW: Autoincwert zurück bekommen
 
Zitat:

Zitat von mkinzler (Beitrag 1438474)
SQL-Code:
select LAST_INSERT_ID() from ...


Greift das vor dem qry.post oder danach?

Gruss

mcinternet

mkinzler 31. Jul 2019 16:32

AW: Autoincwert zurück bekommen
 
Danach. Liefert immer die letzte ID einer Sitzung.

https://www.devart.com/mydac/docs/de...t.insertid.htm

mcinternet 31. Jul 2019 16:39

AW: Autoincwert zurück bekommen
 
@mkinzler

Vielen lieben Dank :thumb::thumb:

Problem ist damit gelöst *hauvorKopp* :roll::roll:

Beste Grüße aus dem Odenwald

mcinternet

Sherlock 1. Aug 2019 07:52

AW: Autoincwert zurück bekommen
 
Etwas eleganter ist doch
Code:
insert into table...returning autoinc_field
Sherlock

mkinzler 1. Aug 2019 07:56

AW: Autoincwert zurück bekommen
 
Zitat:

Zitat von Sherlock (Beitrag 1438758)
Etwas eleganter ist doch
Code:
insert into table...returning autoinc_field
Sherlock

Wenn das in MySQL funktioniert.

generic 1. Aug 2019 08:13

AW: Autoincwert zurück bekommen
 
Ich muss ja gestehen ich bin kein Fan von Funktionen wie LAST_INSERT_ID().
Dabei ist es egal welche Datenbank das ist.

Folgende Frage sollte man sich stellen:
Was passiert wenn mehrere Datensätze eingefügt werden? Denn INSERT aus eine SELECT kann es.
Was passiert wenn ein INSERT Trigger auslöst wird, welcher einen weiteren Datensatz in eine andere Tabelle einträgt. Welche ID bekommt man dann zurück?

Daher verfolge ich immer strikt den Ansatz (beim MSSQL) das ich die OUTPUT Option bei INSERT nutze. Das liefert mir dann ein RESULTSET zurück, was wirklich in meiner Tabelle angelegt wurde und dessen IDs.

mcinternet 1. Aug 2019 08:16

AW: Autoincwert zurück bekommen
 
Zitat:

Zitat von generic (Beitrag 1438761)
Daher verfolge ich immer strikt den Ansatz (beim MSSQL) das ich die OUTPUT Option bei INSERT nutze. Das liefert mir dann ein RESULTSET zurück, was wirklich in meiner Tabelle angelegt wurde und dessen IDs.

@generic: ich bitte da um nähere Erläuterung

vielen Dank


beste Grüße

mcinternet

mkinzler 1. Aug 2019 08:24

AW: Autoincwert zurück bekommen
 
Last_insert_id() könnte theoretisch auch die falsche ID zurückliefern, da das "Holen" der ID ja nicht innerhalb der Abfrage erfolgt.
das returning von PosGresSQL/FireBird/... liefert den Wert als Teil der Abfrage zurück. OUTPUT von MSSQL liefert sogar wohl den kompletten Datensatz.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:09 Uhr.
Seite 1 von 2  1 2      

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