Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Insert Befehl , Rückgabe ID Wert (https://www.delphipraxis.net/65753-insert-befehl-rueckgabe-id-wert.html)

renekr 20. Mär 2006 21:22

Datenbank: SQL Server • Version: 2005 STD • Zugriff über: ADO

Insert Befehl , Rückgabe ID Wert
 
Hi,
kann mir jemand sagen ob es möglich ist und zwar.:
Ich habe eine Tabelle mit Identity Spalte:
Wenn ich nun einen Insert mache bekomme ich dan niergendwie den ID wert zurück?
Odr wie kann i den Auslesen direkt nach dem Insert?

Danke.

Ralf Stehle 20. Mär 2006 21:28

Re: Insert Befehl , Rückgabe ID Wert
 
Sobald Du einen neuen Datensatz eingefügt hast, kannst Du einfach die ID auslesen. Ob das auch bereits vor dem Post-Befehl funktioniert, müsste ich ausprobieren, glaub es aber nicht

webcss 20. Mär 2006 21:31

Re: Insert Befehl , Rückgabe ID Wert
 
Am besten den Insert in einer SP kapseln, welche dann die ID zurück gibt.
SQL-Code:
...
Insert into kunden (Name, Vorname) Values (@Name, @Vorname)
select @KundenID = @@Identity
...

Hansa 20. Mär 2006 22:48

Re: Insert Befehl , Rückgabe ID Wert
 
SP ist schon mal gut, wichtig ist aber wo (oder von was ?) wird die ID überhaupt erzeugt ? Bei mir läufts so (allerdings IB/FB) : BI-Trigger für ID. Das Insert wird allerdings innerhalb der SP organisiert. Das hat den Vorteil, daß der vom Trigger erzeugte ID-Wert (und anderes) von der SP direkt als Rückgabe-Parameter dem eigenen Programm zur Verfügung steht, weil der Trigger eben innerhalb der SP ausgelöst wird. Das läuft also innerhalb der DB ab und hat mit Post usw. zumindest direkt nichts zu tun !

webcss 21. Mär 2006 06:28

Re: Insert Befehl , Rückgabe ID Wert
 
Kann ich leider auch nicht genau sagen, da ich mich mit MSSQL Server nicht auskenne und ebenfalls nur mit Firebird arbeite. Da habe ich für solche IDs einen Generator, der im BI-Trigger Position 0 einer Tabelle einen ID-Wert generiert, sofern die ID = NUL ist.
so habe ich die möglichkeit, etwa in einer Insert-SP den ID-Wert selbst zu generieren, durch Aufruf des Generators für die betreffende Tabelle.

Jelly 21. Mär 2006 07:08

Re: Insert Befehl , Rückgabe ID Wert
 
In MSSQL kannst Du ganz bequem die letzte ID abfragen, nachdem du deinen Datensatz eingefügt hast:
SQL-Code:
SELECT @@IDENTITY AS InsertID
Du musst nur darauf achten, dass das alles innerhalb einer Transaktion abläuft.

alzaimar 21. Mär 2006 07:30

Re: Insert Befehl , Rückgabe ID Wert
 
ADO macht das aber ganz automatisch mit der TTable-Komponente (vorher die persistenten Felder deklarieren). Wenn ich da einen Datensatz einfüge, bekommt das Identityfeld nach dem Post sofort den Wert zugewiesen. Alles vollautomatisch.

marabu 21. Mär 2006 07:35

Re: Insert Befehl , Rückgabe ID Wert
 
Hi folks,

seid ihr sicher mit der Transaktion?

Zitat:

@@IDENTITY und SCOPE_IDENTITY geben den letzten Identitätswert zurück, der in einer Tabelle in der aktuellen Sitzung generiert wurde.
Freundliche Grüße vom marabu

mbamler 21. Mär 2006 08:17

Re: Insert Befehl , Rückgabe ID Wert
 
Zitat:

Zitat von marabu
Hi folks,

seid ihr sicher mit der Transaktion?

Zitat:

@@IDENTITY und SCOPE_IDENTITY geben den letzten Identitätswert zurück, der in einer Tabelle in der aktuellen Sitzung generiert wurde.
Freundliche Grüße vom marabu

Leider funktioniert das auch nicht, wenn durch den vorherigen Insert-Befehl Trigger ausgelöst werden ... :(

Gruß
Matthias

marabu 21. Mär 2006 08:43

Re: Insert Befehl , Rückgabe ID Wert
 
Hallo Matthias,

wie meinst du das?

Zitat:

Wenn die Anweisung einen oder mehrere Trigger auslöst, die Einfügevorgänge zum Generieren von Identitätswerten durchführen, wird durch das Aufrufen von @@IDENTITY sofort nach der Anweisung der letzte von den Triggern generierte Identitätswert zurückgegeben.
marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:08 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