Autor Téma: FB UPDATE OR INSERT INTO - ako na primárny kľúč.  (Přečteno 549 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3005
  • Karma: 29
    • Verze Delphi: XE7 professional

Kód: Delphi [Vybrat]
  1.   fdQryFOCFlat_AreasFinal_UI.SQL.Text := 'UPDATE OR INSERT INTO FOCFLAT_AREASFINAL'+
  2.   ' (IDFOCFLAT_AREASFINAL, FKFOCS, YEARS ...)'+
  3.   ' VALUES (:IDFOCFLAT_AREASFINAL, :FKFOCS, :YEARS ...)'+
  4.   ' MATCHING (FKFOCS, YEARS)';
  5.  
Mám problém s primárnym kľúčom. Dopredu ho nepoznám. Môžem ho zistiť, ale to sa mi nezdá. Ináč by som ho využil v MATCHING. Neviem ako to mám riešiť. V tomto konkrétnom prípade by som ho mohol stále prepísať, nemám naň žiadnu väzbu ... no fuj!

Ospravedlňujem sa za zlé zaradenie otázky. Ale už sa nedá vymazať.
« Poslední změna: 22-01-2017, 12:22:34 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1299
  • Karma: 28
    • Pepak.net
Re:FB UPDATE OR INSERT INTO - ako na primárny kľúč.
« Odpověď #1 kdy: 22-01-2017, 21:18:59 »
Kdybys jenom zakládal (INSERT), tak bys ten klíč stejně musel odněkud vzít. Tak ho pro INSERT OR UPDATE vezmi ze stejného místa.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3005
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:FB UPDATE OR INSERT INTO - ako na primárny kľúč.
« Odpověď #2 kdy: 22-01-2017, 21:23:40 »
Tiež som došiel k tomuto záveru. Je to najjednoduchšia a istá cesta. Je to jeden jednoduchý SELECT FIRST 1 ...
Pre INSERT nemusím poznať PK. Vyžiadam si ho. No neviem či záznam už existuje. Ale pri UPDATE už ho poznať musím.
A vypadne mi MATCHING.
« Poslední změna: 22-01-2017, 21:25:19 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Dejfik

  • Nováček
  • *
  • Příspěvků: 14
  • Karma: 1
    • Verze Delphi: D2010
Re:FB UPDATE OR INSERT INTO - ako na primárny kľúč.
« Odpověď #3 kdy: 23-01-2017, 07:46:09 »
Stanislave, nad FB existují generátory. Vytvoř si tam jeden a ten použij jako zdroj dat a použít pak funkci gen_id

např. takto:

Kód: [Vybrat]
insert into TABLE(MOJE_ID, ....) values (gen_id(MUJ_GENERATOR, 1), ...).
Popř. si můžeš nad tabulkou vytvořit trigger before insert a do něj vložit:
Kód: [Vybrat]
:new.MOJE_ID = gen_id(MUJ_GENERATOR, 1);
Zvol metodu, kterou uznáš za vhodnou.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3005
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:FB UPDATE OR INSERT INTO - ako na primárny kľúč.
« Odpověď #4 kdy: 23-01-2017, 10:05:59 »
Citace
Stanislave, nad FB existují generátory. Vytvoř si tam jeden a ten použij jako zdroj dat a použít pak funkci gen_id
S tým už nemám problémy ;)  Ja som riešil či sa vykoná UPDATE alebo INSERT. A podľa toho sa zachovať.
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.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

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