![]() |
Interbase: Generierte ID ermitteln ?
Moin, moin in die Runde
Wie kann ich an eine mit einer Trigger/Generator angelegte ID herankommen. :?: Möchte nach einem Post den zuletzt bearbeiteen Datensatz noch ausgewählt haben und brauche dafür die generierte ID... Grüße // Martin |
Hallo MSchaefer 8)
ich werde Dir am Montag helfen... jetzt bin ich nur kurz hier... Gruß Paul Jr. P.S. Es seitdem jemand wird schneller als ich... :mrgreen: |
Trigger / Generator
Hallo Paul
bisher habe ich keine richtige Lösung gefunden. Eigenltich denke ich, das es vermutlich über eine Stored Procedure laufen müßte, aber da bisher kaum Erfahrung... Grüße // Martin |
Hallo Martin 8)
Deine Vermutung ist ein Volltreffer! :idea: So habe ich auch damals gemacht... ich muss nur etwas Suchen in meinem Durcheinander...(also gegen Nachmittag mache ich es... und ich hoffe das ich findig werde) Gruß Paul Jr. |
Hi mschaefer,
Wenn Du ID's für den Primary Key über einen Trigger in die Tabelle einträgst, hast Du immer das Problem, an diese Info ranzukommen. Dir bleibt nur der Weg für den eben eingetragenen Datensatz eine eindeutige Abfrage hinzubekommen, damit du die ID zurück bekommst. Dazu gibt es 2 Alternativen: 1. Verwende (falls Du die IBX verwendest) die Komponente TIBDataSet und dort die Eigenschaft "GeneratorField" Falls Du über SQL eine Massenübernahme von Daten machen musst, dann kannst DU den Generator auch in die SQL einfügen: INSERT INTO Tabelle VALUES (Gen_ID(Generatorname,1),Spalte1, SPalte2,..) 2. Hol Dir den Generator ID über ne SQL: Select Gen_ID(Generatorname,1) AS ID from rdb§database; die Tabelle rdb$Database existiert in jeder IB/FB DB und beinhaltet immer nur einen Datensatz. 3. Das ganze über SP machen, wobei das etwas Schreibarbeit bedeutet: CREATE PROCEDURE InsertDATA(Wert1 Typ1, Wert2 Typ2,...) AS BEGIN INSERT INTO Tabelle VALUES (Gen_ID(GeneratorName,1), Wert1, Wert2,...) END^ Grüße Lemmy |
Hallo Lemmy 8) ,
Dein zweiter Vorschlag mit der InterBase System Tabelle ist gut... aber nicht 100% sicher (bei Mehrbenutzer)... Dein dritter Lösungs-Vorschlag ist der Beste :lol: ... nun... diese Storage-Procedure sollte ein Rückgabewert haben... Da ich lange nichts mit InterBase gemacht habe könntest Du vielleicht diese mit einem Rückgabewert versehen...also mit dem neuem ID..., da wie ich denke hat Martin schon etwas eilig... :coder: Gruß Paul Jr. |
Ich meine so was in dem Sinne:
xID = Gen_ID(GeneratorName,1) // Rückgabewert... und erst dann INSET INTO usw... das weißt Du schon... :D Gruß Paul Jr. |
Zitat:
Zitat:
Grüße Lemmy |
Hallo Lemmy :D
ganz einfach... falls zwei User gleichzeitig einen neuen Datensatz anlegen (in der gleichen Tabelle)... dann steht in dem Generator nicht mehr dieses Wert die man braucht...(bei langsamen Zugriffen ist das schnell passiert)... :freak: Gruß Paul Jr. |
Zitat:
Natürlich sollte man niemals NACH dem Einfügen den Generatorstand abfragen und dann Rückschlüsse auf die vom Insert verwendete Generator-ID machen!!!! Hier noch die Insert Proc mit Rückgabewert:
Code:
Grüße
SET TERM ^ ;
CREATE PROCEDURE TestNeu1 (Wert1 VARCHAR(20)) RETURNS (NewID INTEGER) AS BEGIN FOR SELECT Gen_ID(Generatorname,1) from rdb$database into NewID do begin insert into Tabelle Values (:NewID, :Wert1); suspend; end END^ Lemmy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 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