![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: dBExpress
Firebird gen_id()
Gibt es eine Möglichkeit auf eine generierte ID nach dem Insert zuzugreifen ?
Der Select auf den Generator(tabelle) selber ist keine Lösung, da bei Multiusing die Gefahr besteht, dass ich die ID von einem anderen Insert bekomme. Bei Informix gibt es die Moeglichkeit den SQLCA Record auszulesen, mit einem Staus der letzten DB-Aktion sozusagen. Dort finde ich auch den Wert der serial Feldes. Bei MS-SQL gibt es die Methode "SELECT @@IDENTITY" was auch super funktioniert. Nur bei Firebird sehe ich derzeit keine andere Möglichkeit als mir einen neue ID vor dem INSERT zu reservieren. Ich hoffe es kann mir jemand helfen ... mfg CoLT |
Re: Firebird gen_id()
Da war doch irgendwas in der Art
SQL-Code:
wenn ich mich täusche. :gruebel:
select gen_id (GeneratorName)
|
Re: Firebird gen_id()
das geht nicht wenn 2 inserts gleichzeitig passieren ...(multiusing)
|
Re: Firebird gen_id()
Zitat:
Gen_id liefert (soweit ich weis) immer den nächsten Generatorwert unabhängig von einer Transaktion zurück. |
Re: Firebird gen_id()
Zitat:
|
Re: Firebird gen_id()
Ich würde das dann eher andersrum machen, sonst kann wirklich ein Problem mit "gleichzeitigen Inserts entstehen.
Also zuerst SELECT GEN_ID(MY_GENERATOR, 1) und dann im INSERT INTO den soeben ermittelten Generatorwert als PK mit reinschreiben. |
Re: Firebird gen_id()
Herzlich willkommen in der Delphi-PRAXiS, CoLT.
Auch in FireBird kannst du - innerhalb einer Transaktion - den Generatorwert nach der Zuweisung im INSERT auslesen. Mehr dazu hier: ![]() Grüße vom marabu |
Re: Firebird gen_id()
@marabu: Das verhindert aber nicht, dass jemand den Generatorwert inzwischen durhc nen anderen Insert verändert hat!
Die Lösung von dfried ist korrekt. Alternativ könntest Du das ganze dann noch in ne StordeProcedure verlegen (also den Insert) und die Prozedur den Wert zurückgeben lassen.... Grüße Lemmy |
Re: Firebird gen_id()
Zitat:
Wie Marabu verlinkt hat, lies Dir mal was in Sachen Transaktionen auf DB Server durch. |
Re: Firebird gen_id()
Zitat:
Zitat:
Aber wie gesagt, lässt sich nicht für alle "DB-Server" pauschalieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 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