Delphi-PRAXiS

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.

Chemiker 12. Jan 2009 20:46

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

auf Step 5 eingestellt er zählt nur um eins weiter?????

Wieder auf Step 1 gestellt er zählt um 2 weiter?????

Das ist mir zu hoch.

Bis bald Chemiker

Hansa 12. Jan 2009 20:50

Re: Selbstinkrementiertes Feld in Firebird zählt falsch hoch
 
Zitat:

Zitat von Chemiker
Das ist mir zu hoch.

Mir auch. :lol: Zeige mal den Trigger. Den FIBplus-Generator-Kram benutze ich normalerweise nicht, sondern nur DB-Trigger. Kann ich aber mal testen.

Edit : am besten auch noch den DFM-Teil des Datasets.

Chemiker 12. Jan 2009 20:59

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

der Tigger steht im #3 Beitrag.

Habe alles unter FIBPlus AutoUpdateOptions gelöscht, scheint jetzt zu funktionieren.

Er zählt nur um eins hoch, ich werde das mal weiter beobachten.

Danke für die Hilfe an alle.

Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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 by Thomas Breitkreuz