Autor Téma: Trigger update  (Přečteno 106 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4715
  • Karma: 41
    • Verze Delphi: XE7 professional
Trigger update
« kdy: 16-03-2020, 15:55:14 »
Mám kód na zmenu údajov v GTT
Kód: [Vybrat]
  FqryUI.SQL.Text := 'UPDATE DAY_COST_OWS SET DATEFROM = :NEWDATEFROM,'+
    ' DAYS = DATETO - CAST(:NEWDATEFROM AS DATE) + 1'+
  ' WHERE FKOWNER_FLAT = :FKOWNER_FLAT AND DATEFROM = :OLDDATEFROM';
Túto zmenu chcem urobiť ja v kontrolnej (dočasnej) persistent tabuľke. Nedarí sa mi a internet či knihy nechcú veľmi poradiť. Skúšal som spúšte spojené s insert použiť aj pre update. Nebolo to ono.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 932
  • Karma: 46
    • Verze Delphi: 10.3
Re:Trigger update
« Odpověď #1 kdy: 16-03-2020, 16:16:08 »
Nechápu dotaz - píšeš "trigger update", ale ten SQL text jako trigger fakt nevypadá.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4715
  • Karma: 41
    • Verze Delphi: XE7 professional
Re:Trigger update
« Odpověď #2 kdy: 16-03-2020, 16:48:51 »
FqryUI je použité pre GTT. A v GTT chcem pomocou trigger update urobiť tie isté zmeny v persistent tabuľke. Pre insert to mám.
Momentálne to mám urobené
Kód: [Vybrat]
FqryUI.SQL.Text := 'Z_UPDATE DAY_COST_OWS ...V tomto prípade (skôr teoreticky) riskujem, že tabuľky nebudú totožné.
Predpona Z_ je pre dočasné persistent tabuľky na kontrolu správnosti. A aby som ich mal v DB manger-i na konci zoznamu tabuliek.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 932
  • Karma: 46
    • Verze Delphi: 10.3
Re:Trigger update
« Odpověď #3 kdy: 16-03-2020, 16:51:58 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4715
  • Karma: 41
    • Verze Delphi: XE7 professional
Re:Trigger update
« Odpověď #4 kdy: 16-03-2020, 17:00:20 »
To je v poriadku. Ja som tu dal SQL, pomocou ktorého upravujem údaje v tabuľke. Aby sa bolo od čoho odpichnúť. Ohľadom spúšte som tu nedal nič. Lebo nič nemám. Okrem spúšte pre Insert.
Celý môj problém je v tom, že neviem ako v trigger určiť záznamy ktoré sa majú upraviť. Viď časť WHERE.
« Poslední změna: 16-03-2020, 17:02:20 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 932
  • Karma: 46
    • Verze Delphi: 10.3
Re:Trigger update
« Odpověď #5 kdy: 16-03-2020, 17:05:43 »
No jestli Ti funguje trigger pro insert, tak trigger pro update bude víceméně totéž, ne?

CREATE TRIGGER ... FOR ... ACTIVE AFTER UPDATE POSITION 1 AS
...
UPDATE ... SET Pole1=NEW.Pole1, ... WHERE PrimarniKlic=OLD.PrimarniKlic


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4715
  • Karma: 41
    • Verze Delphi: XE7 professional
Re:Trigger update
« Odpověď #6 kdy: 16-03-2020, 17:22:12 »
Ja mám podmienku
Kód: [Vybrat]
WHERE FKOWNER_FLAT = :FKOWNER_FLAT AND DATEFROM = :OLDDATEFROMa tú tam neviem dostať. Mám na mysli zvonku dodané parametre. Keďže to je GTT, tak žiaden primárny kľúč tam neexistuje.
Predpokladám, že Tvoj zápis prejde celú tabuľku. Tabuľka môže mať aj 10 000 záznamov. Pritom budem potrebovať upraviť len 15 záznamov. Je to vhodná technika?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 932
  • Karma: 46
    • Verze Delphi: 10.3
Re:Trigger update
« Odpověď #7 kdy: 16-03-2020, 17:24:39 »
No a podle čeho chceš poznat, které záznamy v trvalé tabulce změnit, když nemáš primární klíč? Prostě nějaká pole, která jsou v GTT a přitom stejná jsou v té normální tabulce (nemusí to být nutně primární klíč, ale je samozřejmě záhodno, aby ta trvalá tabulka měla pro ono pole index).

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2667
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Trigger update
« Odpověď #8 kdy: 16-03-2020, 17:32:08 »
Mám na mysli zvonku dodané parametre.
Zvenku do triggeru zadne parametry nepredas, protoze neexistuji. Ty muzes jedine v podminkach testovat hodnoty old.xxx a/nebo new.xxx

Citace
Keďže to je GTT, tak žiaden primárny kľúč tam neexistuje.
A co ti brani PK vytvorit, jestli by ti umoznil realizovat co potrebujes?


« Poslední změna: 16-03-2020, 17:34:05 od pf1957 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4715
  • Karma: 41
    • Verze Delphi: XE7 professional
Re:Trigger update
« Odpověď #9 kdy: 16-03-2020, 17:47:10 »

Citace
No a podle čeho chceš poznat, které záznamy v trvalé tabulce změnit, když nemáš primární klíč?
Viď WHERE...
Tabuľky sú do štruktúry úplne zhodné.
Citace
Zvenku do triggeru zadne parametry nepredas, protoze neexistuji.
Nechám to na samostatnom Query.
Citace
A co ti brani PK vytvorit, jestli by ti umoznil realizovat co potrebujes?
V skutočnosti nič by nič neriešil. FKOWNER_FLAT je vlastník, a ten má niekoľko služieb. Všetkým sa aktualizuje jediný dátum z viacerých. Naraz hromadne. Ak tam mám viacerých takých vlastníkov, tak to robím v cykle. Jeden vlastník, jeden cyklus.
PK nemám, lebo tie "trvalé" tabuľky sú dočasné tabuľky. Len pre moju potrebu ladenia. V ostrej verzii nebudú. Tak isto vypnem všetky spúšte, ktoré s nimi pracujú.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.