![]() |
SQL INSERT mit ID Rückgabe
Hallo kann mir jemand einen einfachen Weg
nennen wie ich ein Insert absetzen kann und die ID(autoinc) des neuen Datensatzes erfahre. Bis her benötige ich dafür: 1.Ein INSERT mit einer ungewöhnlichen seltenen Zahl in einem Feld. 2.Ein SELECT um diese Zahl zu finden (und die id zu ermitteln) und 3. ein UPDATE um die restlichen Werte Where ID einzufügen. Leider ist das etwas unsicher und auch sehr improvisert, wie geht es richtig? |
Re: SQL INSERT mit ID Rückgabe
Willkommen in der Gemeinde :-)
@Thema: welche Datenbank, welche Tabellen? |
Re: SQL INSERT mit ID Rückgabe
Hallo,
normalerweise musst du dich gar nicht um die ID kümmern wenn Du einen INSERT durchführen möchtest. Deine Reihenfolge insert - select - update müsste mit einem insert realisierbar sein Anders ist es, wenn ein Datensatz bereits existiert, dann ermittle ID - insert ... where FeldID = ID |
Re: SQL INSERT mit ID Rückgabe
Also, zu frage welche Datenbank:
Ich muss Code Für oracle,mssql,dbisam,paradox datenbanken schreiben. Das alles muss auch mit globalen Daten funktionieren. Zu, id sei nicht notwendig bei einem insert: Ich Arbeite auf einem selbst gebauten nachfahren von TStringGrid (Die Sourcen von Delphi datenbank-componenten ändern sich immer so schnell). Beim daten einlesen wird die Herkunft der Daten jeder Zelle hinterlegt (Tabelle, idfeld, idwert) so das ich nicht immer alle Felder Anzeigen muss und leicht einzelne Datensätze ändern und löschen kann. Füge ich nun etwas ein dann steht es zwar da und ist gespeichert nur kann ich es nicht ändern oder löschen weil die ID fehlt. :wall: Weis jemand Rat? |
Re: SQL INSERT mit ID Rückgabe
in Oracle klappt das:
Delphi-Quellcode:
Query1.SQL.Text :=
'BEGIN' + #10 + ' INSERT INTO Tabelle' + #10 + ' (Field1, Field2, ...)' + #10 + ' VALUES' + #10 + ' (1, ''Hallo'', ...)' + #10 + ' RETURNING ID' + #10 + ' INTO :oID;' + #10 'END;'; ":oID" muss als output parameter definiert werden und enthält die neue ID. edit: unkonzentriert :wall: |
Re: SQL INSERT mit ID Rückgabe
Also im Einzelplatzbetrieb könnte ein Insert mit anschließendem Select:
select max(id) from Tabelle funktionieren - ist im Mehrplatzbetrieb aber nicht sicher. Dort könntest Du das nur mit Triggern hinbekommen. |
Re: SQL INSERT mit ID Rückgabe
@QuickAndDirty
Zitat:
aber ist das dann nicht Zitat:
Zitat:
Zitat:
da kannst Du dann jederzeit darauf zugreifen ... RechteMausTaste auf TTable, TADODateSet und dann alle Felder hinzufügen Zitat:
sondern nur in Deiner Form, weil das StringGrid diese Info nicht hält |
Re: SQL INSERT mit ID Rückgabe
Bei Oracle kannst du dir auch erst eine ID holen und diese dann eintragen. Die ID ist wenn du sie dir holst eindeutig!
Delphi-Quellcode:
und das Ergebnis dann für in deinem Insert einsetzen
'Select SEQUENCENAME.NEXTVAL from DUAL'
Gruß Wegalt |
Re: SQL INSERT mit ID Rückgabe
Hi,
ich habs. Also das Problem ist für alle Server gelöst: Mann kann beim Insert die ID mit übergeben. wenn die schon belegt ist dann gibts ne Exception und ich incremtiere die ID und versuchs noch einmal. Damit man nicht ganz unten anfangen muss holt man sich mit SELECT max(id) FROM bla einen möglichst hohen Wert und incrementiert ihn zur Wunsch ID. Da im Netz ein andere Benutzer dazwischen kommen könten und ich Exception nicht so mag führe ich jetzt so ne Art Journal mit den Letzen Inserts und IDs für alle Tabellen und User. Vielen dank für die Tipps mfg QuickAndDirty |
Re: SQL INSERT mit ID Rückgabe
Bei MS-SQL-Server mußt Du vorher:
SQL-Code:
setzen - sonst meckert er beim Versuch, einen Wert in eine Identityspalte einzufügen...
SET IDENTITY_INSERT [ database. [ owner. ] ] { table } { ON | OFF }
Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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