![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: fibplus
Datensatz ID herausfinden
Hi@all!
Ich, als Datenbankneuling, muss leider nochmals eure Hilfe in Anspruch nehmen. Ich habe in einer Datenbank eine Tabelle angelegt, welche einen Primary Key (B_ID) hat, der automatisch beim Anlegen eines neuen Datensatzes inkrementiert wird. Das Abspeichern der Daten in der Datenbank erfolgt problemlos und B_ID wird von Firebird auch hochgezählt. Aber wie kann ich nach dem abspreichern der Daten herausfinden, welche B_ID mein neuer Datensatz bekommen hat? Der Befehl DataSetB_ID.AsInteger liefert mir immer 0 zurück. Jemand eine Ahnung, oder soll ich was Code anhängen? Vielen Dank, euer Michael |
Re: Datensatz ID herausfinden
Du musst entweder die ID nochmals via SELECT laden oder du schaust in der Dokumentation nach, ob es dort, wie in Oracle einen Returning-Befehl gibt.
Edit: Scheinbar gibt es diesen: ![]() |
Re: Datensatz ID herausfinden
Hallo,
schau dir mal das entsprechende FIBPlus-Beispiel unter examples\src\FB20InsertReturning Heiko |
Re: Datensatz ID herausfinden
Warum nicht einfach nach dem Abspeicheren das Feld "B_ID" abfragen?
Delphi-Quellcode:
ShowMessage(IntToStr(tTable.FieldByName('B_ID').AsInteger));
|
Re: Datensatz ID herausfinden
Hallo,
#RSF# nein, die Id wird auf dem Server beim Imsert erzeugt und normalerweise nicht zurückgegeben. Unter Paradox klappte das allerdings wirklich so, aber unter einem SQL-Server normalerweise nicht. Für Firebird (>=2) gibt es die returning Klausel, siehe #3 Heiko |
Re: Datensatz ID herausfinden
Hallo,
ich mache das Insert über eine StoredProcedure und lasse mir von dieser die ID zurückgeben. |
Re: Datensatz ID herausfinden
Okaydokay, danke für die Antworten. Werd mal schauen, wie das mit den StoredProcedures bzw. mit dem Returning geht...
|
Re: Datensatz ID herausfinden
Vielleicht ist
![]() |
Re: Datensatz ID herausfinden
Hey, DeddyH, danke!
Wenn ich jetzt in meinem DataSet die SQLs so ändere, dass da steht:
SQL-Code:
Wo kann ich dann unter fibplus auf den Returning-Wert zugreifen? Oder denke ich immer noch falsch?
INSERT INTO Produkte
(ProductID ,Bezeichnung) VALUES (:ProductID ,:Bezeichnung) RETURNING Id |
Re: Datensatz ID herausfinden
Ist
Delphi-Quellcode:
<DataSet>.Params[2]
|
Re: Datensatz ID herausfinden
[edit]
Okay klar, verstanden. Allerdings wird der Parameter nicht von Firebird übergeben (mein ParamCount ist Null), jemand eine Idee, warum??? [/edit] |
Re: Datensatz ID herausfinden
Hallo,
warum siehst du nicht einfach in dem mitgelieferten Bsp nach ? examples\src\FB20InsertReturning Heiko |
Re: Datensatz ID herausfinden
Zitat:
SELECT @@IDENTITY FELDNAME gibt die ID zurück. |
Re: Datensatz ID herausfinden
Hallo,
ja FB macht das über das returning. Das S in SQL heisst halt leider nicht Standard. Heiko |
Re: Datensatz ID herausfinden
Zitat:
|
Re: Datensatz ID herausfinden
Hallo,
schön gesagt. ;) Heiko |
Re: Datensatz ID herausfinden
Ich hab nu ein Query mit folgendem Code im SQLs Feld:
SQL-Code:
INSERT INTO USER(
VORNAME, NACHNAME, ALIAS, PASSWORT ) VALUES( :VORNAME, :NACHNAME, :ALIAS, :PASSWORT ) RETURNING USER_ID und führe in Delphi folgendes aus:
Delphi-Quellcode:
Wenn ich mir Query1.ParamNames(i) für alle i< ParamCount ausgeben lasse kommt raus:
Query1.Close;
Query1.ParamByName('ALIAS').AsString:=edit1.Text; Query1.ParamByName('PASSWORT').AsString:=edit2.Text; Query1.Prepare; Query1.ExecQuery; Transaction.CommitRetaining; VORNAME NACHNAME ALIAS PASSWORT Eine USER_ID ist aber nicht vorhanden?! |
Re: Datensatz ID herausfinden
Welche Version der Komponente setzt du ein? Es scheint das diese Version das returning nicht kennt.
Btw heisst der Parameter auch anders Ret_xxx o.ä, deshalb besser über den Index gehen |
Re: Datensatz ID herausfinden
Zitat:
Wenn der Parameter anders heißt, müsste es doch ne Fehlermeldung von der Datenbank geben, oder? //edit ich seh gerade, dass der Interpretor hier im Forum das Wort "USER" in der SQL sprache blau hinterlegt. Also in Wirklichkeit heißt die Datenbank nicht USER sondern BENUTZER. |
Re: Datensatz ID herausfinden
Hallo,
gerade wollte ich wieder meckern, dass du das Returning-Bsp nicht ansiehst. Das ist wohl aber nur noch ne "Beta". Die Returning ist ja kein Parameter, probier mal FieldByName / Fields. Heiko |
Re: Datensatz ID herausfinden
:) Jup, das "FieldsbyName" war der Knackpunkt. Dankeschön!
Wünsche allen ein super verschneites WE...das richtige Wetter, um gemütlich zu programmieren ;) |
Re: Datensatz ID herausfinden
Hallo,
ja schade, dass das Bsp. bei FIBPlus nicht sehr aussagefähig ist. Zitat:
*schmerzende Beine massier* Heiko |
Re: Datensatz ID herausfinden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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