Autor Téma: chyba při provádění SQL na Firebirdu přes komponentu TFDQuery  (Přečteno 882 krát)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2482
  • Karma: 131
    • Verze Delphi: D2007, XE3, DX10
Re:chyba při provádění SQL na Firebirdu přes komponentu TFDQuery
« Odpověď #15 kdy: 20-11-2018, 10:51:00 »
Pokud odstraním uvozovky tak to projde v pořádku.
Tohle nema co delat s validovanim ale s nezbytnym porozumenim strukture SQL dotazu - to delaji kazde komponenty, protoze kdyz jim strcis nejaky string a kterem prohlasujes, ze je to SQL prikaz, tak si ta komponenta musi zjistit jaky (vraci/nevraci result set, ma parametry apod.).

Resenim je samozrejme vyhnout se nejak obskurne sestavovanym SQL prikazum a pouzit parametry, jak jiz bylo napsano.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4113
  • Karma: 36
    • Verze Delphi: XE7 professional
Re:chyba při provádění SQL na Firebirdu přes komponentu TFDQuery
« Odpověď #16 kdy: 20-11-2018, 10:56:11 »
Ešte by ma zaujímalo odkiaľ ten replikačný log ťahá údaje. Lebo ak z DB, tak by podľa môjho názoru mal vrátiť platný Select.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1721
  • Karma: 66
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:chyba při provádění SQL na Firebirdu přes komponentu TFDQuery
« Odpověď #17 kdy: 20-11-2018, 11:02:13 »
Resenim je samozrejme vyhnout se nejak obskurne sestavovanym SQL prikazum a pouzit parametry, jak jiz bylo napsano.

To rozhodne. Je totiz treba mit na pameti, ze se zapnutymi makry se i z vhodne uvozeneho konstantniho retezce, jako napr.:

Kód: MySQL [Vybrat]
  1. INSERT INTO MyTable (TheColumn) VALUES ({s Itchy&Scratchy});

muze stat makro s nazvem Scratchy diky symbolu & jenz uvozuje substitucni promennou.

Ešte by ma zaujímalo odkiaľ ten replikačný log ťahá údaje. Lebo ak z DB, tak by podľa môjho názoru mal vrátiť platný Select.

To vrati. Ale ta zminovana vyjimka byla vyvolana FireDAC parserem preprocesoru (jenz parsuje predany retezec dotazu jeste pred pripravou SQL prikazu pripojenym DBMS).
« Poslední změna: 20-11-2018, 11:19:12 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4113
  • Karma: 36
    • Verze Delphi: XE7 professional
Re:chyba při provádění SQL na Firebirdu přes komponentu TFDQuery
« Odpověď #18 kdy: 20-11-2018, 11:06:59 »
Ja som to myslel takto: UPDATE OR INSERT INTO PREPRAVA SELECT....
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1721
  • Karma: 66
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:chyba při provádění SQL na Firebirdu přes komponentu TFDQuery
« Odpověď #19 kdy: 20-11-2018, 11:11:02 »
Ja som to myslel takto: UPDATE OR INSERT INTO PREPRAVA SELECT....

A jak bys resil replikaci na jiny server? Umi Firebird linkovane servery?
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline IBAG2008

  • Nováček
  • *
  • Příspěvků: 35
  • Karma: 0
    • Verze Delphi: D6,D7,2010,XE5,D10
Re:chyba při provádění SQL na Firebirdu přes komponentu TFDQuery
« Odpověď #20 kdy: 20-11-2018, 14:46:43 »
U offline replikací je důležité aby se měnila data v přesně stejném pořadí jak vznikal insert/update/delete, aby na to mohli reagovat
triggery na cílové DB, takže je důležité mít replikační sql v době vzniku a následný select z dat by to neřešil.
Proto je v replikačním logu již hotové SQL.

Potřeboval jsem pouze to, aby komponenta nemodifikovala dále sql příkaz a s tím jste mi pomohli.
SQL byl v IDE zadán pouze pro ověření jestli bude už komponenta hlásit chybu, bez toho že by se příkaz prováděl na cílové DB.

Z.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1721
  • Karma: 66
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:chyba při provádění SQL na Firebirdu přes komponentu TFDQuery
« Odpověď #21 kdy: 20-11-2018, 15:54:39 »
Potřeboval jsem pouze to, aby komponenta nemodifikovala dále sql příkaz a s tím jste mi pomohli.

Ted jde o to, zda takove chovani FireDAC nepovazovat za chybu. Podle me by se mohly substitucni promenne chovat stejne jako escape sekvence (jenz se aplikuji jen pokud nejsou uvnitr konstantniho retezce prikazu).
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 649
  • Karma: 41
    • Verze Delphi: 10.3
Re:chyba při provádění SQL na Firebirdu přes komponentu TFDQuery
« Odpověď #22 kdy: 21-11-2018, 10:51:32 »
U offline replikací je důležité aby se měnila data v přesně stejném pořadí jak vznikal insert/update/delete, aby na to mohli reagovat triggery na cílové DB, takže je důležité mít replikační sql v době vzniku a následný select z dat by to neřešil.
Proto je v replikačním logu již hotové SQL.

Tohle řeším tak, že pro importy/exporty se naopak triggery neprovádějí vůbec (že se jedná o import/export se pozná podle role pro připojení). Změny, které se v databázi udály kvůli spuštění triggeru, se do ostatních databází přenesou samostatně. Ale zachovat pořadí je rozhodně důležité mj. kvůli referenční integritě.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4113
  • Karma: 36
    • Verze Delphi: XE7 professional
Re:chyba při provádění SQL na Firebirdu přes komponentu TFDQuery
« Odpověď #23 kdy: 21-11-2018, 11:25:40 »
Ďakujem za vysvetlenie o čo ide. Ja sa hrám na svojom piesočku a často zabúdam, že okolo toho piesku existuje úplne iný svet. Ten ani nepoznám. Takže tie slová o zvracaní beriem späť :D
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.