Hallo Interbasefans
Möchte eine komplexe Datenbankanwendung mit Interbase erstellen. Bei den ersten Versuchen stoße ich auf unerwartete Hindernisse die selbst in den Demos von Borland (csdemo.dpr und employee.gdb) auftreten:
Um die Konsistenz der Daten zu erhalten soll die Datenbank soweit als möglich die Kontrolle übernehmen (deshalb ja Interbase, dachte ich) also im Script die Tabellen erzeugt (geht hervorragend und einfach mit dem PowerDesigner AppModeller for Delphi) dann im nächsen Schritt Trigger erzeugt die selbsttätig ID-Felder, die primaryKeys sind, mit eindeutigen Werten füllen sollen
create generator gen_ID_Nr
set generator gen_id_Nr to 0 */Startwert für leere DB
create trigger tri_gen_ID_Nr for <Tabelle>
before insert as
begin
new.id = gen_id(gen_Id_Nr,1)
end
Werden nun mit ISQL Sätze eingefügt klappt alles wie erwartet:
ID wird automatisch hochgezählt und braucht in der INSERT Anweisung noch nicht mal berücksichtigt werden, also Testprg mit Interbase-Komponenten geschrieben. Soweit klappt alles hervorragend.
Nun die entscheidende Frage auf die hoffentlich jemand eine Antwort hat:
Der Versuch einen neuen Datensatz zB über ein Grid anzufügen scheitert mit der Fehlermeldung <Das Feld ID benötigt einen Wert>. Ist mir klar aber wie bringe ich Delphi bei das Füllen der Felder Interbase und seinen Triggern dies zu überlassen.
Hoffe auf Hilfe!
Möchte eine komplexe Datenbankanwendung mit Interbase erstellen. Bei den ersten Versuchen stoße ich auf unerwartete Hindernisse die selbst in den Demos von Borland (csdemo.dpr und employee.gdb) auftreten:
Um die Konsistenz der Daten zu erhalten soll die Datenbank soweit als möglich die Kontrolle übernehmen (deshalb ja Interbase, dachte ich) also im Script die Tabellen erzeugt (geht hervorragend und einfach mit dem PowerDesigner AppModeller for Delphi) dann im nächsen Schritt Trigger erzeugt die selbsttätig ID-Felder, die primaryKeys sind, mit eindeutigen Werten füllen sollen
create generator gen_ID_Nr
set generator gen_id_Nr to 0 */Startwert für leere DB
create trigger tri_gen_ID_Nr for <Tabelle>
before insert as
begin
new.id = gen_id(gen_Id_Nr,1)
end
Werden nun mit ISQL Sätze eingefügt klappt alles wie erwartet:
ID wird automatisch hochgezählt und braucht in der INSERT Anweisung noch nicht mal berücksichtigt werden, also Testprg mit Interbase-Komponenten geschrieben. Soweit klappt alles hervorragend.
Nun die entscheidende Frage auf die hoffentlich jemand eine Antwort hat:
Der Versuch einen neuen Datensatz zB über ein Grid anzufügen scheitert mit der Fehlermeldung <Das Feld ID benötigt einen Wert>. Ist mir klar aber wie bringe ich Delphi bei das Füllen der Felder Interbase und seinen Triggern dies zu überlassen.
Hoffe auf Hilfe!
Comment