1. Základní informace
- Databázový dotaz definuje zdroj dat načítaných z databáze, který je následně používán v ovládacích prvcích editačních formulářů, nahlížecích stránek, portletech a ve skriptech.
- Databázový dotaz určuje, jaká množina databázových záznamů bude načtena a předána k dalšímu zpracování nebo vizualizaci.
- Databázový dotaz je samostatný konfigurovatelný objekt aplikace, který zapouzdřuje logiku výběru dat z databáze a odděluje ji od vizuálních ovládacích prvků.
- Výsledkem databázového dotazu je množina dat, která je předána ovládacím prvkům nebo skriptům k vyhodnocení či zobrazení.
1.1. Běžný dotaz
- Běžný dotaz se používá u všech ovládacích prvků, které jako zdroj dat využívají přímo databázová data.
- Běžný dotaz je výchozím typem v návrháři databázových dotazů.
- Při sestavování výsledného SQL dotazu používá pouze klauzule „SELECT“, „FROM“, „JOIN“, „WHERE“ a „ORDER BY“.
- Běžný dotaz nepoužívá klauzuli „GROUP BY“ a neobsahuje žádné agregační funkce.
1.2. Agregační dotaz
- Agregační dotaz se používá u nahlížecích tabulek a grafů, které zobrazují agregovaná data.
- Agregační dotaz pracuje s klauzulí „GROUP BY“ a agregačními funkcemi nad databázovými sloupci.
- Agregační dotaz je definován v návrháři databázových dotazů:
- zaškrtnutím volby „Agregační dotaz“,
- seznamem seskupovacích sloupců, které se objeví ve výsledném SQL dotazu v klauzuli „GROUP BY“.
- Jako agregační se dotaz sestaví, jen pokud obsahuje alespoň jeden agregovaný, informativní nebo výrazový sloupec; se samotnými seskupovacími sloupci se načte jako běžný dotaz.
- Agregační dotaz se seskupováním podle data vynechá záznamy, které mají datum nevyplněné.
- Sloupec typu „Text“ zobrazí ve skupině nejmenší hodnotu, je-li dotaz řazený vzestupně, jinak největší.
- Typ sloupce „Text“ se nabízí jen u ovládacích prvků „DataGrid“ a „LiteDataGrid“, typ „Výraz, formát dle“ jen u ovládacích prvků „DataGrid“, „LiteDataGrid“ a „Chart“.
- Seskupovací sloupec s desetinným číslem se seskupuje i zobrazuje zaokrouhlený na dvě desetinná místa.
- Agregovaný sloupec nad sloupcem, který nemá číselný datový typ, se vyhodnotí nad sloupcem „ID“. Výjimkou jsou funkce „MAX“ a „MIN“ nad datem a ovládací prvek „TextBox“ s datovým typem času.
- Dotaz může obsahovat jen jeden sloupec seskupený podle data (podle hodiny ve dni, hodiny, hodiny a minuty, dne, týdne, měsíce, kvartálu nebo roku); uložení dotazu s více takovými sloupci skončí chybovým hlášením.
- Podporované způsoby seskupování zahrnují:
- běžné seskupení podle sloupce („GROUP BY ng_“),
- seskupení podle hodiny ve dni,
- seskupení podle hodiny,
- seskupení podle hodiny a minuty,
- seskupení podle dne,
- seskupení podle týdne – záznamy se seskupí po dnech a dny téhož týdne se sloučí až po načtení dat: hodnoty „Počet“ a „Suma“ se sečtou (stejně jako sloupce, jejichž výraz končí textem „+sum“, a výrazy s funkcí „ngef“, „SQL“ nebo „SQLTABLE“), „Průměr“ se spočítá jako průměr denních průměrů bez ohledu na počet záznamů v jednotlivých dnech, „MAX“ a „MIN“ se vyberou z denních hodnot (kromě sloupců s datem) a ostatní sloupce, včetně sloupců s datem a sloupců typu „Text“, ponechají hodnotu prvního ze sloučených dnů; ostatní výrazy se spočítají až ze sloučených hodnot,
- seskupení podle měsíce,
- seskupení podle kvartálu,
- seskupení podle roku.
- Agregační dotaz dále obsahuje:
- seznam agregovaných sloupců, které se ve výsledném SQL dotazu objeví ve spojení s funkcemi „COUNT“, „SUM“, „AVG“, „MAX“ a „MIN“, s možností použití podmíněné logiky pomocí „CASE WHEN“,
- seznam informativních sloupců, které se ve výsledném SQL dotazu objeví jako konstanty nebo vypočtené hodnoty a jsou následně vyhodnoceny lexikálním analyzátorem,
- seznam sloupců, podle kterých je možné filtrovat data v nahlížecí tabulce nebo grafu,
- seznam hlaviček pro seskupování sloupců v nahlížecí tabulce,
- seznam barev použitých pro vykreslení jednotlivých datových řad v grafu.
- Jednotlivé sloupce agregačního dotazu používají následující syntaxi názvu:
„název@matematický_výraz@zobrazovaná_hodnota@podmínka“.
- Název určuje popisek sloupce zobrazovaný v nahlížecí tabulce nebo grafu.
- Matematický výraz je volitelný a používá se u sloupců typu „Výraz, formát dle“.
- Zobrazovaná hodnota je volitelná a umožňuje nahradit vypočtenou hodnotu textem nebo skrýt celý sloupec pomocí hodnoty „@@“.
- Podmínka je volitelná a umožňuje omezit zobrazení řádků výsledné množiny dat. Podmínka filtruje celé řádky výsledku (například „>5“ ponechá jen řádky, v nichž je hodnota sloupce větší než 5) a součty v zápatí se počítají jen ze zobrazených řádků.
- Příklady názvů sloupců:
- „Součet prvního a druhého sloupce@#c0#+#c1#“,
- „Součet prvního a druhého sloupce@#c0#+#c1#@Skrytá hodnota“,
- „Kumulativní součet shora@+1“,
- „Kumulativní součet zdola@-1“,
- „Kumulativní součet prvního a druhého sloupce@+1#c0# + #c1#“,
- „Součet hodnot větších než 5@@@>5“,
- „Sloupec@+sum“,
- „Sloupec@-sum“.
- Speciální hodnoty výrazu:
- „+1“ na začátku výrazu – kumulativní součet shora: hodnota každého řádku se přičte k součtu všech předchozích řádků; při změně hodnoty seskupovacího sloupce začíná kumulace znovu,
- „-1“ na začátku výrazu – kumulativní součet zdola,
- „++1“ a „--1“ na začátku výrazu – kumulativní součet, který navíc započítá hodnoty z období před začátkem časového úseku; započítají se jen tehdy, když je časový úsek nastavený podle sloupce seskupeného podle data a jsou vyplněné obě hodnoty „od“ i „do“, nebo když uživatel filtruje podle sloupce seskupeného podle data a dotaz nemá žádný další sloupec typu „Seskupit podle“,
- „+sum“ na konci výrazu – hodnota sloupce se sčítá do řádku součtů,
- „-sum“ na konci výrazu – řádek součtů zůstane u sloupce prázdný.
- Proměnné „#c0#“, „#c1#“ atd. ve výrazu odkazují na sloupce výsledku v tomto pořadí: seskupovací sloupce, sloupec seskupený podle data a pak ostatní sloupce. Výraz může použít hodnotu jiného výrazového sloupce, jen pokud je tento sloupec uveden dříve; chyba ve výrazu dá hodnotu 0.
- Hlavičky agregačního dotazu používají syntaxi:
„počet_sloučených_buněk@název_hlavičky“.
- Příklady hlaviček:
- 1. řádek: „5@X;1@Y“,
- 2. řádek: „2@A;3@B;1@C“.
1.3. Vnořené záznamy
- Vnořený záznam je databázový záznam přidružený ke svému rodičovskému záznamu pomocí cizích klíčů „pid“ a „pform“.
- Tyto cizí klíče jsou součástí každé databázové tabulky a určují ID rodičovského záznamu a ID editačního formuláře, ve kterém se rodičovský záznam nachází.
- Odkazy pomocí „pid“ a „pform“ mohou směřovat jak do jiné databázové tabulky, tak i do stejné tabulky (rekurzivní struktury, např. ovládací prvek „Tree“).
- Hodnoty „pid“ a „pform“ jsou vyplňovány automaticky podle kontextu, ze kterého byl nový záznam vytvořen.
- Při vytvoření záznamu z nahlížecí stránky mají hodnotu „0“.
- Při vytvoření záznamu z jiného databázového záznamu jsou nastaveny podle ID rodiče a jeho formuláře.
- Použití sloupce „pform“ je obvykle minimální a uplatňuje se zejména v případech, kdy jedna tabulka slouží více rodičovským formulářům.
- Sloupce „pid“ a „pform“ nejsou ve výchozím stavu indexované. Při jejich aktivním používání je nutné indexování zapnout v nastavení editačního formuláře.
- Nahlížecí tabulky v editačních formulářích obsahují volbu „Zobrazit pouze vnořené záznamy“, která automaticky doplňuje podmínku „PID = ID aktuálního záznamu“. Hodnota „pform“ se přitom netestuje a u nového, dosud neuloženého záznamu tabulka nezobrazí nic.
- Nahlížecí tabulky na nahlížecích stránkách obsahují volbu „Skrýt vnořené záznamy“, která automaticky doplňuje podmínku „PID = 0“.
1.4. Omezující podmínky dotazu
- Databázový dotaz může obsahovat libovolné množství omezujících podmínek, které následují za klauzulí „WHERE“.
- Jednotlivé podmínky mohou být kombinovány pomocí logických operátorů „AND“ a „OR“ a seskupovány pomocí levých a pravých závorek.
- Výsledná podmínka v jazyce SQL je sestavena automaticky na základě seznamu podmínek definovaných v grafickém návrháři databázových dotazů.
- Pravou stranou podmínky může být místo hodnoty i sloupec. Vyhodnocuje-li se dotaz nad daty editačního formuláře (dotaz ovládacího prvku nebo skriptu formuláře) a sloupec na pravé straně je ovládacím prvkem tohoto formuláře, nahradí se aktuální hodnotou ovládacího prvku; jinak se porovnají hodnoty obou sloupců v každém záznamu.
- Datový typ ovládacího prvku musí odpovídat datovému typu levé strany podmínky (výjimkou je ovládací prvek typu „File“ nebo „Image“ na levé straně s operátorem „obsahuje“ nebo „obsahuje (fulltext)“ a textový ovládací prvek na pravé straně), jinak dotaz skončí chybou.
- Má-li ovládací prvek hodnotu „null“, porovná se levá strana podmínky jako „není definováno“, u operátorů „nerovná se“, „neobsahuje“, „nezačíná“ a „nekončí“ jako „je definováno“.
- Je-li u ovládacího prvku „DataGrid“, „LiteDataGrid“ nebo „Tree“ editačního formuláře, který dotaz používá, zaškrtnuté pole „Zobrazit pouze výsledky hledání“, nahradí se podmínka s hodnotou „null“ nebo s prázdným textem (u cizího klíče i s hodnotou „0“, u ovládacího prvku „MultiListBox“ jen s hodnotou „null“) vždy splněnou podmínkou, a to s jakýmkoli operátorem. V podmínkách spojených spojkou „nebo“ proto taková podmínka propustí všechny záznamy.
- Podmínka testující (ne)vyplněnost hodnoty musí u sloupců datového typu „String“ počítat s oběma podobami prázdné hodnoty – s textovým řetězcem nulové délky i s databázovou hodnotou „null“. Samotný operátor „není definováno“ zachytí pouze hodnotu „null“ – prázdný řetězec nezachytí.
- Taková podmínka je složená: levá_strana rovná se „“ nebo levá_strana není definováno. V jazyce SQL: levá_strana = '' OR levá_strana IS NULL.
- U ovládacích prvků typu „ForeignKey“, „File“ a „Image“ analogicky: levá_strana rovná se „0“ nebo levá_strana není definováno. V jazyce SQL: levá_strana = 0 OR levá_strana IS NULL.
- Detailní popis testu na (ne)vyplněnou hodnotu je uveden v samostatné příručce Práce s proměnnými ve skriptu.
- Operátory „nerovná se“, „neobsahuje“, „nezačíná“ a „nekončí“ nevrátí záznamy, které mají ve sloupci hodnotu „null“. Podmínka „není v dotazu“ nevrátí nic, pokud vnořený dotaz vrací hodnotu „null“.
- Je-li hodnotou podmínky proměnná a proměnná je prázdná, podmínka se nevynechá, ale porovná sloupec s prázdnou hodnotou – u textu s prázdným řetězcem, u čísla s nulou; podmínka na datum v takovém případě nevrátí nic.
- Význam operátorů závisí na datovém typu levé strany podmínky:
- U data porovnávaného s hodnotou bez času (čas 00:00) vyberou operátory „rovná se“, „obsahuje“, „začíná“ a „končí“ záznamy celého dne a jejich negace záznamy mimo tento den; operátor „větší“ vybere záznamy od následujícího dne a operátor „menší nebo rovno“ záznamy do konce zadaného dne. Hodnota s časem, proměnné „#now#“ a „#now2#“ a hodnota s funkcí „ADDMINUTES“ nebo „ADDHOURS“ se porovnají přesně.
- U čísel se operátory „obsahuje“, „začíná“ a „končí“ vyhodnotí jako „rovná se“ a jejich negace jako „nerovná se“.
- U ovládacích prvků typu „File“ a „Image“ hledají operátory „obsahuje“ a „obsahuje (fulltext)“ v názvech souborů příloh.
- Hodnota podmínky může obsahovat speciální hodnoty:
- „#random#“ – náhodné číslo od 1 do nejvyššího ID záznamu v tabulce, typicky v podmínce „ID = #random#“; číslo nemusí odpovídat existujícímu záznamu,
- „#dayrandom#“ – totéž, ale číslo se mění jednou za den a je stejné pro všechny uživatele,
- „#weekend#“ – vybere záznamy, jejichž datum připadá na sobotu nebo neděli.
- V podmínkách dotazu lze používat následující rozšířené zápisy, které jsou návrhářem automaticky interpretovány do odpovídající SQL syntaxe:
- Datové typy „Integer“ a „Long“ umožňují u operátorů „rovná se“ a „nerovná se“ zápis ve tvaru „levá_strana = 1;2;3“. Tento zápis je interpretován jako „levá_strana IN (1, 2, 3)“, u operátoru „nerovná se“ jako „levá_strana NOT IN (1, 2, 3)“.
- Ovládací prvky typu „TextBox“, „ComboBox“, „ListBox“ a „Radio“ s datovým typem „String“ umožňují u operátorů „rovná se“ a „nerovná se“ zápis ve tvaru „levá_strana = (array)A;B;C“. Tento zápis je interpretován jako „levá_strana IN ('A', 'B', 'C')“, u operátoru „nerovná se“ jako „levá_strana NOT IN ('A', 'B', 'C')“.
- Pokud je na levé straně podmínky s operátorem „rovná se“ nebo „nerovná se“ použit ovládací prvek typu „MultiListBox“ (hodnoty oddělené tabulátorem) a na pravé straně je textová konstanta, je podmínka interpretována jako:
- „JoinText(levá_strana, pravá_strana)“ u databáze Firebird,
- „dbo.JoinNtext(levá_strana, pravá_strana)“ u databáze Microsoft SQL Server.
- Výsledný SQL dotaz vyhodnotí všechny záznamy, které mají ve sloupci typu „MultiListBox“ uloženou alespoň jednu hodnotu shodnou s textovou konstantou na pravé straně podmínky. Textová konstanta může obsahovat i více hodnot oddělených středníkem nebo tabulátorem; vyhodnotí se pak záznamy, které mají uloženou alespoň jednu z nich.
- Pokud je na levé i pravé straně podmínky použit ovládací prvek typu „MultiListBox“, je podmínka interpretována stejným způsobem pomocí funkcí „JoinText“ (Firebird) nebo „dbo.JoinNtext“ (MSSQL). Výsledný SQL dotaz vyhodnotí všechny záznamy, u nichž existuje alespoň jedna shodná hodnota v obou sloupcích.
- Ovládací prvek typu „TextBox“ s datovým typem „String“ dále umožňuje u operátorů „rovná se“ a „nerovná se“ zápis ve tvaru „levá_strana = (mlb)A#tab#B#tab#C“; hodnoty lze oddělit i středníkem („(mlb)A;B;C“). Tento zápis je interpretován jako:
- „JoinText2(levá_strana, 'A B C')“ u databáze Firebird,
- „dbo.JoinNtext(levá_strana, 'A B C')“ u databáze Microsoft SQL Server.
- Výsledný SQL dotaz vyhodnotí všechny záznamy, které mají ve sloupci s tabulátorem oddělenými hodnotami uloženou alespoň jednu hodnotu obsaženou v textové konstantě na pravé straně podmínky.
- Podmínku dotazu je možné definovat také přímo pomocí SQL syntaxe.
- V takovém případě může být levá strana podmínky včetně operátoru libovolná.
- Pravá strana podmínky musí vždy začínat prefixem „OK#crlf#“, za kterým následuje vlastní SQL podmínka.
- Přímá SQL podmínka vznikne jen tehdy, když hodnota podmínky začíná prefixem „OK#crlf#“, nebo když začíná voláním funkce (například „ngef(...)“ nebo „EQUALS(...)“), jejíž výsledek začíná textem „OK“ a zalomením řádku. Samotná hodnota dosazená z proměnné (například „#ng_poznamka#“ nebo „#A#“) se vloží jako literál, i když začíná textem „OK“ a zalomením řádku. Výsledek funkce se ale posuzuje jako celek – vrací-li funkce hodnotu proměnné beze změny (například „EQUALS(#ng_poznamka#"0=0,#ng_poznamka#)“), je nutné proměnnou obalit funkcí „FORMATSTRINGSQL“, „FORMATINTSQL“ nebo „FORMATDATESQL“.
- Proměnné použité uvnitř přímé SQL podmínky se neescapují – hodnotu, kterou může vyplnit uživatel, je nutné obalit funkcí „FORMATSTRINGSQL“, „FORMATINTSQL“ nebo „FORMATDATESQL“.
- Ve složeném filtru uživatele se přímá SQL podmínka nepoužije.
- Příklady přímé SQL definice podmínky:
- OK#crlf#0=0
- OK#crlf#0=1
- OK#crlf#EQUALS(#ng_tb#"0=0,ng_tb = FORMATSTRINGSQL(#ng_tb#))
- OK#crlf#EQUALS(#ng_tb#"0=1,ng_tb = FORMATSTRINGSQL(#ng_tb#))
1.5. Připojení (joiny)
- Databázový dotaz může obsahovat libovolné množství připojení, která jsou sestavená pomocí klauzule „JOIN“.
- Výsledný tvar připojení v jazyce SQL je sestaven automaticky podle seznamu připojení nastavených v grafickém návrháři.
- Připojení může být definováno také pomocí SQL syntaxe. Levá strana podmínky připojení může být libovolná, pravá strana podmínky připojení musí začínat slovem „OK#crlf#“, a za ní musí následovat znění připojení pomocí jazyka SQL, například:
- OK#crlf#INNER JOIN ng_abc J1 ON J1.pid = ng_formular.id
- Definice připojení musí respektovat používané aliasy, takže první připojení se musí jmenovat J1, druhé J2 atd.
- Definice připojení musí respektovat název zdrojové databázové tabulky.
- Zdrojovou databázovou tabulku dotazu připojit nelze a každou databázovou tabulku je možné připojit pouze jednou; uložení dotazu s takovým připojením skončí chybovým hlášením. Tlačítko „Zobrazit dotaz“ tyto kontroly neprovádí.
- Přímé SQL v první podmínce připojení nahradí celé připojení a druhá podmínka připojení se nevyhodnotí. Přímé SQL ve druhé podmínce nahradí jen tuto podmínku a připojí se za spojku „AND“ nebo „OR“ za první podmínku.
- Stejně jako u podmínky vznikne přímé SQL připojení jen z hodnoty, která začíná prefixem „OK#crlf#“, nebo z výsledku funkce, kterou hodnota začíná; samotná hodnota dosazená z proměnné se vloží jako literál. Proměnnou, kterou funkce vrací beze změny, je nutné obalit funkcí „FORMATSTRINGSQL“, „FORMATINTSQL“ nebo „FORMATDATESQL“.
2. Seznam záložek v dialogu nastavení databázového dotazu
- Obecné – Nastavení obecných vlastností
- Podmínky – Definice omezujících podmínek
- Připojení – Definice připojení – joinů; u ovládacích prvků „History“ a „Email“ se záložka nezobrazuje
- Sloupce – Definice sloupců agregační tabulky; jen u agregačního dotazu ovládacích prvků „DataGrid“, „LiteDataGrid“ a „Chart“
- Filtry – Definice sloupců typu „Filtr“; zobrazuje se místo záložky „Sloupce“ u ovládacích prvků „Calendar“, „TimeTable“, „Planner“, „Kanban“, „Map“ a „Tree“
- Hlavičky – Definice hlaviček agregační tabulky
- Barvy – Definice barev grafu
- Ostatní – Nastavení ostatních vlastností
2.1. Záložka „Obecné“
2.1.1. Databázová tabulka
- Výběr editačního formuláře, z jehož databázové tabulky budou načteny záznamy uložené v databázi.
- Změnou databázové tabulky u uloženého dotazu vznikne nový databázový dotaz; původní zůstane v databázi beze změny.
- U ovládacích prvků, které z dotazu načítají hodnotu (například „ComboBox“, „ForeignKey“ nebo krok skriptu), se pod databázovou tabulkou zobrazuje pole „Sloupec“ – výběr sloupce, jehož hodnoty dotaz vrací.
2.1.2. Možnosti
- Agregační dotaz – Zaškrtnutí tohoto pole určuje, zda má být výsledkem dotazu agregovaná množina dat sestavená pomocí grupování.
2.1.3. Setřídit podle
- Výběr sloupce, podle kterého budou databázové záznamy seřazeny, včetně způsobu řazení – vzestupně (ASC) nebo sestupně (DESC).
- Volitelný výběr druhého sloupce, podle kterého budou databázové záznamy seřazeny, včetně způsobu řazení – vzestupně (ASC) nebo sestupně (DESC). Druhý sloupec se uplatní jen tehdy, když je vybraný i první sloupec řazení a druhým sloupcem není „ID“. Je-li prvním sloupcem řazení „ID“, nahlížecí tabulka a tisk druhý sloupec neuplatní, dotazy hodnot ovládacích prvků a dotazy skriptů ano.
2.1.4. Barva podle
- Výběr sloupce, který určuje, zda a podle jakého sloupce se bude v nahlížecí tabulce zobrazovat u každého záznamu barevný obdélníček.
- Volba „Obarvit text“ obarví barvou záznamu navíc i jeho text; barevný obdélníček zůstává zobrazen.
- U ovládacího prvku „ForeignKey“ se pole jmenuje „Hodnota uložená v databázi“ a určuje sloupec, jehož hodnota se ukládá do cizího klíče místo ID záznamu. Při změně tohoto pole u existujícího dotazu nabídne dialog převod již uložených hodnot, který přepíše hodnoty cizího klíče v celé tabulce i v její historii změn.
2.1.5. Časový úsek podle
- Výběr sloupce, který určuje, zda a podle jakého sloupce se bude nad nahlížecí tabulkou zobrazovat filtr pro výběr časového úseku „od-do“.
- U ovládacího prvku „History“ se filtr „od-do“ zobrazuje vždy; není-li pole vyplněno, filtruje podle data změny.
- Pole se nabízí jen u dotazů ovládacích prvků „DataGrid“, „History“, „TimeTable“, „Kanban“, „Chart“ a „Map“ a u dotazu výběrového dialogu.
- Časový úsek se uplatní v ovládacích prvcích se zobrazeným filtrem „od-do“ a ve výběrovém dialogu. V portletu, v ovládacím prvku „LiteDataGrid“ a ve skriptu se neuplatní vůbec – dotaz tam načte záznamy bez omezení časovým úsekem.
2.1.6. Od
- Výchozí hodnota začátku časového úseku, která se předvyplní do filtru „od-do“ nad nahlížecí tabulkou.
- Pokud pole není vyplněno, použije se výchozí hodnota „měsíc nazpět“, tedy dnešní datum mínus jeden měsíc. Ovládací prvky „Kanban“ a „TimeTable“ dosazují místo toho první den aktuálního měsíce. Časový úsek je tedy omezen i tehdy, když pole zůstane prázdné – prázdná hodnota neznamená neomezené načítání dat.
- Hodnotu je možné zadat také pomocí proměnných, například „#today#“. Proměnné jsou vyhodnoceny při otevření ovládacího prvku.
2.1.7. Do
- Výchozí hodnota konce časového úseku, která se předvyplní do filtru „od-do“ nad nahlížecí tabulkou.
- Pokud pole není vyplněno, použije se výchozí hodnota „poslední den v roce“, tedy 31. prosinec aktuálního roku. Časový úsek je tedy omezen i tehdy, když pole zůstane prázdné – prázdná hodnota neznamená neomezené načítání dat.
- Hodnotu je možné zadat také pomocí proměnných, například „#today#“. Proměnné jsou vyhodnoceny při otevření ovládacího prvku.
2.1.8. Možnosti
- Hodnoty „od“ a „do“, které si uživatel ve filtru naposledy zvolil, jsou evidovány samostatně pro každého uživatele a každý databázový dotaz; ovládací prvek Chart je eviduje pro každý ovládací prvek. Následující dvě pole určují, zda se tyto uložené hodnoty při dalším otevření ovládacího prvku obnoví, nebo zda se použije výchozí hodnota.
- Vyplnit výchozí hodnotu „Od“ při každém otevření ovládacího prvku – Zaškrtnutí tohoto pole určuje, že se naposledy zvolená hodnota „od“ neobnovuje a při každém otevření ovládacího prvku se použije výchozí hodnota. Ve výchozím nastavení není toto pole zaškrtnuté, takže se naposledy zvolená hodnota obnovuje.
- Vyplnit výchozí hodnotu „Do“ pouze při prvním otevření ovládacího prvku – Zaškrtnutí tohoto pole určuje, že se naposledy zvolená hodnota „do“ obnovuje a výchozí hodnota se použije pouze při prvním otevření ovládacího prvku. Ve výchozím nastavení není toto pole zaškrtnuté, takže se výchozí hodnota použije při každém otevření ovládacího prvku.
- Nahlížecí tabulka obnovuje uložené hodnoty pouze na nahlížecí stránce, nikoli v editačním formuláři; ovládací prvky Kanban, TimeTable, Chart a Map je obnovují i v editačním formuláři. Nahlížecí tabulka, Kanban a TimeTable uložené hodnoty anonymnímu uživateli neukládají ani neobnovují; Chart a Map je ukládají pod účtem anonymního uživatele, společně pro všechny anonymní návštěvníky.
- Změna výchozí hodnoty „Od“ v návrháři smaže naposledy zvolenou hodnotu „od“ všem uživatelům; změna řazení v návrháři přepíše uložené řazení všem uživatelům. U agregačního dotazu, který obsahuje alespoň jeden agregovaný, informativní nebo výrazový sloupec, se uložené řazení nepřepisuje.
2.1.9. Zobrazit dotaz
- Tlačítko „Zobrazit dotaz“ – Zobrazí část databázového dotazu sestavenou z neuložených hodnot dialogu: databázovou tabulku, připojení a podmínky („SELECT * FROM ... JOIN ... WHERE ...“). Vybírané sloupce, řazení, omezení počtu záznamů ani časový úsek neobsahuje.
2.2. Záložka „Podmínky“
- Definice omezujících podmínek dotazu, které následují za klauzulí „WHERE“ databázového dotazu.
2.2.1. Přidat podmínku
- Pomocí tlačítka „Přidat podmínku“ je možné přidat novou podmínku dotazu.
2.3. Záložka „Připojení“
- Definice připojení, které jsou sestaveny pomocí klauzule „JOIN“ databázového dotazu.
2.3.1. Přidat připojení
- Pomocí tlačítka „Přidat připojení“ je možné přidat nové připojení dotazu.
2.3.2. Aktualizovat
- Pomocí tlačítka „Aktualizovat“ se aktualizuje seznam sloupců na levé i pravé straně podmínky na základě vybrané přijoinované tabulky.
2.4. Záložka „Sloupce“
- Pouze při zaškrtnutém poli „Agregační dotaz“ u ovládacího prvku „DataGrid“, „LiteDataGrid“ nebo „Chart“
- Definice sloupců výsledné agregační tabulky.
- U ovládacích prvků „Calendar“, „TimeTable“, „Planner“, „Kanban“, „Map“ a „Tree“ se místo této záložky zobrazuje záložka „Filtry“ s tlačítkem „Přidat filtr“, na které se definují sloupce typu „Filtr“.
2.4.1. Přidat sloupec
- Pomocí tlačítka „Přidat sloupec“ je možné přidat nový sloupec výsledné agregační tabulky.
2.5. Záložka „Hlavičky“
- Pouze při zaškrtnutém poli „Agregační dotaz“ u ovládacího prvku „DataGrid“ nebo „LiteDataGrid“
- Definice hlaviček výsledné agregační tabulky.
2.5.1. Přidat hlavičku
- Pomocí tlačítka „Přidat hlavičku“ je možné přidat novou hlavičku výsledné agregační tabulky.
2.5.2. ?
- Pomocí tlačítka „?“ je možné zobrazit nápovědu k syntaxi hlaviček.
2.6. Záložka „Barvy“
- Pouze u ovládacího prvku „Chart“
- Definice barev, které budou použity na vykreslení jednotlivých sloupců grafu.
2.6.1. Přidat barvu
- Pomocí tlačítka „Přidat barvu“ je možné přidat novou barvu grafu.
2.6.2. Výchozí
- Pomocí tlačítka „Výchozí“ se barvy grafu nahradí barvami ze seznamu barev v Nastavení NET Genia. Tlačítko se zobrazuje jen tehdy, když seznam barev není prázdný. Detailní popis seznamu barev je uveden v samostatné příručce [[nastaveni-netgenia#barvy Nastavení NET Genia]].
2.7. Záložka „Ostatní“
2.7.1. Název šablony
- Název šablony slouží pro pojmenování databázového dotazu s možností jeho zkopírování při vytváření dalších databázových dotazů se stejnou zdrojovou databázovou tabulkou.
- Při vytváření nového databázového dotazu jsou všechny dostupné šablony k dispozici v rozbalovacím seznamu šablon vedle tlačítek dialogu. Po vybrání šablony se parametry databázového dotazu předvyplní údaji ze zvolené šablony, včetně zdrojové databázové tabulky; nepřebírá se omezení počtu záznamů, externí funkce ani poznámky. Vnořené dotazy šablony se zkopírují do databáze hned při výběru šablony.
- Seznam všech databázových dotazů, které jsou označené jako šablony, je možné zobrazit pomocí reportu. Detailní popis reportů je uveden v samostatné příručce [[reporty Reporty]].
2.7.2. Poznámky
- Poznámky slouží pro zadání libovolného textu určeného pro správce aplikace.
- Mezi zápisy v poznámkách, které navíc ovlivňují ovládací prvky používající databázový dotaz, patří:
- „GRIDCOLUMNS(id1, id2, ...)“ a „DETAILCOLUMNS(id1, id2, ...)“ – omezí nabídku sloupců nahlížecí tabulky, resp. sloupců detailů v dialogu individuálního nastavení nahlížecí tabulky na ovládací prvky s uvedenými ID oddělenými čárkou nebo středníkem.
- „COLORROWSBYCOLUMN(ng_sloupec)“ – střídá barvu pozadí řádků nahlížecí tabulky (DataGrid, LiteDataGrid) vždy, když se hodnota uvedeného sloupce liší od hodnoty v předchozím řádku.
- „DENYLINKS()“ – vypíše e-mailové adresy, webové adresy a odkazy ve sloupcích nahlížecí tabulky (DataGrid, LiteDataGrid) jako prostý text, bez odkazu.
- „ONLOAD(nazevFunkce)“ – po načtení nahlížecí tabulky nebo stromu spustí JavaScriptovou funkci uvedeného názvu.
- „PRINTCOLUMNS(id1, id2, ...)“ – u běžného (neagregačního) dotazu omezí sloupce načítané při tisku do tiskové šablony na ovládací prvky s uvedenými ID. Detailní popis je uveden v samostatné příručce [[serverove-funkce Serverové funkce]].
2.7.3. Načíst pouze prvních
- Omezení maximálního počtu záznamů načtených databázovým dotazem resp. ekvivalent SQL příkazu TOP() nebo FIRST().
- U agregačního dotazu se v SQL neuplatní – omezí jen počet zobrazených nebo exportovaných řádků. Řádek součtů v nahlížecí tabulce i v exportu přitom zahrnuje i řádky nad tento limit.
- Při současném odstranění duplicitních záznamů se duplicity odstraňují až z načtených řádků, takže výsledek může mít méně záznamů, než je nastavený počet.
2.7.4. Odstranit záznamy s duplicitním
- Výběr sloupce, podle kterého budou vyhodnoceny duplicitní řádky v načtené množině dat, a tyto řádky budou následně z této množiny odstraněny.
- Duplicitní řádky se odstraňují po načtení dat z databáze; ponechá se první výskyt v aktuálním řazení a porovnání rozlišuje velikost písmen. Řádky s hodnotou „null“ se neodstraňují. U agregačního dotazu se pole nezobrazuje.
2.7.5. Možnosti
- ngef(NETGenium.DataTable)
- Výsledkem databázového dotazu je vždy načtená množina dat z databáze, dočasně uložená v objektu typu „DataTable“. Tato množina dat je následně předána jednotlivým ovládacím prvkům za účelem jejího vyhodnocení nebo vizualizace.
- Zaškrtnutí tohoto pole určuje, zda má být před samotným předáním objektu „DataTable“ ovládacímu prvku spuštěna externí funkce, která má možnost měnit vlastnosti tohoto objektu – přidávat řádky, měnit hodnoty v jednotlivých sloupcích, případně řádky odstraňovat.
- V cloudové variantě NET Genium Online se toto pole nezobrazuje — externí funkce v cloudu nejsou k dispozici.
2.7.6. Logování
- Pomocí tlačítka „Logování“ se zobrazí detailní report s jednotlivými záznamy volání databázových dotazů a údaji o
- datumu a času spuštění dotazu,
- uživateli, který dotaz spustil,
- času zpracování dotazu v milisekundách,
- počtu vrácených záznamů,
- spotřebě paměti, je-li v nastavení NET Genia zapnuto měření spotřeby paměti, a
- konkrétním SQL dotazu.
- Počet záznamů je ve výchozím nastavení omezen na 100 záznamů. Tento počet je možné ručně zvýšit nebo snížit změnou parametru „maxrows“ v URL reportu.
- Report obsahuje jen volání zaznamenaná v době, kdy bylo zapnuté logování do databáze (volba „Do databáze“ nebo „Do databáze a na disk“). Detailní popis logování je uveden v samostatné příručce [[nastaveni-netgenia#logovani-vykonu Nastavení NET Genia]].
2.7.7. Sledování změn
- Tlačítko „Sledování změn“ – Zobrazení detailního reportu s historií změn definice databázového dotazu: kdo a kdy dotaz v návrháři uložil a jak dotaz v tu chvíli vypadal. Do historie se zapíše jen uložení, které změní textový popis dotazu. Report ve výchozím stavu zobrazí posledních 10 změn; tento počet je možné změnit parametrem „maxrows“ v URL reportu. Změny provedené přes MCP server nebo importem aplikace se do historie nezapisují.
2.8. Tlačítka „Uložit“, „Smazat“ a „Zavřít“
- Tlačítko „Uložit“ – Uložení změn v nastavení databázového dotazu. Úprava existujícího dotazu se projeví okamžitě, i když se nastavení nadřazeného ovládacího prvku zavře bez uložení. Nový dotaz a dotaz, u kterého se změnila databázová tabulka, se uloží jako nový databázový dotaz, který se k ovládacímu prvku připojí až uložením nastavení nadřazeného ovládacího prvku. Tlačítko je neaktivní, pokud administrátor nesmí měnit aplikaci, do které dotaz patří (omezení administrátorského režimu aplikační skupiny).
- Tlačítko „Smazat“ – Odpojení databázového dotazu od ovládacího prvku. Záznam dotazu v databázi zůstane zachován.
- Tlačítko „Zavřít“ – Zavření dialogu s nastavením databázového dotazu bez uložení změn.