Delphi-PRAXiS
Seite 2 von 2     12   

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)

Sherlock 1. Aug 2019 11:04

AW: Autoincwert zurück bekommen
 
Wie ich gerade lesen konnte ist Last_Insert_ID verbindungsbezogen. Das bedeutet, selbst wenn andere gleichzeitig Datensätze anlegen, Last_Insert_ID gibt für die aktuelle Sitzung/Verbindung die korrekte letzte ID zurück. Aufwändig, aber wenn returning nicht unterstützt wird (Oracle muss halt MySQL irgendwie kleiner halten als das Hauptprodukt) die einzige Möglichkeit.

Sherlock

generic 1. Aug 2019 11:25

AW: Autoincwert zurück bekommen
 
Kein Problem hier eine Demo für der MSSQL! (nicht MYSQL):

Code:
CREATE TABLE [dbo].[Demo](
   [Id] [int] IDENTITY(1,1) NOT NULL,
   [Text] [varchar](max) NOT NULL,
 CONSTRAINT [PK_Demo] PRIMARY KEY CLUSTERED
(
   [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Nun der Insert:
Code:
INSERT INTO [dbo].[Demo] ([Text])
output inserted.Id, inserted.Text
VALUES ('Hund'),
('Katze'),
('Maus')
GO
Liefert als Resultset:
Code:
1   Hund
2   Katze
3   Maus
Sprich, dass was ich einfüge dafür habe ich auch die exakten Keys. Also nicht das was vielleicht noch im Hintergrund abläuft durch Trigger oder parallel laufenden Prozessen.

mkinzler 1. Aug 2019 11:29

AW: Autoincwert zurück bekommen
 
Es geht aber um MySQL!

generic 5. Aug 2019 08:16

AW: Autoincwert zurück bekommen
 
Zitat:

Zitat von mkinzler (Beitrag 1438797)
Es geht aber um MySQL!

Aus diesem Grund habe ich bei jeden meiner Beiträge MSSQL beigeschrieben und dennoch hat jemand nach Details gefragt. Evtl. gibt es ähnliche Funktionen auch im MYSQL.

taveuni 5. Aug 2019 10:59

AW: Autoincwert zurück bekommen
 
Zitat:

Zitat von generic (Beitrag 1438792)
Kein Problem hier eine Demo für der MSSQL! (nicht MYSQL):

Nun der Insert:
Code:
INSERT INTO [dbo].[Demo] ([Text])
output inserted.Id, inserted.Text
VALUES ('Hund'),
('Katze'),
('Maus')
GO
Liefert als Resultset:
Code:
1   Hund
2   Katze
3   Maus
Sprich, dass was ich einfüge dafür habe ich auch die exakten Keys. Also nicht das was vielleicht noch im Hintergrund abläuft durch Trigger oder parallel laufenden Prozessen.


Wow! Das kannte ich noch nicht. Ich hole immer mit @@Identity die ID mit einer separaten Query nach dem Insert. Aber wie kann das Resultset mit der Output Query geholt werden? Ist es Qry.FieldByName('Inserted.Id') oder so? Und wie ist die Performance verglichen mit einem "normalen" Insert?

Aviator 5. Aug 2019 11:25

AW: Autoincwert zurück bekommen
 
Zitat:

Zitat von taveuni (Beitrag 1439475)
Wow! Das kannte ich noch nicht. Ich hole immer mit @@Identity die ID mit einer separaten Query nach dem Insert. Aber wie kann das Resultset mit der Output Query geholt werden? Ist es Qry.FieldByName('Inserted.Id') oder so? Und wie ist die Performance verglichen mit einem "normalen" Insert?

Richtig. Oder eben das Pendant qry.Fields[i]. Zudem ist zu beachten, dass anstelle eines ExecSQL() ein Open() gemacht werden muss, da ein ExecSQL() keine Daten zurückliefert.

hhcm 5. Aug 2019 12:04

AW: Autoincwert zurück bekommen
 
Kennt MyDac

Delphi-Quellcode:
Query.LastInsertId
nicht?

Edit: Bei MyDAC ist es Query.InsertId .. LastInsertId ist von UniDac


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:14 Uhr.
Seite 2 von 2     12   

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