AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Autoincwert zurück bekommen

Autoincwert zurück bekommen

Ein Thema von mcinternet · begonnen am 31. Jul 2019 · letzter Beitrag vom 5. Aug 2019
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.753 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Autoincwert zurück bekommen

  Alt 1. Aug 2019, 12:04
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#12

AW: Autoincwert zurück bekommen

  Alt 1. Aug 2019, 12:25
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Autoincwert zurück bekommen

  Alt 1. Aug 2019, 12:29
Es geht aber um MySQL!
Markus Kinzler
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#14

AW: Autoincwert zurück bekommen

  Alt 5. Aug 2019, 09:16
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.
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Autoincwert zurück bekommen

  Alt 5. Aug 2019, 11:59
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?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: Autoincwert zurück bekommen

  Alt 5. Aug 2019, 12:25
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.
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
309 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Autoincwert zurück bekommen

  Alt 5. Aug 2019, 13:04
Kennt MyDac

Query.LastInsertId nicht?

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

Geändert von hhcm ( 5. Aug 2019 um 13:07 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:55 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