Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Selbstinkrementiertes Feld in Firebird zählt falsch hoch. (https://www.delphipraxis.net/127400-selbstinkrementiertes-feld-firebird-zaehlt-falsch-hoch.html)

Chemiker 12. Jan 2009 19:45

Datenbank: Firebird • Version: 2.0 • Zugriff über: IBExpert / Fibplus

Selbstinkrementiertes Feld in Firebird zählt falsch hoch.
 
Hallo,

ich habe unter Firebird ein Feld das automatisch durch einen Generator hochgezählt wird.
Wenn ich nun Datensätze eingebe unter IBExpert, so wird das Feld auch ohne Probleme hochgezählt. In meinem Test-Programm wo ich die Eingabe mit einem DBStringGrid und mit einem DBNavigator realisiere, wird das Feld um 2 hochgezählt.

IBExpert; 1,2,3,4 usw.
Delphi-Prg.:1,3,5 usw.

Woran kann das liegen?

Bis bald Chemiker

mkinzler 12. Jan 2009 20:03

Re: Selbstinkrementiertes Feld in Firebird zählt falsch hoch
 
Wird der PK clientseitig gefüllt? Wird ein trigger verwendet? Wenn ja, wie sieht dieser aus?

Chemiker 12. Jan 2009 20:08

Re: Selbstinkrementiertes Feld in Firebird zählt falsch hoch
 
Hallo mkinzler,

was ist ein PK?

Es wird ein Tigger verwendet:

SQL-Code:
CREATE OR ALTER TRIGGER SET_MW_ID FOR MW_TABELLE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  if (new.mw_id is null) then
  new.mw_id = gen_id(mw_id_gen, 1);
end
Bis bald Chemiker

MrSpock 12. Jan 2009 20:10

Re: Selbstinkrementiertes Feld in Firebird zählt falsch hoch
 
PK ist der primary key. Üblicherweise wird dort ein autoinc Feld verwendet.

Chemiker 12. Jan 2009 20:14

Re: Selbstinkrementiertes Feld in Firebird zählt falsch hoch
 
Hallo MrSpock,

dank für die Übersetzung.

Ja, es wird ein PK für das Feld verwendet.

SQL-Code:
ALTER TABLE MW_TABELLE ADD CONSTRAINT PK_MW_TABELLE PRIMARY KEY (MW_ID);
Bis bald Chemiker

mkinzler 12. Jan 2009 20:17

Re: Selbstinkrementiertes Feld in Firebird zählt falsch hoch
 
Wird das Feld vom Client gesetzt? Wird zusätzlich eine clientseitiges autoinc verwendet? (über Komponente)

Hansa 12. Jan 2009 20:20

Re: Selbstinkrementiertes Feld in Firebird zählt falsch hoch
 
Was mkinzler knapp andeuten will : in FIBplus ist wohl bei den AutoUpdateOptions ein Generatorname hinterlegt. Dort könnte man auch den GeneratorStep auf 5 einstellen und der Wert würde (je nach Trigger) gleich um 6 hochgezählt. Warum ? Der Trigger zählt wohl sowieso um eins hoch und übergibt den Wert an das Programm. Dieses macht den Rest. Das ist einfach nur doppelt gemoppelt. :mrgreen:

Chemiker 12. Jan 2009 20:22

Re: Selbstinkrementiertes Feld in Firebird zählt falsch hoch
 
Hallo mkinzler,

mir nicht bekannt.
Ich habe nur die Komponenten so eingestellt das ich die Eingabe mit dem DBGrid und dem DBNavigator testen kann.

Bis bald Chemiker

Chemiker 12. Jan 2009 20:28

Re: Selbstinkrementiertes Feld in Firebird zählt falsch hoch
 
Hallo hansa,

im FIBDataset steht:

AutoReWriteSqls= True
Generatorname= GEN_MW_TABELLE_ID
GeneratorStep=1

Kommt es deshalb zu der unterschiedlichen Zählweise?

Bis bald Chemiker

Hansa 12. Jan 2009 20:39

Re: Selbstinkrementiertes Feld in Firebird zählt falsch hoch
 
Sieht so aus. Siehe Vorposting. Nicht getestet, aber logisch. :shock: Setze doch testweise den Generatorstep wirklich auf 5 und gucke mal, was da rauskommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz