Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FireDac den AutoInc value in onBeforePost abfragen. (ist immer -x) (https://www.delphipraxis.net/211351-firedac-den-autoinc-value-onbeforepost-abfragen-ist-immer-x.html)

Kostas 2. Sep 2022 16:07

Datenbank: Firebird • Version: 3.0 • Zugriff über: FIREDAC

FireDac den AutoInc value in onBeforePost abfragen. (ist immer -x)
 
Hallo Zusammen,

ich benötige von einer fdQuery bei onBeforePost den Generator Wert des PKs.
Bei onBeforePost ist der Wert immer -1, -2, -3 bei jedem Insert.

Eingestellt haben ich in der fdQuery:

UpdateOptions.AssignedValues = [uvFetchGeneratorsPoint,uvGeneratorName]
UpdateOptions.AutoIncFields = bankdatenschulungenid
UpdateOptions.FetchGeneratorsPoint = gpImmediate
UpdateOptions.GeneratorName = gen_bankdatenschulungen_id
UpdateOptions.KeyFields = bankdatenschulungenid

Hat jemand eine Idee was ich übersehe?

Gruß Kostas

Uwe Raabe 2. Sep 2022 16:24

AW: FireDac den AutoInc value in onBeforePost abfragen. (ist immer -x)
 
Und bankdatenschulungenid ist auch vom Typ
Delphi-Quellcode:
TFDAutoIncField
?

Uwe Raabe 2. Sep 2022 16:29

AW: FireDac den AutoInc value in onBeforePost abfragen. (ist immer -x)
 
Und falls ja, wie ist
Delphi-Quellcode:
ClientAutoIncrement
eingestellt?

Kostas 2. Sep 2022 16:35

AW: FireDac den AutoInc value in onBeforePost abfragen. (ist immer -x)
 
Hallo Uwe,

ich hatte der Query die Felder im Feld-Editor NICHT angelegt da ich sie nicht benötige. Habe ich gerade nachgeholt zum testen. Das Feld wird als TFDAutoIncField erkannt. Dennoch wird -1 bei onBeforePost zurückgegeben. Nach dem Post wird das Feld aktualisiert und bekommt den richtigen Wert.

Kostas 2. Sep 2022 16:37

AW: FireDac den AutoInc value in onBeforePost abfragen. (ist immer -x)
 
ClientAutoIncrement ist auf true gesetzt.

Kostas 2. Sep 2022 16:43

AW: FireDac den AutoInc value in onBeforePost abfragen. (ist immer -x)
 
Mir ist noch etwas aufgefallen:

Ich arbeite wie gesagt ohne die Feldobjekte.
Zum testen habe ich bei AfterIinsert den Wert 1000 übergeben.
Bei OnBeforePost habe ich die 1000.
Nach dem Post wird die 1000 durch den Generatorwert überschrieben über den Trigger in der DB.
Das bedeutet, die Query senden den vorbelegten PK nicht zur DB.


Delphi-Quellcode:
procedure Tfr1.qrBankdatenSchulungAfterInsert(DataSet: TDataSet);
begin
  qrBankdatenSchulung.FieldByName('BANKDATENSCHULUNGENID').AsInteger := 1000;
end;

Delphi-Quellcode:
CREATE OR ALTER trigger bankdatenschulungen_bi for bankdatenschulungen
active before insert position 0
as
begin
  if (new.bankdatenschulungenid is null) then
    new.bankdatenschulungenid = gen_id(gen_bankdatenschulungen_id,1);
end

haentschman 2. Sep 2022 16:46

AW: FireDac den AutoInc value in onBeforePost abfragen. (ist immer -x)
 
Zitat:

Nach dem Post wird das Feld aktualisiert und bekommt den richtigen Wert.
...und so muß das sein. Wie kann die Query den Wert "erhalten" wenn der vom Trigger nicht generiert wurde? :gruebel:

Deswegen heiß das BeforePost...:zwinker:

Uwe Raabe 2. Sep 2022 16:47

AW: FireDac den AutoInc value in onBeforePost abfragen. (ist immer -x)
 
Zitat:

Zitat von Kostas (Beitrag 1511160)
ClientAutoIncrement ist auf true gesetzt.

Dann greift die Zählung mit den negativen Werten und erst beim Post werden die tatsächlichen IDs ermittelt. Setz das mal auf False.

Uwe Raabe 2. Sep 2022 16:47

AW: FireDac den AutoInc value in onBeforePost abfragen. (ist immer -x)
 
Zitat:

Zitat von haentschman (Beitrag 1511162)
Wie kann die Query den Wert "erhalten" wenn der vom Trigger nicht generiert wurde? :gruebel:

Na, dafür hat er ja den Generatornamen angegeben.

Kostas 2. Sep 2022 16:51

AW: FireDac den AutoInc value in onBeforePost abfragen. (ist immer -x)
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1511163)
Zitat:

Zitat von Kostas (Beitrag 1511160)
ClientAutoIncrement ist auf true gesetzt.

Dann greift die Zählung mit den negativen Werten und erst beim Post werden die tatsächlichen IDs ermittelt. Setz das mal auf False.

habe ich gerade, leider ohne Erfolg.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 Uhr.
Seite 1 von 3  1 23      

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