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á klauzule „SELECT“, „FROM“, „JOIN“, „WHERE“ a „ORDER BY“.
- Běžný dotaz neobsahuje žádné agregační funkce a klauzuli „GROUP BY“ nepoužívá. Výjimkou je dotaz hodnot ovládacích prvků „ComboBox“, „ListBox“ a „Radio“ (a ovládacího prvku „MultiListBox“ při změně hodnoty přímo v nahlížecí tabulce) seřazený podle sloupce, jehož hodnoty dotaz vrací – ten načte každou hodnotu jen jednou pomocí klauzule „GROUP BY“.
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“. Typ „Filtr“ se u ovládacího prvku „LiteDataGrid“ nenabízí.
- Seskupovací sloupec s desetinným číslem se seskupuje i zobrazuje zaokrouhlený na dvě desetinná místa. Na dvě desetinná místa se zaokrouhlují i desetinné hodnoty všech ostatních sloupců výsledku, například agregovaných, výrazových a kumulativních.
- 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“ – podmínky sloupce se uplatní u agregovaných sloupců a u sloupců typu „Text“,
- 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. V záhlaví nahlížecí tabulky se v názvu vyhodnotí vícejazyčný zápis, proměnné a serverové funkce. Pajpa „|“ na začátku názvu zarovná záhlaví sloupce statistické nahlížecí tabulky vlevo, na konci názvu vpravo a na obou stranách na střed, stejně jako bez pajpy. Pajpa se z názvu odstraní a rozpozná se jen u názvu delšího než dva znaky.
- 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. Sloupec skryje prázdná zobrazovaná hodnota na konci názvu („Název@@“, „Název@výraz@“); má-li zápis sloupce i podmínku, skryje sloupec zobrazovaná hodnota tvořená jen mezerami („Název@@ @>5“) nebo prázdný název spolu s prázdnou zobrazovanou hodnotou („@výraz@@>5“), kdežto zápisy „Název@@@>5“ a „@výraz@text@>5“ sloupec neskryjí. V grafu se nezobrazí ani řada s prázdným názvem.
- 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ů. Podmínka může končit textem „ASC“ nebo „DESC“ (psaným velkými, nebo malými písmeny); ten se do podmínky nepočítá a první sloupec s takovým zakončením určí výchozí řazení statistické nahlížecí tabulky, například „Počet@@@DESC“; v grafu rozhoduje poslední takový sloupec. Detailní popis řazení statistické nahlížecí tabulky je uveden v samostatné příručce Nahlížecí stránka – DataGrid.
- 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“,
- za „+1“, „-1“, „++1“ i „--1“ musí výraz buď končit, nebo pokračovat přímo znakem „+“, „-“, „#“ nebo „(“ – jinak nejde o kumulativní součet a celý zápis se vyhodnotí jako běžný výraz (například „+10“ nebo „+1 + #c0#“ s mezerou za „+1“),
- „+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“.
- V názvu hlavičky se vyhodnotí vícejazyčný zápis a proměnné.
- Počet sloučených buněk se počítá přes sloupce statistické nahlížecí tabulky v pořadí zobrazení – seskupovací sloupce, sloupec seskupený podle data a ostatní sloupce kromě sloupců typu „Filtr“, včetně skrytých sloupců. Hlavička, která přesahuje poslední sloupec, se zkrátí a další hlavičky téhož řádku se nevykreslí; sloupce, které hlavičky řádku nepokryjí, dostanou prázdnou hlavičku.
- Prázdná hlavička nad jediným sloupcem se sloučí se záhlavím tohoto sloupce, leží-li v posledním řádku hlaviček nebo přímo nad jinou takto sloučenou prázdnou hlavičkou.
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.
- V podmínkách sloupců agregačního dotazu je pravou stranou podmínky jen hodnota – sloupec ani ovládací prvek na ni vybrat nelze.
- 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. U dotazu vyhodnocovaného nad daty editačního formuláře se datový typ kontroluje i tehdy, když sloupec na pravé straně není ovládacím prvkem tohoto formuláře a porovnávají se hodnoty obou sloupců.
- Ovládací prvek „MultiListBox“ formuláře na pravé straně podmínky podporuje jen operátory „rovná se“ a „nerovná se“; s jiným operátorem skončí dotaz chybou, je-li ovládací prvek vyplněný. Je-li na levé straně jiný sloupec než „MultiListBox“, vybere operátor „rovná se“ záznamy, jejichž hodnota se shoduje s kteroukoli z hodnot ovládacího prvku, a operátor „nerovná se“ záznamy, jejichž hodnota se neshoduje s žádnou z nich.
- 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. U ovládacích prvků „DataGrid“ a „LiteDataGrid“ s agregačním dotazem se podmínka nenahrazuje a vyhodnotí se stejně jako bez zaškrtnutého pole.
- 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“.
- Podmínka s operátorem „je v dotazu“ vybere záznamy, jejichž hodnota levé strany je mezi hodnotami, které vrací vnořený dotaz (pole „Sloupec“ vnořeného dotazu); operátor „není v dotazu“ vybere záznamy, jejichž hodnota mezi nimi není. Nevrátí-li vnořený dotaz žádný záznam, „je v dotazu“ nevrátí nic a „není v dotazu“ vrátí všechny záznamy; je-li sloupcem vnořeného dotazu ovládací prvek „MultiListBox“, vybere v takovém případě (i když vnořený dotaz vrátí jen prázdné hodnoty) „je v dotazu“ záznamy s hodnotou „null“ na levé straně a „není v dotazu“ záznamy s jinou hodnotou. Je-li na levé straně ovládací prvek „MultiListBox“, vybere „je v dotazu“ záznamy, které mají uloženou alespoň jednu hodnotu shodnou s některou z hodnot vnořeného dotazu, a „není v dotazu“ záznamy bez takové hodnoty. V podmínkách sloupců agregačního dotazu a v podmínkách ovládacího prvku „AutoSum“ se tyto operátory nenabízejí.
- 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.
- U textového sloupce (kromě ovládacího prvku „MultiListBox“) propustí operátory „obsahuje“, „začíná“ a „končí“ s prázdnou proměnnou všechny záznamy kromě záznamů s hodnotou „null“ a jejich negace nevrátí nic. Operátor „obsahuje (fulltext)“ s prázdnou proměnnou nevrátí nic; netýká se to ovládacích prvků s fulltextovým indexem na databázi MS SQL Server.
- 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.
- Hodnotou podmínky může být speciální hodnota; rozpozná se jen tehdy, když tvoří celou hodnotu podmínky:
- „#random#“ – náhodné číslo od 1 do nejvyššího ID záznamu v tabulce, nejvýše však 2 147 483 646, 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; v podmínkách sloupců agregačního dotazu a v podmínkách ovládacího prvku „AutoSum“ má hodnotu 0,
- „#weekend#“ – vybere záznamy, jejichž datum připadá na sobotu nebo neděli; s operátorem „nerovná se“, „neobsahuje“, „nezačíná“ nebo „nekončí“ záznamy, jejichž datum připadá na pondělí až pátek. Ostatní operátory výsledek nemění.
- 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.
- U ovládacího prvku typu „MultiListBox“ porovnávají operátory „obsahuje“ a „neobsahuje“ celé uložené hodnoty – vyberou, resp. vyloučí záznamy, které mají uloženou hodnotu shodnou s hodnotou podmínky; část textu uvnitř uložené hodnoty nenajdou. Operátory „začíná“ a „nezačíná“ hledají uloženou hodnotu, která hodnotou podmínky začíná, operátory „končí“ a „nekončí“ uloženou hodnotu, která hodnotou podmínky končí. U těchto operátorů se hodnota podmínky na více hodnot nerozděluje – středník ani tabulátor v ní nejsou oddělovače.
- 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.
- U každého připojení se volí jeho typ: „Levý join“ (LEFT JOIN) ponechá ve výsledku i záznamy, ke kterým připojená tabulka nemá odpovídající záznam, „Ekvivalentní join“ (INNER JOIN) je z výsledku vyřadí. Detailní popis vlivu typu připojení na výsledek a výkon dotazu je uveden v samostatné příručce [[reseni-problemu-s-vykonem Řešení problémů s výkonem]].
- Podmínka připojení porovnává levou a pravou stranu rovností. Volbou spojky „a“ nebo „nebo“ lze přidat druhou podmínku připojení; její strany se zobrazí až po volbě spojky.
- Pravou stranu podmínky připojení tvoří obvykle sloupec zdrojové databázové tabulky nebo dřívějšího připojení. Může ji tvořit i hodnota – konstanta nebo proměnná –, která se převede podle datového typu sloupce na levé straně podmínky připojení; hodnota „#null#“ vede na podmínku „IS NULL“. Na databázi Firebird musí datový typ sloupce na pravé straně odpovídat datovému typu levé strany, jinak dotaz skončí chybou.
- Připojení jsou očíslovaná podle pořadí (J1, J2...). Při vložení, smazání nebo přesunu připojení se přečíslují odkazy připojení na sloupce dřívějších připojení; odkaz na smazané připojení nebo na připojení, které je nově až za odkazujícím, se vyprázdní. Sloupce „(ID)“ a „(PID)“ připojení vybrané v podmínkách, sloupcích, výběrových dialozích a dalších nastaveních se ale nepřečíslují a dál odkazují na připojení s původním pořadovým číslem – po takové změně je nutné je vybrat znovu.
- 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); není-li způsob řazení druhého sloupce vybraný, použije se způsob řazení prvního sloupce. 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“, druhý sloupec se neuplatní. Výjimkou je dotaz, jehož ovládací prvek prvního řazení byl smazán nebo změnil typ: dokud se dotaz znovu neuloží v návrháři nebo zápisem modelu, který nastaví sloupec řazení, uplatní druhý sloupec ostatní dotazy, například dotazy hodnot a nápovědy ovládacích prvků, dotazy skriptů a serverových funkcí; nahlížecí tabulka a tisk ho neuplatní.
- U běžného (neagregačního) dotazu se záznamy se shodnou hodnotou sloupců řazení dále řadí podle ID záznamu – ve směru řazení prvního sloupce, má-li první sloupec řazení datový typ „Date“, jinak vzestupně.
- Pole se nezobrazuje u vnořeného dotazu podmínky s operátorem „je v dotazu“ nebo „není v dotazu“ ani u dotazu kroků skriptu „Smazat záznam“, „Jestliže (výraz) smazat záznam“ a „Jestliže (složený výraz) smazat záznam“.
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. Převod nevytvoří v historii změn nový záznam a nesynchronizuje se. Odkazuje-li některý záznam tabulky nebo její historie změn na záznam, u kterého nelze určit hodnotu nově zvoleného sloupce (hodnota je prázdná nebo nulová, nebo záznam vyřadí připojení dotazu), převod se neprovede a uložení databázového dotazu skončí hlášením s počtem takových záznamů. Odkaz na záznam, který už neexistuje (typicky v historii změn po smazaném záznamu), převod vyprázdní; je-li ale původní sloupec sloupcem připojené tabulky, nelze neexistující záznam odlišit od záznamu vyřazeného připojením, a převod se proto neprovede. Sdílí-li stejnou hodnotu původního sloupce více záznamů, převede se odkaz podle záznamu s nejnižším ID, u kterého lze hodnotu nově zvoleného sloupce určit.
- Pole se nabízí jen u dotazů ovládacích prvků „DataGrid“ a „LiteDataGrid“ bez zaškrtnutého pole „Agregační dotaz“, ovládacích prvků „ForeignKey“, „History“, „Calendar“, „TimeTable“, „Planner“, „Map“ a „Tree“, u dotazu adresáře ovládacího prvku „Email“ a u dotazu výběrového dialogu.
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. Ovládací prvek „TimeTable“ dosazuje místo toho konec období podle zobrazení ganttova diagramu; detailní popis je uveden v samostatné příručce [[nahlizeci-stranka-timetable Nahlížecí stránka – TimeTable]]. Č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 ani ovládací prvky Kanban, TimeTable, Chart a Map uložené hodnoty anonymnímu uživateli neukládají ani neobnovují.
- Změna výchozí hodnoty „Od“ v návrháři smaže naposledy zvolenou hodnotu „od“ všem uživatelům, a proto se neobnoví ani naposledy zvolená hodnota „do“ – použijí se výchozí hodnoty, které nejbližší akce v prvku (například stránkování nebo řazení) uloží místo naposledy zvolených; změna řazení v návrháři přepíše uložené řazení všem uživatelům, kromě řazení nahlížecí tabulky v portletu. Smazání hodnoty „od“ ani přepis řazení se netýkají nahlížecích tabulek v prvcích DataSet a Email. 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.
- Číslo na začátku řádku sloupce je pořadí sloupce ve výsledku, na které odkazují proměnné „#c0#“, „#c1#“ atd. ve výrazu; čísluje se v pořadí seskupovací sloupce, sloupec seskupený podle data a ostatní sloupce, takže se číslo nemusí shodovat s pořadím řádků v návrháři. Sloupce typu „Filtr“ se číslují až za nimi, ve výsledku ale nejsou a proměnná na ně neodkazuje.
- Sloupec, který není vybraný, se uloží jako „(ID)“. Nevyplněný název sloupce se při uložení dotazu doplní – u typu „Počet“ názvem typu, u ostatních typů názvem vybraného sloupce.
- Výběr zarovnání hodnoty sloupce se zobrazuje jen u ovládacích prvků „DataGrid“ a „LiteDataGrid“; u sloupce typu „Filtr“ se skryje.
- 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 (v demo režimu a v režimu pouze pro čtení NET Genium Online se nezkopírují); zavře-li se dialog bez uložení databázového dotazu, kopie v databázi zůstanou.
- 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.
- „ONCHANGE(nazevFunkce)“ – ve stromu spustí JavaScriptovou funkci uvedeného názvu po výběru uzlu a po sbalení všech uzlů; výběr uzlu bez vnořených uzlů pak strom neobnovuje odesláním na server.
- „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]].
- Poznámky mají nejvýše 250 znaků, což omezuje i délku seznamů ID v uvedených zápisech.
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.
- U vnořeného dotazu podmínky s operátorem „je v dotazu“ nebo „není v dotazu“ se omezení počtu záznamů neuplatní – vnořený dotaz vrací hodnoty ze všech záznamů, které splňují jeho podmínky.
- U dotazu hodnot ovládacích prvků „ComboBox“, „ListBox“, „Radio“, „MultiListBox“ a „ForeignKey“, u dotazu nápovědy ovládacího prvku, u dotazu, ze kterého přebírá text ovládací prvek „RichText“ v editačním formuláři, a u dotazu výchozí hodnoty ovládacího prvku „MultiListBox“ se omezení počtu záznamů neuplatní.
- S omezením počtu záznamů se u dotazu kroků skriptu „Smazat záznam“, „Jestliže (výraz) smazat záznam“ a „Jestliže (složený výraz) smazat záznam“ smažou první záznamy podle řazení uloženého v dotazu; návrhář u tohoto dotazu řazení nezobrazuje a dotaz založený bez šablony řadí podle ID vzestupně.
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. U vnořeného dotazu podmínky s operátorem „je v dotazu“ nebo „není v dotazu“ se pole neuplatní.
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. Nezobrazuje se ani u vnořeného dotazu podmínky s operátorem „je v dotazu“ nebo „není v dotazu“.
- U dotazu hodnot ovládacích prvků „ComboBox“, „ListBox“, „Radio“ a „MultiListBox“, u dotazu výchozí hodnoty ovládacího prvku, u dotazu, ze kterého přebírají text ovládací prvky „Title“ a „RichText“, a u dotazu nápovědy ovládacího prvku se pole zobrazuje, ale externí funkce se nespustí. Detailní popis externí funkce je uveden v samostatné příručce [[externi-funkce Externí funkce]].
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. Po sobě jdoucí uložení téhož uživatele v jednom dni a uložení, které obsah nezměnilo, report sloučí do jedné změny; sloučení vypne parametr „full=true“ 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.