Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi AutoInc bei Primärschlüsseln beim Einfügen eines Datensatzes (https://www.delphipraxis.net/90998-autoinc-bei-primaerschluesseln-beim-einfuegen-eines-datensatzes.html)

DelphiManiac 27. Apr 2007 09:21

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!

trashcandesign 27. Apr 2007 09:37

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

mkinzler 27. Apr 2007 09:50

Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
 
Zitat:

Und nicht vergessen einen Trigger zu setzen, damit du wirklich ein Auto-Inc-Verhalten bekommst.
Man kann bei Zeos das aber auch mit TSequenz erledigen.

trashcandesign 27. Apr 2007 09:55

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.

DelphiManiac 27. Apr 2007 09:59

Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
 
Hallo,

d.h. wie oder wo finde ich den TSequenz?

mkinzler 27. Apr 2007 10:01

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.

trashcandesign 27. Apr 2007 10:05

Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
 
TZSequence bei den Zeos-Kompos

DelphiManiac 27. Apr 2007 10:14

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:
INSERT INTO tblMandanten
  (tblMandanten.ANREDE, tblMandanten.VORNAME,
tblMandanten.NAME, tblMandanten.FIRMA,
   tblMandanten.GEBTAG)
VALUES
  (:ANREDE, :VORNAME, :NAME, :FIRMA, :GEBTAG)
Wobei tblMandanten.MandantenID der Primärschlüssel ist

DelphiManiac 27. Apr 2007 10:20

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 :|

mkinzler 27. Apr 2007 10:24

Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
 
Hast du den Query mit der Sequenz verbunden?

DelphiManiac 27. Apr 2007 10:43

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!

Elvis 2. Mai 2007 14:35

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:
INSERT INTO tblMandanten
  (ANREDE, VORNAME, NAME, FIRMA, GEBTAG)
VALUES
  (:ANREDE, :VORNAME, :NAME, :FIRMA, :GEBTAG)
RETURNING ID
Du solltest nun eine Zile in der Ergebnismenge mit einer Spalte haben.
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. ;)

mkinzler 2. Mai 2007 14:40

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

DelphiManiac 2. Mai 2007 16:01

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

Elvis 2. Mai 2007 16:12

Re: AutoInc bei Primärschlüsseln beim Einfügen eines Datensa
 
Zitat:

Zitat von DelphiManiac
Wie geht das mit dem Returning? Habe da bisher noch nichts drüber gelesen?

So wie's 2 Beiträge über deinem steht? :gruebel:

DelphiManiac 3. Mai 2007 13:29

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:
INSERT INTO
mitgebe, oder?

Gruß
und Danke DelphiManiac

mkinzler 3. Mai 2007 13:31

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 02:28 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