AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Firebird gen_id()

Ein Thema von CoLT · begonnen am 10. Nov 2005 · letzter Beitrag vom 10. Nov 2005
Antwort Antwort
Seite 2 von 2     12
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#11

Re: Firebird gen_id()

  Alt 10. Nov 2005, 12:34
Zitat von Jelly:
Wie Marabu verlinkt hat, lies Dir mal was in Sachen Transaktionen auf DB Server durch.
???

wenn ich

Select gen_id(generator1,1) AS ID from rdb$database); und dann das ERGEBNIS DIESER ABFRAGE einer Insert-SQL zuweise

INSERT INTO Test VALUS (:ID, :NAME); da kann nichts schief laufen! Außer dass jemand einen Trigger für die ID-Ermittlung nicht korrekt erzeugt und dieser beim Insert nochmals eine ID anfordert!

Grüße
Lemmy
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#12

Re: Firebird gen_id()

  Alt 10. Nov 2005, 12:38
Tja, viele Wege führen nach Rom
Besser gesagt, beide Vorschläge würden ohen Probleme auch in Multiuserumgebungen funktionieren!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: Firebird gen_id()

  Alt 10. Nov 2005, 12:42
Hallo Lemmy,

ich habe den Eindruck, dass CoLT ein technisches Interesse an der Frage hat, ob auch unter FireBird der Zugriff auf den Generator im nachhinein möglich ist. Ich habe meinen Beitrag zu einer solchen Überlegung bereits in dem verlinkten thread gemacht, aber hier gerne noch einmal mit anderen Worten: Der Generator wird von FireBird nicht relational verwaltet, er kann deshalb auch nicht von einem RollBack erfasst werden - das darf auch gar nicht sein. Niemand kann den Generator zwischen meinem INSERT und dem darauf folgenden Auslesen verändern, solange diese Zugriffskombination durch eine Transaktion serialisiert wird. Durch die Verwendung des Inkrements 0 beim Auslesen kann ich den Generator-Wert vor oder nach dem INSERT bestimmen, wenn ich ihn in meiner Anwendung benötige. Die Vergabe im INSERT selbst überlässt man üblicherweise einem Trigger - siehe Jelly's Beitrag.

Grüße vom marabu

PS: Ich schreibe zu langsam - bereits drei Beiträge haben mich jetzt überholt. Ist aber auch ein schwieriges Thema.

@dfried: Ich glaube nicht, dass dir Tom Nachhilfe verordnen wollte. Es geht hier wohl eher um die spezielle Implementierung der Generatoren unter Interbase bzw. FireBird.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#14

Re: Firebird gen_id()

  Alt 10. Nov 2005, 12:51
Zitat von marabu:
HDurch die Verwendung des Inkrements 0 beim Auslesen kann ich den Generator-Wert vor oder nach dem INSERT bestimmen, wenn ich ihn in meiner Anwendung benötige. Die Vergabe im INSERT selbst überlässt man üblicherweise einem Trigger - siehe Jelly's Beitrag.
aber es ist nicht sicher gestellt, dass der zurückgegebene Wert mit der Insert-ID übereinstimmt, eben weil Generatoren nicht transaktionsgesteuert sind.
Aus diesem Grund muss man das Zeugs also entweder in eine StoredProc packen oder den Generator-ID auslesen und dann beim Insert manuell setzen - wenn man die ID im Programm benötigt!

Grüße
Lemmy
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: Firebird gen_id()

  Alt 10. Nov 2005, 12:59
Lemmy, bist jetzt einen ziemlich großen Bogen gelaufen - lies nochmal meinen Beitrag von 13:03.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
CoLT

Registriert seit: 10. Nov 2005
Ort: Remscheid
9 Beiträge
 
Delphi 10.1 Berlin Professional
 
#16

Re: Firebird gen_id()

  Alt 10. Nov 2005, 13:16
ein select auf den generator nach dem insert ob transaction oder nicht schlägt fehl... da jeder insert den erhöht ...

ich habs getestet!

so wie es aussieht komme ich nicht drum herum mir die id vorher zu reserveren für meinen insert.

*heul*
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#17

Re: Firebird gen_id()

  Alt 10. Nov 2005, 13:36
Genau das haben, glaube ich, fast alle in diesem Thread auch gesagt....

@marabu:

Zitat:
Auch in FireBird kannst du - innerhalb einer Transaktion - den Generatorwert nach der Zuweisung im INSERT auslesen
etwas verwirrend der Satz, meinst Du nciht Vorallem wenn du dann auf das hier linkst:

SELECT GEN_ID(DeinGeneratorName, 0) FROM RDB$DATABASE vorallem weil Du über diese Anweisung nie die ID auslesen kannst, die ein eben ausgeführter Insert erhalten hat.

Grüße
Lemmy
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#18

Re: Firebird gen_id()

  Alt 10. Nov 2005, 13:41
Zitat von marabu:
@dfried: Ich glaube nicht, dass dir Tom Nachhilfe verordnen wollte. Es geht hier wohl eher um die spezielle Implementierung der Generatoren unter Interbase bzw. FireBird.
Hab ich auch nicht so verstanden, habs ja auch mit nem Smiley kommentiert.
Ausserdem lern ich immer gerne noch was auch über andere DB's dazu, ORACLE kenn ich halt ziemlich gut, aber aktuell mach ich auch ein Projekt mit FB/IB, von daher ist das ganze schon nützlich.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#19

Re: Firebird gen_id()

  Alt 10. Nov 2005, 13:41
Hallo CoLT,

weine nicht...

Die meisten arbeiten so, wie wir alle es zusammen hier erarbeitet haben. Dass das INSERT den Generator erhöht ist richtig, kannst du aber beim Zugriff "danach" leicht korrigieren.

@Lemmy: ich vergesse oft auf vermeintliche Banalitäten hinzuweisen, aber das müsst ihr mir alle verzeihen - wegen meines biblischen Alters...

marabu
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#20

Re: Firebird gen_id()

  Alt 10. Nov 2005, 13:45
Zitat von marabu:
@Lemmy: ich vergesse oft auf vermeintliche Banalitäten hinzuweisen, aber das müsst ihr mir alle verzeihen - wegen meines biblischen Alters...
Ausreden zählen nicht
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 Uhr.
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