Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird 2.x und Autoincrement (https://www.delphipraxis.net/102898-firebird-2-x-und-autoincrement.html)

webcss 6. Nov 2007 17:54

Datenbank: Firebird • Version: 2.0.3 • Zugriff über: uib native + OO-Layer

Firebird 2.x und Autoincrement
 
Hallo DP'ler,

nur mal so:
Seit Firebird version 2.0 existiert ja eine alternative Syntax für Autoincrement-Werte,

also statt
SQL-Code:
select Gen_ID(GEN_Feld_ID,1) from RDB$Database
geht jetzt auch
SQL-Code:
select next value for Gen_FELD_ID
wobei Gen_Feld_ID natürlich der Generator-Bezeichner ist.

Ist es eine gute Praxis, anstelle wie bisher den Generator in einem Before-Insert trigger abzufragen,
den wert mittels der neuen syntax als default-Wert im Feld der jeweiligen tabelle selbst zu definieren?

Würde auf den ersten Blick zumindest so manchen Trigger sparen, oder?

Meinungen wie immer willkommen... :-D

DeddyH 6. Nov 2007 18:02

Re: Firebird 2.x und Autoincrement
 
Lies Dir mal diesen Thread durch.

mschaefer 6. Nov 2007 18:05

Re: Firebird 2.x und Autoincrement
 
Moin, Spätmoin,

Zunächst würde ich das nur als Klärung des Syntax sehen um die interne Tabelle endlich zu vermeiden. Neige dazu den Wert wie bisher vorher zu holen und im Feld des Datasets zu halten bis der Record geschrieben wird. Dann hat jede Clientanwendung automatisch einen eindeutigen Schlüssel. Damit ergibt sich übrigens ein relativ ähnlicher Syntax zu den PostGreeSQL Sequences.

Grüße // Martin

mkinzler 6. Nov 2007 18:08

Re: Firebird 2.x und Autoincrement
 
Der große Vorteil von FB >=2 ist das RETURNING

DeddyH 6. Nov 2007 18:12

Re: Firebird 2.x und Autoincrement
 
Deshalb hatte ich auch direkt auf #5 gelinkt ;)

mkinzler 6. Nov 2007 18:17

Re: Firebird 2.x und Autoincrement
 
Zitat:

Zunächst würde ich das nur als Klärung des Syntax sehen um die interne Tabelle endlich zu vermeiden.
Wurde wegen Aufnahme von Sequenzen in SQL-Standard eingeführt. Was meinst du mit interner Tabelle?
Zitat:

Neige dazu den Wert wie bisher vorher zu holen und im Feld des Datasets zu halten bis der Record geschrieben wird.
Kommt darauf an. wenn man den Wert vorher holt und dann die Daten verwirft, können Lücken entsehen.

webcss 6. Nov 2007 18:25

Re: Firebird 2.x und Autoincrement
 
hilft mir alles bisher nur wenig weiter :gruebel:

bei mir ist halt so das ich alle user eingaben erstmal in internen objekten halte und dann, bei positiver übernahme, in einem rutsch in die DB schreibe und mit returning den ID-wert zurückhole.
ID wird bei mir nur intern verwendet um PK/FK Konsistenzen zur gewähren, da fummelt kein user rum :lol:

Also nochmal, ist's sinnvoll denn wert als default direkt in der tabelle/feld zu definieren oder doch lieber wie bisher im trigger?

mkinzler 6. Nov 2007 18:28

Re: Firebird 2.x und Autoincrement
 
Je nach Trigger kommt das ja auf das Gleiche raus.

webcss 6. Nov 2007 18:31

Re: Firebird 2.x und Autoincrement
 
Zitat:

Zitat von mkinzler
Je nach Trigger kommt das ja auf das Gleiche raus.

sicher, aber wenn ich nur einen triger für eine tabelle xxx habe und den nur um eine sequenz zu erzeugen, könnte ich mir den auch noch sparen wenn ich die generierung als default wert setzte, das meine ich.

mkinzler 6. Nov 2007 18:34

Re: Firebird 2.x und Autoincrement
 
Ja und nein. mit einem trigger könntest du sicherstellen, dass die ID immer mit dem Generator erzeugt wird, währrend der DEFAULT-Wert nur bei fehlendem PK zur Anwendung kommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz