![]() |
IDENTITY beim Schreiben in DB ermitteln
Hallo,
an mein Delphi-Programm ist ein MS SQL Server gekoppelt. Auf den Server greifen MEHRERE USER zu. Meine Tabelle hat eine Spalte mit Autowert (IDENTITY), der automatisch datenbankmäßig erhöht wird, wenn ein neuer Datensatz hinzugefügt wird. Ich brauche unbedingt den aktuellen Wert der Spalte mit dem IDENTITY-Wert, SOFORT nachdem der Datensatz hinzugefügt wurde. Kann mir jemand helfen ? Wäre echt prima ! :-) Gruss Gunnar |
Hallo,
direkt nach dem Einfügen eines Datensatzes ist der Wert des Identity Feldes über
Code:
auszulesen. Ich bin mir aber nicht sicher, ob die beiden Befehle, also dein Insert und das anschliessende Select, in einer Transaction ablaufen müssen. Sollte getestet werden.
select @@Identity as 'Identity' ;
Gruss, Tom |
Versuche es doch mal mit FeldName.CurValue.
|
hi, danke für die Vorschläge.
Wie würde denn eine solche Transaktion ungefähr aussehen ? |
Zitat:
Code:
Mit db.Rollback machst du übrigens eine Art Undo in deiner Datenbank. Alles was nach Starttransaction passiert, wird erst mit einem Commit in die Datenbank geschrieben, rsp. mit einem Rollback zurückgestellt.
db.Starttransaction ;
query.insert ; query.fieldbyname ('bla').AsString := 'blablabla' ; ... query.post ; db.Commit ; Gruss, Tom |
Hallo Jungs :D ,
so was wird z.B. per INSERT INTO ... via STORAGE Prozedur erledigt… Ich verstehe hier nicht was sollte in diesem Zusammenhang die Transaktion bewirken...in einem Mehrbenutzer – System... :shock: Gruß Paul Jr. 8) |
Zitat:
war mir dem nicht sicher wie der Server das unterscheidet. Habs grad ausprobiert, und eine eigene Transaction ist nicht nötig, oder besser ausgedrückt, der Insert Befehl und der darauf folgende "Select @@Identity" müssen nicht in einer Transaction laufen. Aber da nochmals extra nachgefragt wurde, wie das mit den Transactions in Delphi läuft, hab ich versucht dies kurz zu erläutern. Gruß, Tom |
Hallo Jelly 8) ,
alles klar! Gruß Paul Jr. |
Danke an alle für die Antworten.
Ich kenne mich überhaupt nicht mit Stored Procedures aus, deswegen habe ich mal was zusammengebaut, das mir die passende BildID (Autowert-Feld) sofort nach dem Einfügen des Datensatzes zurückliefern soll. Falls Fehler drin sind, bitte ich um Mitteilung. Hier erst mal der Code der SP:
Code:
CommandType und CommandText sind bekannt.
Create procedure sp_getBildID
{ @BildID int @Feld2 ??? @Feld3 ??? @Feld4 ??? } AS BEGIN Insert into mytable (Feld2,Feld3,Feld4) VALUES (@Feld2,@Feld3,@Feld4) Select @BildID = @@IDENTITY END Und wie kann ich jetzt auf den Autowert (BildID) zugreifen ? Danke ! Gunnar |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 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 by Thomas Breitkreuz