Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi IDENTITY beim Schreiben in DB ermitteln (https://www.delphipraxis.net/5584-identity-beim-schreiben-db-ermitteln.html)

lemmond1976 11. Jun 2003 23:14


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

Jelly 12. Jun 2003 00:11

Hallo,
direkt nach dem Einfügen eines Datensatzes ist der Wert des Identity Feldes über
Code:
select @@Identity as 'Identity' ;
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.

Gruss,
Tom

r_kerber 12. Jun 2003 07:50

Versuche es doch mal mit FeldName.CurValue.

lemmond1976 12. Jun 2003 10:37

hi, danke für die Vorschläge.
Wie würde denn eine solche Transaktion ungefähr aussehen ?

Jelly 12. Jun 2003 11:14

Zitat:

Zitat von lemmond1976
Wie würde denn eine solche Transaktion ungefähr aussehen ?

Du hast doch sicherlich eine TDatabase oä. Komponente um auf den MSSQL Server zuzugreifen...
Code:
db.Starttransaction ;
query.insert ;
query.fieldbyname ('bla').AsString := 'blablabla' ;
...
query.post ;
db.Commit ;
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.

Gruss,
Tom

Gast 12. Jun 2003 13:30

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)

Jelly 12. Jun 2003 13:38

Zitat:

Zitat von Paul Jr.
Ich verstehe hier nicht was sollte in diesem Zusammenhang die Transaktion bewirken...

Hallo Paul Jr.,
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

Gast 12. Jun 2003 13:52

Hallo Jelly 8) ,

alles klar!

Gruß

Paul Jr.

lemmond1976 12. Jun 2003 17:11

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:
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
CommandType und CommandText sind bekannt.
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