![]() |
Datenbank: Firebird • Version: 2.0 • Zugriff über: ZEOS Lib
AutoInc bei Primärschlüsseln beim Einfügen eines Datensatzes
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe ein Problem beim Erstellen eines Primärschlüsselfeldes, das eine Auto-Increment-Funktion besitzen soll, d.h. beim Einfügen eines Datensatze soll (ähnlich wie in ÄÄÄÄcess) ein neuer Primärschlüsselwert generiert werden. Bei meiner Firebird DB habe ich ja die Möglichkeit einen Generator (der mir die Werte generiert???) zu erstellen, aber das klappt nicht, er gibt mir folgende Fehlermeldung: Siehe Anhang. Könnt ihr mir helfen?? Danke Euch! |
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
Laut deinem Anhang scheint es diesen Generator schon zu geben.
Zumindest kommt bei mir die Fehlermeldung, wenn ich zwei Generatoren mit gleichem Namen erstellen will. Edit: Und nicht vergessen einen Trigger zu setzen, damit du wirklich ein Auto-Inc-Verhalten bekommst. War zumindest bei mir der erste Stolperstein :zwinker: Gruß Dirk |
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
Zitat:
|
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
Stimmt,
ohne die Sequence geht das mit dem AutoInc auch nicht über die Zeos-Kompos. Er hat dann bei mir auf jeden Fall immer gemotzt, dass das Feld einen Wert haben muss. Wusste nur nicht, dass das auch ohne Trigger geht. |
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
Hallo,
d.h. wie oder wo finde ich den TSequenz? |
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
TSequenz hat bei FB <2 den Vorteil, daß man leichter an den eingefügten PK-Wert kommt. Bei FB2 kann man sich den ja Zurückgeben lassen.
der Trigger funktioniert ja unabhängig vom Programm/verwendeten Komponenten. |
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
TZSequence bei den Zeos-Kompos
|
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
Gut,
dem Objekt vom Typ TSequence gebe ich die Connection mit, aber irgendwie ändert sich nix bei mir, will eigentlich, dass ich einen Datensatz (ohne selber einen Primary Key vorzugeben) einfüge Beispiel:
SQL-Code:
Wobei tblMandanten.MandantenID der Primärschlüssel ist
INSERT INTO tblMandanten
(tblMandanten.ANREDE, tblMandanten.VORNAME, tblMandanten.NAME, tblMandanten.FIRMA, tblMandanten.GEBTAG) VALUES (:ANREDE, :VORNAME, :NAME, :FIRMA, :GEBTAG) |
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
Ok, Augen auf im Bitverkehr :-)
Habe vergessen den SequenceName auf den Generator zu setzten, klappt aber trotzdem noch nicht :| |
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
Hast du den Query mit der Sequenz verbunden?
|
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
@mkinzler,
hi habe jetzt die Query mit der Sequence verbunden und das Sequenced Field ausgewählt (mein PK) jetzt klappt es :-) Danke euch! |
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
Führe mal eine Query mit dem SQL aus, indem du Open, anstatt ExecSQL benutzt:
SQL-Code:
Du solltest nun eine Zile in der Ergebnismenge mit einer Spalte haben.
INSERT INTO tblMandanten
(ANREDE, VORNAME, NAME, FIRMA, GEBTAG) VALUES (:ANREDE, :VORNAME, :NAME, :FIRMA, :GEBTAG) RETURNING ID Das ist die ID, die der Trigger generiert hat. Keine Ahnung, warum sich hier einige mit so masochistischem, manuellem Generatorgefriemeln selbst foltern... :gruebel: btw: Habe Firebird nur einmal kurz zusammen mit Delphi benutzt, und das ist 5.000 Jahre her. Kann also sein, dass du andere Methoden benutzten musst. Aber eigentlich gibt dir ein INSERT mit einer returning clause eine Ergebnismenge zurück. ;) |
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
Ab FB2 geht natürlich dfas Returning habe ich aber schon in #6 erwähnt
|
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
@mkinzler:
Wie geht das mit dem Returning? Habe da bisher noch nichts drüber gelesen? Thx Gruß DelphiManiac |
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
Zitat:
|
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
@Elvis:
Hoffe wir reden nicht aneinander vorbei. Mein Ansinnen war es einen Datensatz einzufügen, ohne eine Primärschlüsselwert mitzugeben, denn sollte sich die DBMS selber stricken. Deine Methode gibt mir doch den Primärschlüsselwert nach Einfügen des Datensatzes zurück oder? Aber da meckert ja Firebird schon vorher, da ich ja kein Primärschlüsselwert im
SQL-Code:
mitgebe, oder?
INSERT INTO
Gruß und Danke DelphiManiac |
Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
das erledigt ja dann der Trigger (soweit vorhanden)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 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