Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 10. 8. 2009 13:36:02

gln
Člen
Registrace: 10. 8. 2009
Příspěvků: 5

Vytvoření podmínky "IF"

Dobrý den všem...

Potřebuju poradit s tvorbou databáze v OpenOffice.org Base. (verze 3.1, používám na Linuxu) S tímto programovým balíkem pomalu začínám, přecházím z MS Office. Jsem tedy naprostý začátečník – to předesílám. :-)
Mám databázi filmů, které mám koupeny, cca 350 filmů. Tu mám zatím v MS Access a převádím ji do Base. Podařilo se mi převést tabulku, nadefinoval a upravil jsem si zadávací formulář, základ funguje, prakticky jde používat – jen ji potřebuju „dokrupičkovat".
O co mi tedy jde?

1.Mám tabulku s názvem „film".
2.V této tabulce je mimo jiné sloupec „CS_titulky", který obsahuje pole typu BOOLEAN (YES/NO) – v zadávacím formuláři databáze je to zaškrtávací políčko
3.Potřebuju napsat dotaz (příkaz), který by mi zobrazil v jiném textovém poli (prohlížecí formulář) podmínku ve smyslu, že pokud je políčko zaškrtnuto uvede se např.: „české titulky", v opačném případě bude uvedeno např.: „bez českých titulků". (ono to pak bude složitější, bude tam další příkaz SQL --> spojení s dalším polem „další titulky",  ale to až později.)
4.Myslel jsem si, že by tento základní SQL příkaz měl znít:
SELECT IF ("CS_titulky"=1, 'české titulky', 'bez českých titulků') FROM "film"
(Podle různých nápověd, co jsem našel na NETu by to mělo být v pořádku...)
   
5.Ale tomu tak není, SQL mi hlásí chybu:
Stav SQL: 37000
Kód chyby: -11
Unexpected token: IF in statement [SELECT IF( "CS_titulky" = 1, 'české titulky', 'bez českých titulků' ) FROM "film"]

A je jedno, jestli zadám "CS_titulky" = 1 nebo "CS_titulky" TRUE nebo "CS_titulky" = TRUE...

6.Přičemž v Base mi SQL v dotazech a tabulkách funguje. Mám vyzkoušeno a ve formuláři nebo sestavě nebo v dotazech používám např. příkazy:

a)SELECT CONCAT( "jazyk", CONCAT( ', ', "dalsi_jazyk" ) ) FROM "film"
  (spojí dvě textová pole do jednoho a mezi slova přidá čárku)
b)SELECT COUNT (*) FROM "film"
  (vrátí počet záznamů v databázi)
c)SELECT "CS_titulky"  FROM "film" WHERE "CS_titulky"=1
  SELECT "CS_titulky"  FROM "film" WHERE "CS_titulky"=TRUE
  (oba příkazy vrátí pouze řádky se zaškrtnutou hodnotou – TRUE)

Tak nevím... Vypadá to, jakoby ten příkaz IF neexistoval... Můžete mne nějak „nakopnout", kterým směrem jít? Doufám, že jsem napsal srozumitelně, o co mi jde. Ještě podotýkám, že opravdu začínám a s SQL nemám zatím žádné zkušenosti...

V konečné fázi budu potřebovat napsat dotaz, který porovnává asi 21 polí typu BOOLEAN. Ale to až v případě, pokud se mi podaří nadefinovat ten jednoduchý... :-)
V MS Access je to příkaz:
=(IIf([drama]=TRUE;' drama,';'')+IIf([art]=TRUE;' art,';'')+IIf([rodinny]=TRUE;' rodinný,';'')+IIf([pohadka]=TRUE;' pohádka,';'')+IIf([krimi]=TRUE;' krimi,';'')+IIf([thriller]=TRUE;' thriller,';'')+IIf([valecny]=TRUE;' válečný,';'')+IIf([horor]=TRUE;' horor,';'')+IIf([komedie]=TRUE;' komedie,';'')+IIf([kresleny]=TRUE;' kreslený,';'')+IIf([spionazni]=TRUE;' špionážní,';'')+IIf([akcni]=TRUE;' akční,';'')+IIf([historicky]=TRUE;' historický,';'')+IIf([scifi]=TRUE;' sci-fi,';'')+IIf([dokument]=TRUE;' dokument,';'')+IIf([hudebni]=TRUE;' hudební,';'')+IIf([dobrodruzny]=TRUE;' dobrodružný,';'')+IIf([western]=TRUE;' western,';'')+IIf([romanticky]=TRUE;' romatický,';'')+IIf([fantasy]=TRUE;' fantasy,';'')+IIf([politicky]=TRUE;' politický,';''))

Dík za jakékoliv rady...  Jirka. (P.S. Omlouvám se za délku příspěvku...)

Offline

#2 12. 8. 2009 09:13:09

gln
Člen
Registrace: 10. 8. 2009
Příspěvků: 5

Re: Vytvoření podmínky "IF"

Ahojte lidi...

Tak jsem nakonec napsal i na fórum www.oooforum.org a tam jsem dostal radu použít místo IF příkaz CASEWHEN. V OOO Base je nastavena databáze HSQL.
Syntaxe příkazu je tedy: 

SELECT CASEWHEN("CS_titulky"=TRUE, 'české titulky', 'bez českých titulků') AS "titulky" FROM "film"

Příkaz CASEWHEN jde i vnořit a použít např. v tomto tvaru:

SELECT CONCAT((CASEWHEN("CS_titulky"=TRUE, 'české titulky, ', 'bez českých titulků, ')), "jine_titulky") AS "titulky" FROM "film"

Stejně tak jde i jednoduše spojovat:

SELECT CASEWHEN("kresleny"=TRUE, 'kreslený, ', '') + CASEWHEN("pohadka"= TRUE, 'pohádka, ', '') + CASEWHEN("rodinny" = TRUE, 'rodinný, ', '') + CASEWHEN( "romanticky" = TRUE, 'romantický, ', '' ) + CASEWHEN( "western" = TRUE, 'western, ', '') + CASEWHEN("komedie" = TRUE, 'komedie, ', '') + CASEWHEN("dobrodruzny" = TRUE, 'dobrodružný, ', '') + CASEWHEN("drama" = TRUE, 'drama, ', '') + CASEWHEN("krimi" = TRUE, 'krimi, ', '') + CASEWHEN("spionazni" = TRUE, 'špionážní, ', '') + CASEWHEN("thriller" = TRUE, 'thriler, ', '') + CASEWHEN("akcni" = TRUE, 'akční, ', '') + CASEWHEN("historicky" = TRUE, 'historický, ', '') + CASEWHEN("politicky" = TRUE, 'politicky, ', '') + CASEWHEN("valecny" = TRUE, 'válečný, ', '') + CASEWHEN("fantasy" = TRUE, 'fantasy, ', '') + CASEWHEN("horor" = TRUE, 'horor, ', '') + CASEWHEN("scifi" = TRUE, 'sci-fi, ', '') + CASEWHEN("dokument" = TRUE, 'dokument, ', '') + CASEWHEN("hudebni" = TRUE, 'hudební, ', '') + CASEWHEN("art" = TRUE, 'art, ', '') AS "zanr" FROM "film"

Třeba to tu někomu pomůže... (kdo tápá jako já...) :-)

Hezký den, Jirka.

Offline

#3 4. 9. 2009 10:21:06

jana smrckova
Člen
Registrace: 5. 5. 2006
Příspěvků: 2

Re: Vytvoření podmínky "IF"

Díky, pomohlo.

Offline

#4 15. 9. 2009 15:55:43

Bum
Člen
Registrace: 24. 12. 2007
Příspěvků: 5

Re: Vytvoření podmínky "IF"

Aj mne to teraz pomohlo. Dakujem usetrilo sa mi kopec casu.

Offline

Zápatí