Autor Téma: Foreign key reference target does not exist. Vkladám null a je povolené  (Přečteno 183 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2610
  • Karma: 23
    • Verze Delphi: XE7 professional
Bežne to používam
Kód: Delphi [Vybrat]
  1. CREATE TABLE INVOICEINCOMINGITEMS (
  2. ...
  3.   FKSUBACCOUNTS FOREIGNKEYNULL);
  4.  
  5. ALTER TABLE INVOICEINCOMINGITEMS ADD CONSTRAINT FK_INVOICEITEM_SUBACC FOREIGN KEY (FKSUBACCOUNTS) REFERENCES SUBACCOUNTS(IDSUBACCOUNTS);
  6. ...
  7.   FHotDB.Table.FieldByName('FKSUBACCOUNTS').Value := null;
  8.   FHotDB.PostRec(True);
  9.  
  10. Project JasotSVB.exe raised exception class EIBNativeException with message '[FireDAC][Phys][FB]violation of FOREIGN KEY constraint "FK_INVOICEITEM_SUBACC" on table "INVOICEINCOMINGITEMS"
  11. Foreign key reference target does not exist'.
Vloženie záznamu cez SQL manager ide bez problému. Pre istotu som urobil zálohu a obnovenie DB FB.
V čom môže byť zrada?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Plnoletý
  • ***
  • Příspěvků: 184
  • Karma: 1
    • Verze Delphi: XE6, 6, 5
Sice v trošku jiné situaci, ale používal jsem místo
Kód: Delphi [Vybrat]
  1. xxx.FieldByName('FKSUBACCOUNTS').Value := null;
tohle:
Kód: Delphi [Vybrat]
  1. xxx.FieldByName('FKSUBACCOUNTS').Clear;

Třeba by to pomohlo.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2610
  • Karma: 23
    • Verze Delphi: XE7 professional
Nepomohlo. Ešte skúsim znova definovať tabuľku. Hlava mi to neberie.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Plnoletý
  • ***
  • Příspěvků: 184
  • Karma: 1
    • Verze Delphi: XE6, 6, 5
Když vložení přes SQL manager projde, tak to tabulkou nebude. Pro zajímavost bych zkusil ten FK_INVOICEITEM_SUBACC zrušit, vložil bych záznam z aplikace a podíval se, co se vlastně vložilo. Třeba tam dává nulu...

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1678
  • Karma: 70
    • Verze Delphi: D2007, XE3, DX10
Vloženie záznamu cez SQL manager ide bez problému.
No ale z toho jasne plyne, ze problem neni v DB, ale pri komunikaci s ni tj. na urovni DB komponent. Kdyz se bubakem podivas na FHotDB.Table.FieldByName('FKSUBACCOUNTS') na vlastnost Required a po prirazeni null ev. Clear(), jestli je opravdu IsNull
a jestli nekde nemas v nejakych options kolem spojeni, datasetu, tranksace nastaveno, ze ma null konvertovat na nejakou default hodnotu apod. (HOSIP a s FireDac jsem delal malo, takze to neutkvelo, jestli neco takoveho vubec existuje)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2610
  • Karma: 23
    • Verze Delphi: XE7 professional
Citace
Když vložení přes SQL manager projde, tak to tabulkou nebude
Tak si to myslím aj ja. Ale zo zúfalstva...
Citace
Pro zajímavost bych zkusil ten FK_INVOICEITEM_SUBACC zrušit, vložil bych záznam z aplikace a podíval se, co se vlastně vložilo. Třeba tam dává nulu...
Nad zrušením som uvažoval. Ale skontrolovať vloženú hodnotu mi na um neprišlo.
To pf1957 - používam jedno a to isté všade, len tu je problém. Všetko som kontroloval.

Idem skontrolovať čo sa tam zapíše.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2610
  • Karma: 23
    • Verze Delphi: XE7 professional
Už mi to došlo. Mám automatické plnenie hodnôt z komponentov do DB. A to prebehne až v FHotDB.PostRec, čiže mi zmení hodnotu. S takýmto stavom som nepočítal.
Ale vďaka vám konečne viem čo a ako. Ďakujem.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):