AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Primarykey, wie vergeben

Primarykey, wie vergeben

Ein Thema von BenjaminH · begonnen am 16. Sep 2006 · letzter Beitrag vom 18. Sep 2006
 
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#16

Re: Primarykey, wie vergeben

  Alt 16. Sep 2006, 20:34
Einfach in IBExpert autoinc in der Columns view anklicken. Dort legt er für dich die Trigger an.

Ansonsten kann ich dir bei Firebird 2 nur empfehlen nicht auf alles zu hören, ws die alten FB-Hasen sagen.

Firebird 2 hat eine returning clause, das heißt du kannst dir direkt aus einem INSERT den neuen PrimaryKey holen, den ein Trigger besetzt hat.
Dadurch kannst du die Lücke schließen, die der Standard-Trigger aus IBExpert (also auch Hansas) offen lässt.
In diesem klassischen IB/FB-PK-Trigger wird nur dann der PK aus dem Generator geholt wenn kein Wert für den PK angegeben wurde.
IMHO ist das ziemlich fehleranfällig, da später eine Kollision entstehen kann.

Stell' dir vor, dein Generator steht auf 3. Bei einem INSERt wird jetzt aber eine 5 für den PK eingefügt.
Der blauäugige Trigger von oben wird den Wert in deine Tabelle lassen und alles scheint Friede-Freude-Eierkuchen.
Jetzt werden noch 2 Datensätze angelegt, bei denen kein Wert für den PK angegeben wurde.
  1. Generatorwert 3 + 1 -> 4 als PK in die Tabelle -> ok
  2. Generatorwert 4 + 1 -> 5 in die Tabelle -> kaboom!
    5 wurde vorhin schon eingefügt!

Oki, was machen?
Du lässt dir natürlich weiterhin den Trigger von IBExpert anlegen. (Man ist ja faul )
IBExpert lässt dich aber direkt den Code editeren und du löschst die Zeile mit dem "if :new.blabla is null then" einfach raus.

Ein INSERT sieht jetzt so aus:
SQL-Code:
INSERT INTO DeineTabelle
(
  SomeField
)
VALUES
(
  :SomeField
)
RETURNING ID INTO :ID
Solange der Trigger läuft kannst du dir nun sicher sein immer einen korrekten PK einzufügen und du bekommst in auch direkt bei einem INSERT zuück.

Zitat von BenjaminH:
Was bedeutet
Code:
SET TERM ^ ;
und wofür sind die ganzen ^
Du legst am Anfang eines Skriptes fest was der Statement seperator ist.
Jedesmal wenn dieser String auftaucht wird das Schnipselchen davor als einzelnes Statement abgesetzt.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  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 04:20 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