Totální zmatek, ale je jasné, že "inet" se ve variantě se zapnutou
analýzou příkazů interpretuje jako název sloupce. Napadá mi ještě zkusit
zapsat inet jako klasickou funkci, tj. se závorkami, s bezzávorkovým
castem si syntaktický analyzátor zjevně neví rady (a obávám se, že si
neví rady ani s <<).
SELECT * FROM ip WHERE ip << inet(:param) ORDER BY ip
Jinak mám zkušenost, že při vypnuté analýze příkazů OOo schroupe
cokoliv, cokoliv schroupe databázový stroj. Výsledek je ale pouze ke
čtení a nefungují vazby formulářů...
J. S.
Dne 8.3.2011 22:43, Zbyněk Burget napsal(a):
Dám sem všechny varianty, které jsem schopný z toho dostat.
Dne 8.3.2011 21:25, Jiri Spitz napsal(a):
Pár doplňujících dotazů:
1. V tom dotazu máte nebo nemáte nastaveno "Spustit SQL příkaz přímo"?
Dotaz upravuju jako SQL, spouštím přímo z okna úpravy dotazu
Spustit přímo: ANO
Dotaz [1]:
SELECT * FROM ip WHERE ip << inet '10.0.0.0/8' ORDER BY ip
funguje
Dotaz [2]:
SELECT * FROM ip WHERE ip << inet :param ORDER BY ip
chyba, ve "Více" 3 řádky:
1) chyba
Datový obsah nemohl být načten.
2) chyba
Kód chyby: 1
pq_driver: [PGRES_FATAL_ERROR]ERROR: column "inet" does not exist at
character 30
(caused by statement 'SELECT * FROM ip WHERE ip << inet ORDER BY ip')
3) Informace
SQL příkaz, který chybu způsobil:
SELECT * FROM ip WHERE ip << inet :param ORDER BY ip
Dotaz [3]:
SELECT * FROM ip WHERE ip << :param ORDER BY ip
Opět chyba jiná, druhý řádek ve "Více":
Kód chyby: 1
pq_driver: [PGRES_FATAL_ERROR]ERROR: operator does not exist: inet <<
at character 27
(caused by statement 'SELECT * FROM ip WHERE ip << ORDER BY ip')
Pokud nastavím Spustit přímo: NE
chybová hláška vypadá prakticky vždy stejně a ve "Více" jsou tři řádky:
1) chyba
Stav SQL: HY000
Kód chyby: 1000
Syntax error in SQL expression
2) chyba
Stav SQL: HY000
Kód chyby: 1000
3) chyba
Stav SQL: HY000
Kód chyby: 1000
syntax error, unexpected $end, expecting BETWEEN or IN or SQL_TOKEN_LIKE
Ani u jednoho z obou dotazů s parametrem si při spuštění dotazu OOo
nřekne o vyplnění paramteru. Rovnou na mne vykvákne chybu.
2. Ve formuláři založeném na SQL u datového zdroje máte nebo nemáte
nastaveno "Analyzovat SQL příkaz"?
Pokud vypnu analýzu příkazu, při použití dotazu [1] se ukážou data v
read-only tabulce (tam jsem se prve nedopracoval).
Dotazy s parametrem jsem testoval na podformuláři, jsem tak schopný
zase z OOo vydyndat nějakou chybu. Pokud formulář s podformulářem
založeným na parametrickém dotazu otevřu, v podformuláři žádná data
nejsou. Pokud v návrhu formuláře ve Vlastnostech formuláře na záložce
Data kliknu na "..." u propojovacích polí, dostanu chybu, že nelze
získat sloupce z dotazu:
u dotazu [2] se ve "Více" dočtu - 2 řádky:
1) Informace
Nelze získat sloupce 'SELECT ip, pouziti FROM ip WHERE ip << inet
:param ORDER BY ip'.
2) chyba
Kód chyby: 1
pq_driver: [PGRES_FATAL_ERROR]ERROR: column "inet" does not exist at
character 40
(caused by statement 'SELECT ip, pouziti FROM ip WHERE ip << inet
ORDER BY ip')
u dotazu [3] 2. řádek:
Kód chyby: 1
pq_driver: [PGRES_FATAL_ERROR]ERROR: operator does not exist: inet <<
at character 37
(caused by statement 'SELECT ip, pouziti FROM ip WHERE ip << ORDER
BY ip')
Pokud analýzu dotazu zapnu, dostávám podobné hlášky, ale jsou tam
navíc ještě ty nesmysly, které jsem psal v prvním e-mailu.
3. Ty chybové hlášky vrací Postgresql nebo je vrací OOo, aniž by příkazy
na server vůbec dorazily (dá se to vyčíst ze stromu událostí, když si
necháte zobrazit podrobnosti chybové zprávy).
Lze vyčíst z výše uvedeného.
Ta hláška se SQL_LESS signalizuje, že nebyl správně interpretován
operátor <<. Buďto alespoň jeden z operandů nebyl typu inet, nebo to OOo
prostě neumí správně interpretovat.
Nevím, jestli to hodit na krk OOo nebo SDBC driveru.
Té druhá hláška signalizuje naprostou syntaktickou desinterpretaci SQL
příkazu, ale důvod z toho vyčíst neumím. Možná by pomohlo vložit sem
přesnou kopii těch SQL příkazů.
Snad stačí to, co jsem napsal nahoře...
Pokud bych chtěl do dotazu navíc zasekat parametr:
SELECT * FROM ip WHERE ip << :param ORDER BY ip
přestává fungovat i formulář založený na dotazu.
Zde si nejsem jist, zda parametrem předáváte hodnotu typu inet a nebo
textový řetězec. V prvním případě by to mělo fungovat, ve druhém musíte
dotaz upravit:
SELECT * FROM ip WHERE ip << inet :param ORDER BY ip
Testoval jsem samozřejmě obě varianty (právě z toho důvodu, že se
neví, v jakém tvaru bude parametr předán. Ono ale nefunguje ani jedno,
ani druhé.
--
-----------------------------------------------------------------
To unsubscribe send email to [email protected]
For additional commands send email to [email protected]
with Subject: help