VYTVÁENÍ VÝBROVÝCH DOTAZ V PRODUKTECH YAMACO SOFTWARE PÍRUKA A NÁVODY PRO ÚELY: - VYTVÁENÍ VÝBROVÝCH SESTAV YAMACO SOFTWARE 2003-2004
1. ÚVODEM Standardní souástí všech produkt Yamaco Software jsou prostedky pro tvorbu sestav na zakázku. Jedná se o sestavy origináln navržené uživatelem a sloužící pro získání informací, které nelze v rámci dané evidence zjistit klasickými standardními sestavami. Pro vytváení pedloh sestav na zakázku se používá vestavný grafický editor pedloh, jehož vlastnosti jsou popsány v dokumentu Zaínáme s pedlohami. Tento dokument se vnuje druhé rovin tvorby zakázkových sestav, a tou je vytváení výbrových dotaz. 2. CO JE VÝBROVÝ DOTAZ Sestavy na zakázku lze na základ existující pedlohy sestav vytváet dvma zpsoby bu ze všech dat ( tento zpsob je používán v menší míe) nebo s omezením jen na požadované informace práv toto omezení se zadává formou výbrového dotazu a je v praxi velmi asté. Z technického hlediska je výbrový dotaz jistou strojovou interpretací požadovaného zadání pro výpoet tato interpretace se provádí pomocí zápisu v jazyce SQL. Jedná se o univerzální a zavedený databázový prostedek, který se s vtšími i menšími obmnami používá v rámci všech známých databázových prostedí. Psaní SQL dotaz pímo je pro bžného uživatele relativn složité, proto všechny produkty YAMACO Software disponují grafickými prostedky a pomckami, sloužícími k vizuálnímu sestavení výbrové konstrukce. Jelikož se v portfoliu uživatel vyskytují i klienti, kteí znají pravidla pro používání SQL jazyka a umí psát vlastní výbrové dotazy, pracuje vytváení dotaz v našich produktech dvoucestn a umožuje i tento zpsob tedy pímé napsání potebné ásti dotazu, což znan urychluje práci. Definici jazyka a popis všech SQL píkaz lze nalézt v ad odborných titul. Podrobný popis jednotlivých píkaz je k dispozici i v dokumentaci k databázovému serveru FireBird, ovšem samozejm v anglitin. Z hlediska formátu se každý SQL dotaz, použitý k výbru njakých informací v rámci projektu, skládá z jedné nebo více podmínek, piemž každá podmínka obsahuje práv ti ásti: o pole tabulky, v nmž se bude vyhledávat o podmínku výbru, která bude použita pi porovnání o vlastní hledaný výraz Tedy nap. v pípad požadavku na zadání výbrové konstrukce, která by do sestavy zahrnula všechny pestupky, spáchané 1.7.2003, bude: o datum spáchání polem tabulky, v nmž se bude vyhledávat
o rovná se podmínkou výbru, která bude použita pi porovnání o datum 1.7.2003 vlastním hledaným výrazem Takovýchto konstrukcí mže výbrový dotaz obsahovat neomezené množství pitom je jasné, že jednotlivé dílí konstrukce lze mezi sebou vyhodnocovat dvma zpsoby: o platí jedna a souasn další podmínka o platí jedna nebo druhá podmínka Rozdíl ve zpracování je jasný pokud nap. budeme hledat všechny pestupky, spáchané 3.6.2004 pestupcem Novákem, bude nutno zadat výbrový dotaz tak, aby platily ob podmínky souasn ( najít všechny pestupky, kde je datum spáchání 3.6.2004 A SOUASN kde pestupcem je Novák). Naproti tomu budeme-li hledat pestupky, které spáchal pestupce Dvoák nebo pestupce Dolejš, výbrový dotaz musí být formulován tak, že platí jedna nebo druhá podmínka ( najít všechny pestupky, kde pestupcem je Dvoák NEBO kde pestupcem je Dolejš) Zpsob vyhodnocení jednotlivých podmínek ve smyslu výše uvedeného odstavce lze zadat pomocí dvou anglických slovíek, tzv. logických operátor. Mají-li platit podmínky souasn, je nutno spojit je slovem AND ( a souasn), má-li platit jedna nebo druhá pak slovíkem OR ( nebo). Oba operátory lze zadat graficky, jak bude uvedeno dále, nebo pímo napsat. Volitelnou ástí výbrového dotazu je specifikace polí, podle nichž bude výsledná sestava setídna. I tato ást dotazu mže být bu poskládána v dialogu tvorby dotazu, nebo zapsána pímo do znní vlastního dotazu. Píklady budou uvedeny v dalším textu. Obecn platí, že sestavy lze setídit podle libovolného potu kritérií, která jsou v dané agend k dispozici. Lze urit i smr tídní, a to bu vzestupn nebo sestupn, vždy s respektováním eské normy tídní ( písmeno CH, diakritické znaky apod.). Výsledný dotaz mže, jak již bylo uvedeno, obsahovat neomezené množství dílích výbrových konstrukcí a mže být prakticky neomezen dlouhý. 3. V EM SESTAVIT VÝBROVÝ DOTAZ Pokud je daná agenda vybavena prostedky pro tvorbu sestav na zakázku, používá se jednotný pístup funkce Sestavy na zakázku-vytváení výbrových dotaz, dostupná též v panelu tlaítek pod tímto symbolem: Po zvolení dané funkce se oteve následující dialog:
Tato ást dialogového okna obsahuje všechny prostedky, které potebujeme k sestavení dílích podmínek i celého dotazu: o jména polí tabulky - seznam všech polí ( údaj) dané evidence, která jsou pro vyhledávání k dispozici o podmínka výbru seznam matematických a jiných operátor, které mohou být použity pi porovnávání hledaného údaje o výbrové slovo vlastní hledaný výraz Tyto ti ovládací prvky korespondují s výše uvedenými temi ástmi každé podmínky a jsou pro každou dílí konstrukci povinné. Další ovládací prvky v dialogu jsou: o tlaítko Pidat podmínku do dotazu pidá jednotliv sestavenou dílí konstrukci do výsledného znní dotazu o další volby umožní jednak uzavít celou dílí konstrukci do závorek, jednak pidat ped nebo za dílí konstrukci ( výraz) operátor AND nebo OR o kritérium tídní umožuje na závr tvorby výbrového dotazu pidat požadovaná tídící kritéria a specifikovat smr tídní o pole Dosud vložený dotaz zde se zobrazuje znní vytváeného dotazu a v pípad poteby lze dotaz upravovat pímo v tomto poli o tlaítko Smazat dotaz umožuje vymazat dosud vytvoený dotaz a zaít sestavovat dotaz nový o tlaítko Zkontrolovat vložený dotaz umožuje v kterémkoliv okamžiku zkontrolovat vytváený dotaz. Pozor: kontrola je syntaktická,
tzn. že odhalí správnost zápisu dotazu, nikoliv ovšem jeho logickou správnost tu musí vždy posoudit uživatel. 4. VÝZNAM JEDNOTLIVÝCH PODMÍNEK VÝBRU Jednotlivé podmínky výbru, zobrazené v poli Podmínka výbru, lze rozdlit do tí skupin: o matematické rovná se, vtší než, menší než, nerovná se, vtší nebo rovno, menší nebo rovno tyto podmínky lze použít na porovnání ísel, text i položek typu Datum o textové za ( zaíná hledaným slovem), kon ( koní hledaným slovem), obs ( obsahuje hledané slovo) používají se pouze k hledání text o speciální null ( položka nemá žádnou hodnotu), x null ( položka má njakou hodnotu) lze je použít pro všechny typy údaj 5. PRAKTICKÉ SESTAVENÍ DOTAZU Uveme si na malém píkladu sestavení této výbrové konstrukce: do sestavy bychom potebovali všechny pestupce, kde pestupce je Josef a souasn pestupek byl spáchán v obci Horní Dolní. Vše setídíme podle data spáchání pestupku vzestupn. Nejprve si promyslíme znní dotazu ( tedy to, co od programu chceme): vybrat všechny pestupce, kde položka Jméno obsahuje text Josef a souasn místo spáchání pestupku je Horní Dolní vše setídno podle údaje Datum spáchání pestupku vzestupn. Postup jednotlivé kroky: 1. v seznamu polí klepneme na pole JMENO, oznaíme podmínku výbru OBS a jako hledaný výraz vložíme text josef ( není nutno rozlišovat velká a malá písmena) 2. klepneme na tlaítko Pidat podmínku do dotazu 3. zatrhneme políko Ped výraz pidat operátor a ze seznamu vybereme AND 4. v seznamu polí klepneme na položku MISTO, oznaíme podmínku výbru ROVNÁ SE a jako hledaný výraz vložíme text horní dolní 5. klepneme na tlaítko Pidat podmínku do dotazu 6. v dolním seznamu tídících kritérií klepneme na položku D_SPACHANI a ponecháme oznaený pepína VZESTUPN 7. klepneme na tlaítko Pidat jako tídící kritéria Celé znní dotazu je možné si prohlédnout v políku Dosud vložený dotaz. Zde je možno také provádt pímé korekce dotazu ( doplování a úpravy) a též pomocí tlaítka Zkontrolovat vložený dotaz ovit správnost jeho zadání.
6. JAK VYPADÁ HOTOVÁ VÝBROVÁ KONSTRUKCE Sestavený dotaz je zobrazen v poli Dosud vložený dotaz, a to pímo tak, jak je peveden do jazyka SQL. Výše uvedený píklad bude vypadat v jazyce SQL takto: ( UPPER(JMENO) LIKE "%JOSEF%") AND ( UPPER(MISTO) ="HORNÍ DOLNÍ") ORDER BY D_SPACHANI ASC Je nutno si povšimnout zejména té skutenosti, že veškeré hledané texty vetn položek typu Datum jsou ohranieny uvozovkami. Toto pravidlo je dležité zejména v pípad, že run upravujete vygenerovaný dotaz. Pokud je hledaným výrazem íslo, zadává se do dotazu vždy bez uvozovek, tedy nap. podmínka vybrat všechny dopravce, kteí mají poet vozidel vtší než 12, by byl sestaven takto: VOZIDLA>12 7. OPAKOVANÉ POUŽITÍ VYTVOENÉHO DOTAZU Unikátní vlastností všech produkt, využívajících sestavy na zakázku, je možnost uložení vytvoeného výbrového dotazu pro opakované použití. Úel této vlastnosti je zejmý usnadnit práci pi vytváení sestav s asovou periodicitou, kdy se díve vytvoený dotaz použije zcela beze zmn nebo s dalšími úpravami. Vytvoené dotazy lze ukládat ve druhé ásti dialogu výbrových dotaz: Dialogové okno opt obsahuje všechny potebné prostedky:
o pole pro pojmenování dotazu slouží k vhodnému oznaení obsahu dotazu nap. Lovecké lístky, vydané v prvním pololetí 2004 o tlaítko Uložit dotaz slouží k uložení aktuáln vytvoeného a pojmenovaného dotazu pro pozdjší použití o mížka pro natení existujícího dotazu - zde se zobrazuje seznam uložených dotaz a v poli Znní dotazu i jejich obsah. Oznaením lze vybrat dotaz k optovnému natení o tlaítko Naíst dotaz slouží k natení vybraného dotazu, poté se program pepne na první záložku Vytvoení dotazu a pole Dosud vložený dotaz bude obsahovat požadovanou konstrukci Poet uložených dotaz opt není omezen, a protože se dotazy ukládají pímo do databáze daného projektu, mohou s nimi pracovat všichni uživatelé, pokud mají k daným funkcím pístup. 8. DALŠÍ POZNÁMKY KE TVORB VÝBROVÝCH KONSTRUKCÍ Runí úpravy dotaz V ad pípad se používá úprava znní výbrové konstrukce pímo v poli Dosud vložený dotaz. Je dležité si uvdomit, že jazyk SQL nerozlišuje pro psaní jednotlivých píkaz malá a velká písmena. Takže nap. AND a and má zcela totožný význam. Taktéž platí, že výsledná výbrová konstrukce mže být rozložena na libovolném potu ádk a pro zpehlednní lze hojn využívat mezery. Uvozování skupin podmínek do závorek V nkterých pípadech mže být dv nebo více podmínek poteba vyhodnotit jako jednu podmínku. V takovém pípad je nutno tuto skupinu uzavít do separátních závorek pro zajištní správného vyhodnocení. Mjme výše uvedený píklad s tím rozdílem, že bychom chtli pestupky, spáchané nejen v Horní Dolní, ale ješt i v erné Lhot. Požadavek tedy bude takový, že: o první podmínkou je, že pestupce obsahuje Josef o druhou ( složenou) podmínkou je to, že místo spáchání je Horní Dolní nebo erná Lhota Jak bude dotaz vypadat? ( UPPER(JMENO) LIKE "%JOSEF%") AND (UPPER(MISTO) ="HORNÍ DOLNÍ")OR(UPPER(MISTO) ="ERNÁ LHOTA") ORDER BY D_SPACHANI ASC Pokud si tento dotaz prohlédneme, zjistíme, že obsahuje vše, co potebujeme, ale pesto bude špatn vyhodnocen. Pro správnou funkci je nutno poslední dv
podmínky uzavít do závorek tak, aby se vyhodnocovaly na stejné úrovni a byly chápány jako jedna podmínka: ( UPPER(JMENO) LIKE "%JOSEF%") AND ((UPPER(MISTO) ="HORNÍ DOLNÍ")OR(UPPER(MISTO) ="ERNÁ LHOTA")) ORDER BY D_SPACHANI ASC Nyní je dotaz v poádku i logicky a bude poskytovat požadované výsledky. Používání zástupných znak v hledaném textu V praxi nastávají i speciální požadavky, které se nedají zohlednit grafickými prostedky tvorby dotazu, ale dají se aplikovat pímou editací dotazu. Jednou z takových možností je použití tzv. zástupných znak v dotazu. Mjme požadavek ( zdánliv nesmyslný) na vytvoení seznamu držitel loveckého lístku, v nmž chceme pouze ty držitele, kteí mají na tetí pozici údaje Jméno a píjmení písmeno R. Tento požadavek lze zohlednit pouze pímou úpravou SQL dotazu s použitím zástupných znak. Byli bychom schopni vytvoit dotaz vybrat všechny držitele, jejichž jméno obsahuje R : UPPER(JMENO) LIKE "%R%" Ovšem toto ešení nám nedovoluje pracovat s dalším požadavkem, kterým je striktní pozice znaku R na tetím míst od zaátku. Staí jednoduchá úprava: UPPER(JMENO) LIKE " R%" a dotaz funguje. Úprava spoívá v použití znaku podtržítko ( _) jako žolíka, tzn. že jej použijeme tolikrát, od které pozice v daném údaji chceme vyhledávat. Analogicky vyhledání všech držitel, majících ve jménu znak R na tetí a znak A na šesté pozici, by vypadalo takto: UPPER(JMENO) LIKE " R A%" Samotným zástupným znakem je i uvedený znak procento (%), které se ovšem liší od podtržítka v tom, že nahrazuje libovolný poet znak na své pozici. To znamená ( nap. v posledn uvedené konstrukci), že hledáme jméno, které má tetí znak R a šestý A a koní libovolným potem libovolných znak. Použití operátoru NOT Tento operátor umožuje negovat nkterá klíová slova. Nap. konstrukce UPPER(JMENO) LIKE "%PAVEL%" vyhledá všechny pestupce, obsahující ve jménu text Pavel, kdežto pokud použijeme ješt operátor NOT:
UPPER(JMENO) NOT LIKE "%PAVEL%" potom tato konstrukce vyhledá všechny pestupce krom tch, jejichž jméno obsahuje Pavel. Vytváení tabulkových sestav dle skupin Tabulkové sestavy na zakázku jsou speciálním pípadem uživatelských sestav a jsou velmi efektivní. Typickým píkladem jejich použití je nap. sestava pestupk dle zpsobu ešení pestupku. Výsledkem takové sestavy je tabulka jednotlivých variant ešení s uvedením potu odpovídajících pestupk. Krom toho, že pro vytvoení takové sestavy musíme mít speciáln upravenou pedlohu, je nutno výbrovou podmínku pro takovou sestavu vždy doplnit kritériem tídní práv podle té položky, která bude použita jako skupinová, tzn. v tomto pípad se jedná o položku Zpsob ešení. Tídné sestavy s tzv. falešnou podmínkou V ad pípad požaduje praxe sestavu bez výbru, tj. ze všech dat dané evidence, ale setídnou podle požadované kritéria. V tomto pípad je nutno provést malou lest a zadat tzv. falešnou podmínku. Mjme požadavek na vytvoení celkového pehledu všech dopravc v taxislužb, setídný podle data vydání stanoviska. Víme, že tvorba dotaz je koncipována tak, že musíme zadat alespo jednu výbrovou konstrukci. Protože vybírat nechceme, zadáme takovou podmínku, která za každých okolností vrátí všechny záznamy tabulky. K tomu je vhodné použít vlastnosti povinných údaj záznamu. Pokud víme, že nap. údaj IO v taxislužb musí být vždy vyplnn, zadáme podmínku vybrat všechny subjekty, kde IO je neprázdné, a máme jistotu, že tato konstrukce vrátí vždy všechny subjekty z dané evidence: ICO IS NOT NULL ORDER BY D_VYDSTAN Poslední revize: 9.6.2004