![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: Interbase
Automatische ID-Generierung... wie macht ihr das?
Hallo,
ich hab noch eine Grundsatzfrage an Euch: Es macht ja Sinn, dass jeder Record in jeder Datenbanktabelle eine fortlaufende, unique ID hat, anhand dessen man den Record eindeutig wiederfindet. Es würde meiner Ansicht nach auch Sinn machen, wenn diese IDs von der Datenbank selbst verwaltet werden und ich nicht von Delphi aus sicherstellen muss eine eindeutige ID zu finden. Ich habe per Google folgenden Tipp gefunden, bei dem ich einen Trigger definiere sobald jemand versucht einen neuen Record ohne ID anzulegen:
SQL-Code:
So, jetzt müsste ich von Delphi aus einen Record ohne diese ID schicken, damit er sie automatisch anlegt (gen_id ist übrigens ein Generator, der fortlaufende Nummern vergibt). Also z.B. irgendwie sowas
CREATE OR ALTER trigger stunden_bi for stunden
active before insert or update position 0 as begin if (new.kontaktid is null) then new.kontaktid = gen_id(gen_stunden_id,1); end
SQL-Code:
und weil ich ihm ja keine KONTAKTID gebe, sollte der Trigger anspringen und diese erzeugen...
insert into stunden (KUNDE, FAHRTZEIT) values (:KUNDE, :FAHRTZEIT)
Leider funktioniert das Ganz nicht. Er meckert immer dass ich gegen den UNIQUE OR PRIMARY KEY CONSTRAINT verstoße (weil ich versuche einen Record ohne diese ID anzulegen). Bin ich mit der Methode völlig auf dem Holzweg, oder wie macht ihr das? Vielen Dank Codex |
Re: Automatische ID-Generierung... wie macht ihr das?
Eigentlich müsste das mit dem Trigger funktionieren, allerdings würde ich den etwas abändern:
SQL-Code:
CREATE OR ALTER trigger stunden_bi for stunden
active before insert position 0 as begin new.kontaktid = gen_id(gen_stunden_id,1); end |
Re: Automatische ID-Generierung... wie macht ihr das?
Zitat:
Zitat:
Existiert noch ein anderes UNIQUE Feld? |
Re: Automatische ID-Generierung... wie macht ihr das?
Zitat:
den passenden Generator muss es natürlich auch geben ;-) EDIT: zu spät ;-) |
Re: Automatische ID-Generierung... wie macht ihr das?
Das sollte Firebird aber beim Kompilieren anmeckern, wenn es den Generator nicht gibt ;)
|
Re: Automatische ID-Generierung... wie macht ihr das?
Der Generator existiert und Firebird meckert auch nicht...
Es ist nur der Primary-Key und ein Foreign-Key definiert, letzterer bekommt aber immer einen sinnvollen Wert. Er meckert auch nur über die Verletzung des Primary-Keys. Das macht er übrigens auch wenn ich Delphi ganz umgehe und innerhalb von IB Expert einen neuen Record anlege bei dem ich einfach das PrimaryKey Feld leer lasse. EDIT: Oh ich Depp!! Was war das Problem?? Der Generator war aus irgendwelchen Gründen auf 0 gestanden und 0 gabs schon... :wall: Ist das eigentlich irgendwann ein Problem wenn man in der Datenbank munter hinzufügt und löscht und dann nach überall Lücken in den IDs sind. Rein theoretisch könnten dann ja irgendwann die IDs ausgehen, oder?? Grüße Codex |
Re: Automatische ID-Generierung... wie macht ihr das?
Zitat:
![]() |
Re: Automatische ID-Generierung... wie macht ihr das?
Zitat:
|
Re: Automatische ID-Generierung... wie macht ihr das?
Zitat:
|
Re: Automatische ID-Generierung... wie macht ihr das?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 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