Odpovědi na otázky ze shrnutí 9. dílu (vylepšujeme formuláře)
-
Otevřete některý formulář v návrhovém zobrazení (neboli v režimu úprav) a zobrazte panel nástrojů Ovládací
prvky formuláře a pomocí jedné z jeho ikon také druhý panel Více ovládacích prvků. Podle ikon panelů vyjmenujte
některé ovládací prvky pro rozšíření možností formuláře.
První panel nabízí např. tyto ovládací prvky: zatržítko, textové pole, tlačítko, přepínač, pole se seznamem, kombinované pole (roletka), popisek, spouštěč průvodců. Druhý panel např. prvek pro snadné vložení data nebo času, pro vložení tabulky, navigačního panelu ad. -
Vysvětlete stručně účel ikon Režim návrhu zap/vyp, Ovládací prvek a Průvodci
zap/vyp z panelu nástrojů Ovládací prvky formuláře. Uveďte aspoň jeden další způsob, jak otevřít okno
Vlastnosti pro vybraný ovládací prvek.
Ikona Režim návrhu zap/vyp přepíná formulář mezi režimem úprav (návrhu) a běžné práce s daty. Ikona Ovládací prvek zobrazí dialogové okno Vlastnosti vybraného ovládacího prvku. Obsahuje obvykle tři záložky: Obecné, Data a Události. Dialogové okno Vlastnosti ale otevřete nejrychleji jednoduše poklepáním na prvek. Ikona Průvodci zap/vyp umožní, že se po vložení seznamu nebo kombinovaného pole otevře průvodce, usnadňující nastavení jejich vlastností. -
Uveďte hlavní rozdíl mezi ovládacími prvky Zaškrtávací políčko a Tlačítko volby (neboli
Přepínač).
Na formuláři může být zaškrtnuto současně víc zaškrtávacích políček, ale vždy jen jeden z přepínačů. -
Jakého typu musí být hodnoty sloupce tabulky formuláře nebo textového pole na formuláři, abychom pro
zadávání jejich hodnot mohli použít kalendářové okno?
Musí jít o typ datum – date.
Formuláře – pokračování
Předchozí dva díly byly úvodem k tvorbě formulářů v Base. Zatím jste používali průvodce pro vytvoření formuláře a seznámili se s ovládacími prvky formulářů i se dvěma panely nástrojů, které prvky nabízejí (panel Ovládací prvky formuláře a Více ovládacích prvků). Bylo také popsáno použití ovládacího prvku pro snadné zadávání data.
Kombinované pole a seznam
V tomto dílu rozšíříme možnosti formulářů o doplnění rozevíracího seznamu pro výběr z možných hodnot. Rozevírací seznam může existovat jako:
-
Kombinované pole – vypadá jako textové pole, ale šipkou v pravé části můžete rozvinout hodnoty.
-
Seznam, který ve formuláři roztáhnete do oblasti s větší výškou a nastavíte mu u vlastnosti Rozbalit hodnotu Ne – v oblasti se zobrazí současně tolik položek sloupce, kolik se do ní vejde.
-
Seznam, který roztáhnete do výšky textového pole a nastavíte mu ve vlastnosti Rozbalit hodnotu Ano – chová se stejně jako Kombinované pole.
Příkladů použití těchto ovládacích prvků bychom našli mnoho. V databázi Knihovna se bude hodit, když chcete zadat třídu, do které chodí student (čtenář), když chcete vybrat autora k nově zakoupené knize, když potřebujete vybrat knihy, které si čtenář půjčuje atp.
I když se budeme v tomto dílu věnovat jen kombinovanému poli (práce se seznamem je obdobná), nabízí se víc možností práce. Roletka může být doplněna do rozsáhlejší tabulky formuláře (pro usnadnění zadávání hodnot do jednoho ze sloupců) nebo jako samostatný ovládací prvek. Proto je díl rozdělen na tři části:
-
roletka pro zadávání dat do pole, které je součástí tabulky s více sloupci
-
roletka jako samostatný ovládací prvek, vytvořená pomocí průvodce formulářem
-
roletka jako samostatný ovládací prvek, vytvořená v režimu návrhu formuláře
V těchto částech bude postup pro přidání rozevíracího seznamu ukázán na následujících příkladech:
- Roletka v tabulce formuláře u databáze Knihovna verze „A“, kdy při zápisu nového čtenáře vybíráme třídu, do které chodí.
- Umístění roletky jako samostatného ovládacího prvku pro prohlížení nebo zápis oborů (žánrů), a to pomocí průvodce formulářem (u verze „A“ i „B“).
- Opět vytvoření roletky jako samostatného ovládacího prvku pro formulář k tabulce Obor, ale v režimu návrhu (a s pomocí průvodce pro samotný ovládací prvek). I tento příklad ve třetí části se týká obou verzí „A“ i „B“.
Zároveň se ukáže, že některé věci kolem seznamů v Base ještě nefungují úplně dobře. Vždy ale budou uvedena i řešení těchto problémů. Tak tedy „s chutí do toho a půl je hotovo“ – ať se vám práce daří.
Jednoduchá roletka v tabulce formuláře
Tuto možnost uvedu na příkladu, kdy chceme vytvořit formulář pro zápis nového čtenáře a roletkou mu vybereme třídu, do které právě chodí. Jedná se o databázi Knihovna ve verzi „A“. Čtenářům s verzí „B“ by možná stačilo, kdyby si prohlédli video, o kterém se píše v poznámce (Tip) na konci první části tohoto dílu. Jak by mohl vypadat výsledek vidíte na obrázku č. 1.
Obrázek 1: Formulář se seznamem, který je
součástí tabulky
Úkol 16, verze „A“: Následujícím postupem vytvořte formulář pro zápis nového čtenáře tak, že třídu u zapisovaného čtenáře bude možno vybrat kombinovaným seznamem (roletkou), jak je vidět na předchozím obrázku.
V první části postupu půjde prostě o vytvoření formuláře, jak to bylo popsáno už v osmém dílu:
(1) Založte nový formulář, nejsnáze průvodcem pro vytvoření formuláře. V prvním kroku průvodce do formuláře vložte sloupce z tabulky Čtenář (která obsahuje sloupce CtenarID, Prijmeni, Jmeno, TridaPuvodni, DatumTridyPuvodni, TridaSoucasna). Pro formulář k zápisu čtenáře není potřeba zahrnout poslední sloupec (ten se bude později doplňovat automaticky podle toho, jak student postupuje do dalších ročníků) a samozřejmě ani sloupec primárního klíče, jehož hodnoty přece doplňuje Base automaticky sám a pro uživatele nejsou důležité. Vyberte tedy jen čtyři sloupce: Prijmeni, Jmeno, TridaPuvodni a DatumTridyPuvodni.
(2) Ve druhém kroku není třeba nastavit žádný podformulář. Tím průvodce přejde do pátého kroku, kde můžete vybrat třeba tabulkové rozložení dat ve formuláři.
(3) V šestém kroku průvodce (Nastavit zadávání dat) by bylo užitečné zatrhnout volby Zakázat úpravu existujících dat a Zakázat odstranění existujících dat, protože formulář má sloužit jen k zápisu nového čtenáře. Staré záznamy tedy bude možné prohlížet, ale ne je třeba omylem přepsat.
(4) V předposledním – sedmém – kroku vyberte vhodný styl a v posledním kroku formulář pojmenujte (např. FormCtenar-Zapis) a můžete zatržením volby Změnit formulář rovnou přejít do návrhového zobrazení pro provedení dalších úprav. Zde doplňte texty třeba jako na dalším obrázku. Všimněte si zde po levé straně dvou panelů nástrojů s ikonami ovládacích prvků (panely Ovládací prvky formuláře a Více ovládacích prvků), ve spodní části je další užitečný panel Návrh formuláře, zatím se nám bude hodit jeho druhé tlačítko Režim návrhu zap/vyp, které umožňuje provedené změny hned vyzkoušet. Toto tlačítko je ale i na panelu Ovládací prvky formuláře jako druhé shora. Pokud formulář tvoříte, hned si jeho fungování tlačítkem Režim návrhu zap/vyp vyzkoušejte.
Obrázek 2: Formulář je připravený pro další
vylepšení
Přejmenování popisků: Asi jste si všimli, že názvy sloupců ve formuláři byly upraveny (místo TridaPuvodni je pro uživatele vhodnější název Třída apod.). To je jistě užitečné. Jak toto přejmenování provést? Klikněte pravou klávesou na záhlaví sloupce v tabulce a z pomocné nabídky vyberte volbu Sloupce... Zobrazí se okno Vlastnosti ovládacího prvku. V jeho první záložce Obecné změníte název ve druhé položce Popisek.
V druhé části postupu doplníme rozevírací seznam do sloupce pro zadání třídy.
(5) Úpravu formuláře začněte tím, že změníte původní textové pole tabulky (zde TridaPuvodni přejmenované ve formuláři na Třída) na ovládací prvek Seznam. Klikněte tedy pravou klávesou na název sloupce Třída a z kontextového menu vyberte volbu Nahradit za | Seznam.
(6) Nyní musíte zadat, odkud mají buňky tohoto sloupce tabulky brát pro seznam hodnoty: zdrojem má být samozřejmě tabulka (číselník) Trida. Chování sloupce nastavíme v okně Vlastnosti. Klikněte tedy znovu pravou klávesou do záhlaví a vyberte volbu Sloupec... Tím se zobrazí okno Vlastnosti (zde s názvem Vlastnosti: Seznam), které znáte už z minulého dílu seriálu i z předchozí poznámky.
Obrázek 3: Okno Vlastnosti, záložka Data
(7) V záložce Obecné nemusíte nic měnit, jen popřípadě přejmenujte vhodně záhlaví sloupce položkou Popisek, jak bylo řečeno v poznámce o něco výše. Důležitější je pro nás druhá záložka Data. Zde bude nutné zapsat příkaz jazyka SQL pro výběr všech záznamů z tabulky Trida. Protože půjde o výběr vhodných dat, použijeme příkaz SELECT (v češtině se mu říká dotaz). V poli Druh obsahu seznamu vyberte volbu SQL a dotaz vložte do posledního pole Obsah seznamu. Nebojte se, není nutné se hned učit jazyk SQL: Pokud neumíte potřebný dotaz (příkaz SELECT) jazyka SQL napsat přímo, pomůže vám grafický pomocník, obecně nazývaný QBE (Query By Example – dotaz podle vzoru). Spustíte ho kliknutím na pravé tlačítko s několika tečkami vedle pole Obsah seznamu (viz předchozí obrázek). Pak stačí ve k tomu určeném okně Návrh dotazu „naklikat“, co chcete a nástroj QBE vygeneruje potřebný dotaz (příkaz SELECT) sám. Dotazy i nástroj QBE se vám budou při práci s databází ještě hodit, ale vyzkoušet je můžete hned v dalším kroku.
(8) Před nově otevřeným oknem návrhu dotazu se objeví ještě okénko Přidat tabulku nebo dotaz, kde vyberte
tabulku Trida a vložte ji do návrhu dotazu tlačítkem Přidat. Pomocné okno Přidat
tabulku nebo dotaz potom zavřete a v okně SQL příkaz – návrh dotazu poklepejte na jediný sloupec
tabulky Trida se stejným názvem Trida. Tím se tento sloupec zahrne do dotazu, jak je vidět ve
spodní části okna (viz další obrázek). Ve stejném okně návrhu dotazu si ještě můžete zobrazit náhled
výsledku dotazu i kód příkazu SQL, a to ikonou Pohled návrhu zap/vyp (devátou zleva,
viz následující obrázek č. 4). Potom se v okně zobrazí vygenerovaný dotaz: SELECT "Trida" FROM
"KnihovnaVerzeA"."Trida" AS "Trida"
. Nezapomeňte uložit provedené změny při zavírání okna dotazu. Nyní
uvidíte, že se stejný příkaz jazyka SQL objevil v posledním políčku (Obsah seznamu) záložky Data v
okně Vlastnosti: Seznam, ukazuje to další obrázek č. 5. Pokud bylo pro vás vytvoření dotazu jazyka SQL
trochu složitější, dobrou zprávou je, že v druhé a třetí části tohoto dílu už ho nebudete potřebovat. Jen znovu
připomínám, že jsme nemuseli dotaz programovat sami, pomohl nám Base svou verzí grafického dotazovacího nástroje QBE.
Obrázek 4: Okno pro vytvoření příkazu SQL
pomocí dotazu
Obrázek 5: Okno Vlastnosti, tentokrát už s
vygenerovaným dotazem SQL
Poznámka k jazyku SQL. Pokud byste příště chtěli příkaz napsat sami, promyslete jeho strukturu: Chcete vybrat všechny hodnoty sloupce Trida z tabulky Trida z databáze (zde KnihovnaVerzeA). Základním příkazem pro výběr z tabulky je příkaz SELECT, ve kterém musíte napsat, jaký sloupec chcete vybrat (Trida) a z jaké tabulky sloupec vybíráte (FROM Trida). Příkaz byste tedy mohli zapsat jen takto: SELECT Trida FROM Trida. Base automaticky přidal ještě náhradní název (alias) pro tabulku, který zde ale není nutný, protože je stejný jako název tabulky (AS „Trida“), a dál obalil názvy uvozovkami. V mém případě si Base ještě dopsal název databáze (KnihovnaVerzeA), protože pracuji se souborem Base, vygenerovaným ze stejnojmenné databáze MySQL (viz 7. díl seriálu).
(9) Hned vyzkoušejte, jak kombinované pole funguje. Přepněte se do režimu zobrazení dat (už známou ikonou Režim návrhu zap/vyp na panelu Návrh formuláře ve spodní části okna nebo na panelu Ovládací prvky formuláře). Tabulka formuláře bude obsahovat dřív zadané záznamy. POZOR: v těch ale sloupec Třída nebude fungovat jako rozevírací seznam, protože jste dříve (bod 3.) nastavili, že staré záznamy bude možno prohlížet, ale ne je upravovat. Roletka bude funční, když kliknete do buňky Třída v posledním – prázdném – řádku tabulky, určeném pro vložení nového záznamu. Pak se objeví v pravé části buňky šipky, které po dalším kliknutí rozevřou nabídku seznamu. Je to vidět na prvním obrázku tohoto dílu.
Tip: Doporučuji další dvě videa, popisující přidání seznamu a kombinovaného pole do formuláře. Seznamu je věnováno video na stránce Show MeDo: 6. Add a List Box, kombinovanému poli video následující. Zde je ukázán způsob vytvoření rozevíracího seznamu pomocí průvodce ovládacím prvkem, tuto možnost použijeme ve třetí části tohoto dílu. Video je velmi pěkné, bohužel ale ukazuje jen případ roletky, který odpovídá prvnímu případu z tohoto dílu, nikoliv roletky jako samostatného prvku (viz následující text).
Jednoduchá roletka jako samotný ovládací prvek formuláře
V druhé části desátého dílu půjde o umístění roletky jako samostatného ovládacího prvku (v předchozím případu byl součástí tabulky). Tuto možnost vyzkoušejme na jednoduchém formuláři, který bude zatím obsahovat jen jeden ovládací prvek – právě rozevírací seznam (neboli kombinované pole) – a to ve verzi „A“ i „B“ pro obory (žánry). Zatím bude sloužit k prohlížení oborů a k zadání oboru nového. Zajistit také možnost úprav hodnot oborů, to by bylo pomocí kombinovaného seznamu zatím moc obtížné. Předpokládaný výsledek vidíte na obrázku.
Obrázek 6: Rozevírací seznam jako
samostatný prvek
Úkol 17, verze „A“, Úkol 16, verze „B“: Následujícím postupem (pomocí průvodce vytvořením formuláře) vytvořte formulář se samostatným kombinovaným seznamem pro výběr nebo zadání nového oboru tak, jak to ukazuje předchozí obrázek. Uložte ho např. pod názvem FormObor-Seznam_Pruvodcem.
Po zkušenosti s vytvořením roletky jako součásti tabulky v předchozím případě (v první části tohoto dílu) bude už zápis postupu stručnější. Nejdřív půjde opět jen o vytvoření základu formuláře, který pak vylepšíme roletkou:
Vytvoření formuláře pro prohlížení (výběr) oboru (verze „A“ i „B“):
(1) Založte nový formulář, zatím opět průvodcem pro vytvoření formuláře. V prvním kroku průvodce vyberte tabulku Obor
a její jediný sloupec stejného jména.
(2) Ve druhém kroku není třeba nastavit žádný podformulář. Tím průvodce přejde do pátého kroku, kde tentokrát vyberte
uspořádání Do sloupců – titulky v záhlaví.
(4) V šestém kroku průvodce (Nastavit zadávání dat) zakažte úpravy a odstranění záznamů zatržením
prvních dvou voleb, ponechte možnost přidání nového záznamu nezatržením volby třetí. (1)
V předposledním – sedmém – kroku vyberte vhodný styl a v posledním kroku formulář pojmenujte (např.
FormObor-se-Seznamem) a zatržením volby Změnit formulář rovnou přejděte do návrhového zobrazení pro
provedení dalších úprav.
Vložení ovládacího prvku roletky (pole se seznamem, v Base nazývaného Kombinované pole):
(5) Zatím je ve formuláři jen popisek (Obor) a s ním spojené textové pole. Nejdřív toto seskupení rozdělte (pravá klávesa myši, volba Seskupit | Zrušit skupinu). Dál textové pole nahraďte seznamem (pravá klávesa myši na textové pole, volba Nahradit za | Kombinované pole). Popř. si zobrazte panel nástrojů Ovládací prvky formuláře nebo Návrh formuláře (volba horního menu Zobrazit | Panely nástrojů) a druhým tlačítkem Režim návrhu zap/vyp z těchto panelů přepněte formulář do běžného režimu. Pokud zjistíte, že Kombinované pole (roletka) zatím nefunguje – nerozevírá se, pokračujte dalším bodem.
(6) Vraťte se do režimu návrhu formuláře. Ovládací prvek Kombinované pole upravte pomocí okna Vlastnosti (pravá klávesa myši na políčko seznamu, volba Ovládací prvek...). Ve spodní části první záložky Obecné změňte hodnotu volby Rozbalit na Ano. V záložce Data je správně předvolena položka Datové pole na Obor a Druh obsahu seznamu na Tabulka. V položce Obsah seznamu vyberte tabulku Obor.
Zde byl výběr hodnot pro seznam výrazně jednodušší než v první části desátého dílu, protože jste vybírali hodnoty přímo z jediné tabulky, zatímco v předchozím případě šlo o tabulky dvě: hodnoty z jiné tabulky (Trida) měly být navázány na hlavní tabulku formuláře (Ctenar). Takže se nyní vyhneme práci s příkazem jazyka SQL, který jsme v první části tvořili vizuálně pomocí dotazu. Aktuální obrázek okna Vlastnosti můžete porovnat s o něco výše znázorněným obrázkem Vlastností v předchozím případě.
Obrázek 7: Okno vlastnosti, zadání hodnot
bylo tentokrát snadné
Podivné chování formuláře. Je možné, že formulář nebude pracovat správně. Po uložení a znovuotevření možná přestane fungovat rozevírání roletky. Možná se vám dokonce vůbec nepodaří rozevírání kombinovaného pole dosáhnout. Takové „nevyzpytatelné“ chování není v pořádku. Myslím, že v postupu žádnou chybu nemáme – řídili jsme se radami průvodce. Proč formulář nefunguje jak má, si řekneme před koncem tohoto dílu, zatím nad tím můžete třeba sami trochu popřemýšlet.
Závěrečné úpravy formuláře: Pokud váš formulář nefunguje, dál bych se jím nezabýval, vytvoříme za chvíli lepší. Kdyby ale pracoval dobře (může to záviset na verzi Base, napište popř. své zkušenosti), proveďte opět poslední vhodné úpravy: Především v návrhovém zobrazení odstraňte zbytečné panely nástrojů. Můžete také zpět seskupit popisek a rozevírací seznam (vyberte oba prvky formuláře pomocí klávesy [Shift] a potom po kliknutí pravou klávesou myši na vybrané prvky použijte z pomocné nabídky volbu Seskupit | Seskupit). Obrázek výsledného formuláře byl uveden výše. Tento formulář s jediným seznamem by nebyl moc užitečný, lépe by fungovalo rozvržení (zobrazení) tabulky. Může se ale hodit jako základ pro nějaký složitější formulář v budoucnu.
Roletka jako samotný ovládací prvek podruhé – v režimu návrhu
Připomeňme si, že Base nabízí dvě základní cesty k vytvoření formuláře. Jde o volby:
- Použít průvodce pro vytvoření formuláře.
- Vytvořit formulář v režimu návrhu.
Podle předchozího textu jste zatím vytvářeli formulář vždy pomocí průvodce. Použití režimu návrhu bez pomocného vedení průvodcem vypadá složitěji, ale má také své výhody. Hlavní přednosti tvorby v režimu návrhu jsou asi tyto:
- Práce v režimu návrhu může být někdy rychlejší. To se týká zrovna našeho případu: průvodce vložil do formuláře textové pole, které jste dodatečně museli změnit na seznam. Proč ovládací prvek seznamu (nebo kombinovaného pole) nevložit rovnou?
- V režimu návrhu máte vše pod kontrolou. Uděláte jen to, co potřebujte a nemusí to za vás dělat Base podle voleb v průvodci (co když to Base zatím vždy bezproblémově nedokáže?).
- Na některé věci prostě průvodce nestačí.
V poslední části dílu si tedy vyzkoušejte i vytvoření formuláře v režimu návrhu:
Úkol 18, verze „A“, Úkol 17, verze „B“: Následujícím postupem (pomocí režimu návrhu) vytvořte formulář se samostatným kombinovaným seznamem pro výběr nebo zadání nového oboru tak, jak to ukazoval obrázek na začátku předcházející části. Uložte ho např. pod názvem FormObor-Seznam_RezimemNavrhu.
Můžete se řídit tímto postupem:
(1) Ujistěte se, že jste v podokně Formuláře programu Base a vyberte v horní části Úlohy volbu Vytvořit
formulář v režimu návrhu. Otevře se okno Writeru pro budoucí formulář. V něm si otevřete panel nástrojů
Ovládací prvky formuláře. Je třeba, aby na tomto panelu byla aktivní ikona Průvodci zap/vyp – to
umožní spuštění průvodce po vložení Kombinovaného pole.
(2) Klikněte na ikonu Kombinované pole panelu nástrojů Ovládací prvky formuláře a v horní části formuláře roztáhněte
myší oblast, odpovídající běžnému textovému poli.
Obrázek 8: Vložení prvku Kombinované
pole
(3) Po vykreslení oblasti pro Kombinované pole se otevře první okno z Průvodce rozbalovacím seznamem. V něm vyberte tabulku Obor z databáze. Tím se tabulka Obor stane zdrojem dat pro tento formulář.
(4) V dalším okně vyberte opět tabulku Obor jako zdroj dat pro ovládací prvek Kombinované pole.
(5) Třetí okno slouží k výběru vhodného pole z tabulky pro ovládací prvek. Naše tabulka Obor má jediné pole (sloupec) opět s názvem Obor, vyberte ho. Objeví se pak v pravé části okna v textovém poli „Zobrazit pole“.
(6) V posledním okně průvodce pro nastavení ovládacího prvku (s názvem Databázové pole) zvolte u otázky „Přejete si uložit hodnotu do databázového pole?“ přepínač s volbou „Ano, chci ji uložit do tohoto pole v databázi“ a z roletky vyberte pole Obor. A to je vše. Formulář ještě uložte třeba pod názvem FormObor-Seznam_RezimemNavrhu.
Při tomto postupu nebylo vůbec potřeba upravovat nastavení ovládacího prvku pomocí okna Vlastnosti. Podívejte se nicméně, jak Base pomocí průvodce ovládacím prvkem vlastnosti nastavil. V záložce Obecné je už správně zvolena hodnota vlastnosti Rozbalit na „Ano“ a v záložce Data je vložen příkaz jazyka SQL
SELECT DISTINCT "Obor" FROM "KnihovnaB"."Obor"
oproti předchozím případům obohacen ještě o klauzuli DISTINCT, která má zajistit, že kdyby bylo ve sloupci víc stejných hodnot, zobrazila by se jen jedna z nich (to ovšem u primárního klíče nemůže nastat, takže můžete toto slovo z příkazu i vymazat).
Obrázek 9: Záložka Data okna Vlastnosti
Formulář zavřete a pak vyzkoušejte (nelekejte se, pokud by vám opět nefungoval ještě v režimu návrhu po přepnutí do běžného režimu ikonou Režim návrhu zap/vyp, zde opět Base může trochu zlobit).
Jako dříve formulář ještě vylepšete posledními úpravami: nastavte mu barvu pozadí (volba Formát | Stránka, záložka Pozadí, viz další obrázek), přidejte popisek Obor (ikona Popisek na panelu nástrojů Ovládací prvky formuláře), u popisku nastavte nejspíš ukotvení K odstavci (buď v okně Vlastnosti, nebo v kontextovém menu) a posuňte ho k políčku seznamu. Jak popřípadě sloučit popisek s kombinovaným polem, je popsáno na konci druhé části. Zatím nemusíte přidávat do formuláře nadpis, to nechte na později. Nakonec odstraňte panely nástrojů.
Obrázek 10: Přidáváme formuláři pozadí
Podivné chování formuláře podruhé. Myslím, že u formuláře, vytvořeného návrhovým zobrazením, už problémy s funkčností rozevíracího seznamu nejsou. V tomto i v předchozím formuláři je ale ještě jeden problém: když prohlížíte položky tabulky Obor pomocí tlačítek v navigačním panelu na spodním okraji formuláře, jde vše dobře. Ovšem roletku jsme umístili na formulář proto, abychom mohli hledat hodnoty s její pomocí! A zde se objeví další zádrhel: vyberte ze seznamu některý jiný obor než první (v tabulce podle předchozích dílů je to „americká literatura“) a zjistíte, že navigační panel nespolupracuje, zůstává v něm zobrazeno stále číslo záznamu „1“. Pokud byste v tomto okamžiku zkusili formulář zavřít, objeví se chybové hlášení.
Podrobnější rozbor této situace můžete asi přeskočit (zejména pokud tvoříte jednodušší variantu „B“ databáze Knihovna). Pro zájemce se ale o vysvětlení pokusím. Podle způsobu, jak jste formulář vytvořili, může mít chybové hlášení asi dvě varianty:
-
Chyba při vkládání nového záznamu.
Duplicate entry '…' for key 'PRIMARY'
, kde místo tří teček je položka, kterou jste vybrali. Zde vás Base upozorňuje, že se snažíte vložit na první pozici tabulky Obor hodnotu, která už jinde v této tabulce existuje. Přitom jde o primární klíč, který musí být unikátní! -
Chyba při aktualizaci stávajícího záznamu.
Cannot delete or update a parent row: a foreign key constraint fails („OborKniha“, CONSTRAINT „fk_Zanr_has_Kniha_Zanr1“ FOREIGN KEY („Obor“) REFERENCES „Obor“ („Obor“) ON DELETE NO ACTION ON UPDATE NO ACTION)
. Base hlídá integritu vazby mezi tabulkami Obor a OborKniha. Tabulka OborKniha obsahuje cizí klíč Obor, navázaný (REFERENCES) na tabulku Obor a její sloupec Obor. Výběrem jiné hodnoty z roletky pro záznam číslo jedna v tabulce Obor by vznikla situace, kdy v této tabulce přemažete původní hodnotu, která ale stále zůstává v cizím klíči Obor provázané tabulky OborKniha. Tím by se porušilo pravidlo, které bylo uvedeno ve čtvrtém dílu seriálu: „Další vlastností cizího klíče je, že nesmí obsahovat hodnotu, která by nebyla obsažena ve sloupci odpovídajícího primárního klíče připojené tabulky. To je takzvané pravidlo referenční integrity, jeho kontrola systémem řízení báze dat je další pojistkou správnosti databáze.“
Shrnutí problémů a jejich řešení
Při tvorbě samostatného rozevíracího seznamu (byla použita jeho varianta Kombinované pole) jste se tedy setkali se dvěma problémy. Připomeňme si je a uveďme hned i jejich příčiny a řešení:
- Po vytvoření formuláře je roletka nefunkční – nerozevírá se (to byl případ druhé části dílu, kdy jste formulář
vytvářeli průvodcem).
Nefunkčnost roletky byla myslím způsobena právě tím, že jste formulář vytvořili pomocí průvodce. Base zřejmě zatím někdy nedokáže správně nastavit vše, co průvodce nabízí. Dá se očekávat, že v některé z dalších verzí OpenOffice tyto chyby budou opraveny, toto by se asi v databázi Access z Microsoft Office nestalo. Pokud si to ale uvědomíte, můžete se chybnému fungování výsledku průvodce vyhnout tím, že produkt (zde formulář) vytvoříte bez průvodce – v režimu návrhu. A ono je to nakonec mnohdy i šikovnější, některé výhody režimu návrhu jsem uvedl výše. - Roletka sice funguje, ale nemůžeme s ní bezproblémově prohlížet záznamy (formulář ze třetí části, vytvořený v
režimu návrhu, popř. i formulář z druhé části, pokud je roletka funkční).
S tímto problémem se můžete setkat i v Accessu. Zde už databáze potřebuje makro (malý program), které vazbu rozevíracího seznamu na formulář a jeho navigační panel zařídí. V některých případech vám Access v této situaci potřebné makro vloží do databáze automaticky, v Base to zatím tak není a makro si musíte sami napsat (nebo najít na Internetu). To už by se do tohoto dílu ale nevešlo, necháme to na díl příští.
V obou situacích se ukazuje, že zde má Access náskok. Oba problémy se ale – jak je vidět – dají vyřešit i v Base. Byl bych rád, kdyby právě v podobných problémových případech mohl tento seriál pomoci, jistě i s přispěním diskusí čtenářů.
Stav cvičné databáze
Po práci v tomto dílu by měly ve vaší databázi Knihovna nastat tyto změny:
-
V databázi Knihovna verze „A“ jste vytvořili formulář pro zápis nového čtenáře tak, že třídu u zapisovaného čtenáře je možno vybrat kombinovaným seznamem (roletkou). Šlo o Úkol 16, verze „A“.
- V obou verzích „A“ i „B“ jste vytvořili dva formuláře s jediným ovládacím prvkem – roletkou. Z toho první formulář (FormObor-Seznam_Pruvodcem) byl vytvořen průvodcem, druhý (FormObor-Seznam_RezimemNavrhu) v režimu návrhu. Druhý z těchto formulářů by měl mít určitě funkční roletku, protože jste se nespolehli na to, že Base „za vás“ správně převede kroky postupu průvodce do výsledného formuláře. Každopádně však nefunguje bezproblémově prohlížení položek roletkou (to doplníme příště). Šlo o úkoly 16 až 18.
Otázky na závěr – Shrnutí desátého dílu
Kombinované pole a seznam ve formulářích
- Jak se liší kombinované pole od seznamu? Kdy budou fungovat totožně?
- Uveďte aspoň dvě přednosti tvorby formuláře v režimu návrhu oproti použití průvodce.
- Uveďte dva problémy, se kterými jste se v tomto dílu u kombinovaného pole setkali a zkuste vysvětlit jejich příčinu a možnost jejich řešení.
Co vás čeká v dalším dílu?
V jedenáctém dílu seriálu o databázích v Base dokončíme zprovoznění samostatné roletky na formuláři ze třetí části tohoto dílu. Budete k tomu potřebovat napsat jednoduché makro a přiřadit ho vhodné události kombinovaného pole. Pokud jste se s makry ještě nesetkali, mohla by být pro vás tato zkušenost užitečná. Kdo se chce na setkání s makry trochu připravit, mohl by si stáhnout přínosnou a důkladnou elektronickou knihu o makrech v OpenOffice.org od pana Pastierika, pročíst úvod a naprogramovat jednoduché makro. Vytvořit ho můžete podle stránek 9 až 11, na stránkách 14 až 17 je program (zdrojový kód) vysvětlen. Pro úvodní seznámení s makry by ale stačil i jednodušší návod, pokud o nějakém víte, nabídněte ho popřípadě v diskusi (uvedená kniha pana Pastierika má úctyhodných 270 stran).