Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty

base.png V osmém dílu se budeme věnovat důležité součásti databáze: formulářům, které jsou určeny pro zadávání dat. Můžete pracovat s databází vytvořenou samostatně v Base (podle šestého dílu) nebo s databází MySQL, kterou upravujete pomocí Base (jako programu typu front-end, viz sedmý díl). Doplňkem k předchozím dílům je obrázek vazeb v Base u databáze Knihovna verze „A“ v úvodní části tohoto dílu.  

Odpovědi na otázky ze shrnutí 7. dílu

Vygenerování databáze

  1. Zkuste stručně popsat postup, jakým byla založena databáze Knihovna v Base v sedmém dílu. Nezapomeňte také na jisté přípravné fáze, které byly potřebné.

    Práce v programu MySQL Workbench: nakreslení ER diagramu, nainstalování lokálního serveru MySQL, vytvoření spojení programu se serverem, vygenerování příkazů jazyka SQL a tím i databáze MySQL programem Workbench na serveru na základě diagramu. Navazující práce s Base: Instalace rozhraní pro možnost spojení programu Base s databází MySQL (my jsme použili místo tradičních rozhraní ODBC nebo JDBC nativní – přirozené – spojení MySQL s balíkem OpenOffice.org pomocí rozšíření MySQL Connector), dál založení databáze v Base připojením se k databázi MySQL (podmínkou je spuštění lokálního serveru MySQL, který byl nainstalován v první fázi a navázání spojení s tímto serverem), v Base se tím vytvoří tabulky a vazby podle připojené databáze MySQL. S databází lze pracovat jak v Base, tak v programu Workbench nebo jiným programem pro práci s databází MySQL.

  2. Vysvětlete stručně účel těchto příkazů jazyka SQL: CREATE TABLE, INSERT, UPDATE, DELETE a SELECT. Které z nich patří podmnožiny jazyka DML (Data Manipulation Language) a které do DDL (Data Definition Language)?

    Příkaz CREATE TABLE založí v databázi novou tabulku, INSERT zajistí vložení řádku (záznamu) do tabulky, UPDATE umožní změnu (aktualizaci) dat, DELETE maže řádky z tabulky a příkazem SELECT vybíráme z jedné nebo více tabulek data podle zadaných podmínek. První z uvedených příkazů CREATE TABLE patří do podmnožiny DDL jazyka SQL (Structured Query Language, strukturovaný dotazovací jazyk), ostatní patří do části DML jazyka SQL.

  3. Poskytují webhostingy běžně přímý přístup k externí databázi, uložené na serveru hostingu? Vysvětlete. Jaké jiné přístupy k databázi na vzdáleném serveru jsou povoleny?

    Běžně neposkytují, pouze jako nadstandardní, placenou službu. Důvodem je ohrožení bezpečnosti serveru a možnost zneužití serveru vytvářením dalších databází. Normálně je k databázi přístup povolen grafickým rozhraním phpMyAdmin nebo prostřednictvím příkazů jazyka php ve zdrojovém kódu samotných internetových stránek.

  4. Jaký smysl má internetová adresa 127.0.0.1?

    Jde o jednu z adres, představujících lokální (právě používaný) počítač, proto se také nazývá localhost. Představuje jakousi smyčku (loopback), protože odeslané síťové (IP) pakety s touto adresou jako cílovou se vrátí zpět. Stejně by fungovala jakákoliv adresa, začínající číslem 127, tyto adresy jsou pro tento účel rezervovány a nedají se proto použít na síti mimo samotný počítač; můžete to vyzkoušet třeba příkazem ping 127.0.0.2 v příkazovém řádku, který zjišťuje dosažitelnost stanice s uvedenou adresou. Příkaz bude hlásit odezvu (from) opět od stanice se stejnou adresou, čili od lokálního počítače, navíc parametr TTL (time to live, číslo, které by se mělo z výchozí hodnoty snižovat podle počtu směrovačů, kterými paket prošel cestou v síti) bude mít největší výchozí hodnotu (obvykle 64), čili paket neprošel žádným směrovačem.

  5. Zkuste najít, k jaké komunikaci je určen port číslo 3306 a jak máme rozumět pojmu port v této souvislosti.

    Autorka „síťařské bible“ TCP/IP v kostce Rita Pužmanová o portech v této knize píše (vybraný text je zde mírně upraven): „Poté, co se data přenesou sítí za pomoci protokolu IP a směrovacích protokolů k cílovému uzlu (počítači), je potřeba je doručit správnému uživateli (procesu) ... K identifikaci vyššího (aplikačního) protokolu, který bude poskytovanou transportní službu používat, se užívá čísla portu. Port je abstrakce (kladné celé číslo), která se používá k rozlišení konkrétního cílového aplikačního procesu běžícího na daném počítači.“

    Pokud si IP adresu stanice (např. adresu openoffice.cz nebo její číselný ekvivalent 91.214.192.101, jak lze zjistit opět příkazem ping ve tvaru ping openoffice.cz) představíte jako adresu vašeho domu (město, PSČ, ulice, číslo domu), pak číslo portu (cílové aplikace) si můžete představit jako číslo vašeho bytu. Například aplikace prohlížení internetových stránek (protokol http) je označena číslem (portem) 80, přenos souborů protokolem ftp má číslo portu 20 (přenos dat) a 21 (řízení přenosu). No a číslo portu 3306 je používáno pro službu přenosu dat z databází MySQL (částečný seznam portů najdete na wikipedii, úplný přehled je na stránce organizace IANA, která čísla spravuje).

Plnění databáze daty

Kostru databáze – tabulky a vazby – máte hotovou. Bylo by dobré ji tedy začít plnit daty. Nabízejí se k tomu dvě možnosti:

  • vkládání údajů přímo do tabulek
  • zadávání údajů pomocí formulářů

Vkládání dat prostřednictvím tabulek

Tato možnost se nabízí nejdříve. U jediné tabulky by to bylo snadné, ale prostředí tabulky není zrovna nejpříjemnější: nemáte možnost použít různé pomůcky, jako třeba zadávání hodnoty z rozevíracího seznamu (roletky) hodnot, chcete-li zadat datum, bylo by příjemné použít okénko s nabídkou měsíců a dnů apod. Ještě větší problémy by vás čekaly proto, že kvůli redundanci (i z dalších důvodů) jsme rozdělili databázi na více tabulek, které jsou provázány vztahy. Zápis navzájem souvisejících dat do více tabulek by byl velmi obtížný. Na druhou stranu je možná pro pochopení práce primárního klíče s automatickou hodnotou, cizích klíčů apod. užitečné i tuto možnost zadávání dat krátce vyzkoušet.

Úkol 11 (verze „A“ i „B“): Zkuste tímto způsobem (přímo do tabulek databáze) zadat informace o některé knize. Buď vyberte nějakou vaši nebo použijte dále uvedená cvičná data.

Primární klíč s automatickou hodnotou. Nezapomeňte, že do sloupce primárního klíče s automatickou hodnotou nebudete psát nic – tuto hodnotu si při přechodu na další záznam doplní Base sám. Přitom je v Base nastaveno, že automatická hodnota začíná od jedničky (nebo od nuly?) a pokud časem některý záznam odstraníte, jemu přiřazená automatická hodnota se už nebude doplňovat při přidání nového záznamu, prostě navždy bude ve sloupci primárního klíče chybět. Nesnažte se ale tato pravidla měnit, nepravidelnosti v hodnotách primárního klíče, které časem mohou vzniknout, nejsou důležité. Uživatel databáze by totiž s hodnotami primárního klíče vůbec neměl pracovat (ani by neměl mít potřebu je zjišťovat)! Nejsou to data určená pro uživatele, ale pomocná data pro udržení integrity databáze. (Proto se mi nechce ani zkoumat ta počáteční hodnota nula nebo jedna – není to pro mě důležité).

Cvičná data k Úkolu 11 jsou zobrazena v tabulkách Base a nakonec i ve výřezu okna MySQL Workbench (tak by mohlo vypadat zadání dat, jestliže jste v Base vytvořili databázi Knihovna z databáze MySQL, vygenerované v programu Workbench. S databází pak můžete pracovat v obou programech). Protože jde jen o malou zkoušku zadávání záznamů, stačí tato cvičná data i pro složitější Knihovnu verze „A“. Hodnoty primárního klíče (až na tabulku Obor, kde není hodnota primárního klíče typu Integer s automatickým zadáváním) doplnil v následujících ukázkách Base nebo Workbench.

Při zkušebním zadávání dat je asi rozumné začít tabulkami, u kterých pro zadání záznamu nejsou potřeba údaje z jiné tabulky (pro hodnoty cizího klíče). Začněte tedy třeba tabulkou Spisovatel a Ctenar.

Cvičná data pro tabulku SpisovatelCvičná data pro tabulku Spisovatel

Potvrzování zadaných údajů v Base. Když zadáváte data do databáze v Base, všimněte si, že jakmile přejdete na další řádek, je předchozí záznam automaticky uložen. Pokud do nového řádku jen přejdete, ale nic sem nezadáte, pak vás Base po zavření tabulky ani nebude žádat o uložení změn (předchozí záznamy už byly automaticky uloženy na disk).

Data pro tabulku Ctenar, verze „B“Data pro tabulku Ctenar, verze „B“

V databázi Verze „A“ budou v tabulce Ctenar data jiná, mohla by vypadat třeba takto (měli byste mít nastaveno, že zadání původní třídy a data původní třídy je nutné, takže bez těchto údajů by měl Base hlásit chybu a tabulka by nešla uložit).

Data pro tabulku Ctenar, verze „A“Data pro tabulku Ctenar, verze „A“

Až dosud bylo vše snadné, šlo o zápis do jediné tabulky bez závislosti na tabulkách jiných. Nyní ale zkuste ve verzi „B“ zadat data do tabulky Kniha:

Data v tabulce Kniha potřebují i hodnoty cizích klíčů dle dalších tabulekData v tabulce Kniha potřebují i hodnoty cizích klíčů dle dalších tabulek

Zde jsem pro zadání údajů použil program MySQL Workbench. Ve výřezu ze spodní části okna programu je vidět, že je ještě potřeba zadat správné hodnoty cizích klíčů CtenarID a SpisovatelID. Teď je tedy nutné otevřít i další dvě tabulky (Ctenar a Spisovatel) a podle jejich primárních klíčů doplnit požadované hodnoty cizím klíčům v tabulce Kniha. Dejme tomu, že Petr Krčmář si půjčil z vaší knihovny knihu Pláň Tortilla a Anička Kovaříková si půjčila knihu Vedlejší příznaky. Výsledek pak vidíme na dalším obrázku, ale uznáte, že tento způsob práce je nešikovný.

Tabulka Kniha po doplnění hodnot cizích klíčů, verze „B“Tabulka Kniha po doplnění hodnot cizích klíčů, verze „B“

Na obrázku je zdůrazněno tlačítko Apply changes to data, jehož stisk teprve vyvolá provedení naplánovaných změn. Všimněte si také, že Workbench zobrazuje prázdným buňkám hodnotu NULL, o které byla zmínka v úvodu čtvrtého i pátého dílu.

Upozornění pro verzi „A“: v databázi verze „A“ je to jinak, tam je mezi tabulkou Kniha a Ctenar třetí pomocná tabulka Vypujcka a mezi tabulkami Kniha a Spisovatel je třetí tabulka KnihaSpisovatel. Tyto tabulky umožňují vazbu M – M. Ti ze čtenářů, kteří pracují s Knihovnou verze „A“, by si mohli tuto vazbu vyzkoušet podle dalšího obrázku, klíčovou je tabulka Vypujcka. Zadání dat pro stejný typ vazby M – M bude ukázáno níže u další dvojice tabulek.

Tabulka Vypujcka s dalšími po doplnění hodnot cizích klíčů, verze „A“Tabulka Vypujcka s dalšími po doplnění hodnot cizích klíčů, verze „A“

Vazby ve verzi „A“. Pro jistotu přikládám ještě obrázek vazeb, který zobrazuje stav databáze verze „A“ po jejím vytvoření v Base. Tento obrázek ukazuje databázi, vytvořenou postupem z minulého dílu z databáze MySQL, vygenerované programem Workbench. (V obrázku vazeb chybí tabulka NastaveniDatabaze, protože ta není provázána s žádnou jinou tabulkou. V databázi však existuje.) Problémem je vazba 1 – 1 mezi tabulkami Vypujcka a Upominka, Base ji bere díky cizímu klíči VypujckaID jako vazbu 1 – M a nemáme asi možnost to změnit. Data však můžeme zadávat podle plánu (1 – 1).

Vazby mezi tabulkami databáze Knihovna verze „A“Vazby mezi tabulkami databáze Knihovna verze „A“

Vazba M – M, verze „A“ i „B“: Dalším oříškem je vyřešení vazby M – M při zadávání dat, např. mezi tabulkou Kniha a Obor. Přidejte tedy nejdřív data do tabulky Obor (u této tabulky si vzpomeňte, že jsme ji vytvořili jako číselník, čili hodnota v jediném sloupci je zároveň nastavena jako primární klíč).

Vazby mezi tabulkami databáze Knihovna verze „A“Vazby mezi tabulkami databáze Knihovna verze „A“

Pro vytvoření vazby je ale ještě nutné vyplnit hodnoty cizích klíčů do třetí – zprostředkující – tabulky KnihaObor. Vazbu M – M jsme zde použili, aby mohl jeden obor patřit zároveň více knihám, ale také aby jedna kniha mohla mít přiděleno víc oborů.

Úkol 12, verze „A“ i „B“: Promyslete (a do tabulky doplňte), jakými hodnotami v tabulce KnihaObor zajistit, aby knihám byly přiřazeny obory tak, jak ukazuje tento přehled:

Kniha

Obor1

Obor2

Obor3

Vedlejší příznaky

povídky

americká literatura

humor

Pláň Tortilla

novela

americká literatura

humor

Řešení Úkolu 12 najdete na konci tohoto dílu. V tomto místě si jen připomeňme, jakou má tabulka KnihaObor strukturu:

Zatím prázdná tabulka KnihaOborZatím prázdná tabulka KnihaObor

Pokud si i tuto tabulku skutečně sami vyplníte, bude vám jasné, že zadávání dat přímo do tabulek není ideální způsob.

Doporučení: nepracujte s tabulkami

Myslím, že při práci s databází platí, že tabulky a vazby jsou jakési základní kameny, ze kterých sice databáze vychází, ale s nimiž se při pozdější práci už nepracuje – asi jako při stavbě domu je nutné nejdřív postavit základy, ale při dalších úpravách (zdi, okna, malování, přístavby) už základy neměníme, celý dům na nich stojí. U databází je to asi takto:

  • Pro zadávání či aktualizaci dat slouží formuláře,
  • Pro výběr potřebných dat tzv. dotazy,
  • Pro zobrazování požadovaných dat sestavy.

V další části tohoto dílu se tedy budeme věnovat formulářům. Než ale (víceméně definitivně) opustíme tabulky, využijme už zadaná data v nich k tomu, abychom si připomenuli některé starší věci:

Jak Base hlídá správnost (integritu) dat?

Potěšitelné je, že Base si díky vytvořeným vazbám přísně hlídá správnost zadávaných dat (možnosti hodnot cizích klíčů, jedinečnost primárního klíče) – tzv. referenční integritu databáze.

Úkol 13, verze „A“ i „B“: Vyzkoušejte to tak, že v tabulce KnihaObor (nebo OborKniha) zadáte do sloupce cizího klíče KnihaID vysoké číslo, které neodpovídá hodnotám primárního klíče tabulky Kniha, např. číslo 12500. Base vás hned bude varovat a tabulku s touto vadnou hodnotou se vám ani nepodaří uložit. Stejně by se Base projevil, kdybyste zadali do cizího klíče obor, který se nevyskytuje jako primární klíč v tabulce Obor, např. hodnotu „blablabla“. Po takovém chybném zadání se může stát, že budete chtít nesprávné hodnoty v novém řádku prostě všechny vymazat. Ale i takový prázdný řádek Base nepřijme: i tento prázdný řádek bere jako započatý záznam a nemá v něm zadaný primární klíč, což je nepřípustné. Pak nezbývá než tabulku zavřít bez uložení změn.

Formuláře

Formuláře slouží k usnadnění a zpřehlednění zadávání dat. Jejich další velkou výhodou je, že prostřednictvím formuláře můžeme snáze zadávat data do několika tabulek databáze zároveň (pokud mezi nimi jsou vztahy).

Možnosti tvorby formuláře v Base

Přepněte se v levém oddílu Databáze ze sekce Tabulky do části Formuláře. Nabízené možnosti pak vidíte v horní části podokna Úlohy. Jde o:

  • Vytvoření formuláře pomocí průvodce: Průvodce usnadní tvorbu formuláře, ale hodí se spíš pro jednodušší formuláře k datům z jedné, nejvýše dvou tabulek.

  • Vytvoření formuláře v návrhovém zobrazení: Práce v režimu návrhu je zpočátku náročnější, ale umožňuje vytvořit propracovanější formuláře. Tento režim se dá také použít pro úpravy hotového formuláře, vytvořeného pomocí průvodce.

V tomto dílu se podíváme na první z možností (průvodce) a také na úpravy formuláře (tím se seznámíte i s návrhovým zobrazením). Výsledek obou případů tvorby formuláře se dá rozdělit ještě jinak: podle složitosti získaného formuláře. První dvě z následujících variant složitosti zvládnete snadno právě pomocí průvodce tvorbou formuláře. Rozdělení by mohlo být takové:

  1. Formulář pro zadávání dat, která jsou určena pro jedinou tabulku. To je nejjednodušší možnost.
  2. Formulář pro zadávání dat, určených pro dvě tabulky, provázané vazbou typu 1 – M. Vytvoření formuláře je opět jednoduché, vystačíme s průvodcem.
  3. Složitější formuláře, na které by průvodce nestačil. Na ty se podíváme v příštím dílu.

1) Vytvoření formuláře pomocí průvodce – data pro jedinou tabulku

Postup je jednoduchý. Po kliknutí na volbu Použít průvodce pro vytvoření formuláře… se otevřou dvě okna:

  • Nejdřív okno textového editoru Writer (v záhlaví bude nejspíš napsáno „Bez názvu 1 – OpenOffice.org Base: Návrh formuláře“).
  • Hned po něm, ale v popředí ještě okno Průvodce formulářem.

Writerovské okno na pozadí slouží jako náhled: můžete v něm postupně sledovat, jak vytvářený formulář vypadá. Později je možné formulář libovolně vylepšovat jako soubor ve Writeru (včetně stylů odstavců, barvy pozadí, vkládání obrázků apod.). Obě okna ukazuje obrázek.

Dvě okna při tvorbě formuláře průvodcemDvě okna při tvorbě formuláře průvodcem

Průvodce nabízí osm kroků, z nichž ale při tvorbě formuláře pro jedinou tabulku využijete jen šest.

Výběr tabulky u databáze z MySQLVýběr tabulky u databáze z MySQL

V prvním kroku (Výběr polí) vyberte položky záznamů tabulky, které se ve formuláři mají zobrazovat. Rozevřete roletku Tabulky nebo dotazy a vyberte tabulku, do které se formulářem mají ukládat data (místo tabulky je možno vybrat i dotaz, ale o tom až později). Pokud jste databázi vytvářeli od začátku v Base, bude výběr tabulek velmi snadný. Na dalším obrázku je ale vidět nabídka u databáze, která byla v Base vytvořena druhým způsobem: na základě databáze MySQL, postup byl popsán v předchozím dílu. Protože databáze MySQL obsahuje ještě svoji základní poddatabázi (mysql, viz předchozí díl) začínají v tomto případě názvy tabulek kvůli jednoznačnosti v pojmenování názvem databáze (KnihovnaVerzeB.Ctenar, mysql.event apod.).

V tomtéž kroku pak po výběru tabulky pomocí 4 tlačítek přesuňte z části Dostupná pole do části Pole formuláře položky, které se mají ve formuláři zobrazit. Vyberte třeba tabulku Spisovatel a z ní všechna tři pole.

Primární klíč ve formuláři: Většinou (pokud ho doplňuje databázový program automaticky, což je velmi časté) nemá smysl zobrazovat ve formuláři primární klíč. Jak víte už z poznámky k Úkolu 11 výše, pro uživatele databáze nemá tento údaj význam, spíš by ho mohl plést. Při sestavování prvních cvičných formulářů může být ale zobrazení primárních klíčů dobré proto, abyste mohli sledovat jejich hodnoty, kontrolovat, jak odpovídají cizím klíčům u provázaných záznamů apod.

Ve druhém kroku (Nastavit podformulář) nevyplňujte v úvodním nejjednodušším druhu formuláře nic – chceme přece formulář jen pro jednu tabulku. Všimněte si ale, že pokud byste zatrhli políčko Přidat podformulář, nabídl by vám Base tabulku Kniha, protože ta je skutečně (ve verzi „B“ naší databáze) provázána vazbou 1 – M s tabulkou Spisovatel. K tomu se dostaneme níže – u druhého typu formulářů. Protože jste ve druhém kroku nic nepodnikli, zůstanou další dva (třetí a čtvrtý) kroky nedostupné.

Pátý krok (Uspořádat ovládací prvky) se už týká formátování budoucího formuláře. Vyzkoušejte si sami jednotlivé možnosti. Jestliže chcete, aby formulář kromě možnosti zadat nové hodnoty zobrazoval i data už zadaná, zvolte uspořádání Jako tabulku.

Šestý krok (Nastavit zadávání dat) nabízí různé režimy práce formuláře. Zatím doporučuji nic nezadávat, ale jednotlivé volby si promyslete.

V sedmém kroku (Použít styly) nastavíte vzhled formuláře. To, jak se nastavení projeví, sledujte v okně Writeru na pozadí.

V posledním kroku (Nastavit název) zadejte název nového formuláře. Doporučuji názvy odlišit od tabulek třeba předponou Form, např. FormSpisovatel (nebo u databáze z MySQL KnihovnaVerzeB.FormSpisovatel). Nechte asi zatrženou volbu Pracovat s formulářem a průvodce ukončete.

Otevře se nový formulář. Vzhled by se měl ještě vylepšit – hned se do toho pustíme. Vytvoření formuláře bylo tedy velmi snadné, což ještě vynikne v porovnání s tvorbou formulářů na webových stránkách pomocí jazyků html a php.

 

Nový formulář bude potřebovat ještě úpravyNový formulář bude potřebovat ještě úpravy

TIP: O něco podrobněji než zde je postup tvorby formuláře popsán v posledním dílu staršího seriálu o Base od pana Pastierika. Velmi pěkně je vytvoření jednoduchého formuláře ukázáno také formou videa na stránce ShowMeDo, na kterou bylo upozorněno už ve druhém dílu. Video je komentováno v angličtině.

Úpravy formuláře (v návrhovém zobrazení), první část

Abyste mohli vzhled formuláře vylepšit, je potřeba přejít do režimu návrhu, který je zároveň režimem úprav. Nejdřív musíte otevřený formulář zavřít. Potom v podokně Formuláře klikněte na jeho název pravou klávesou myši a z kontextové nabídky vyberte volbu Upravit.

 

Předchod do režimu úprav formulářePředchod do režimu úprav formuláře

Nyní se otevře writerovský soubor, který můžete vylepšovat běžnými postupy práce v textovém editoru. Navrhuji na začátku maximalizovat okno formuláře, upravit šířky sloupců a potom zmenšit oblast tabulky (tažením za krajní úchytové body). Dál by bylo dobré dopsat nadpis, popř. podnadpis (nejlepší je asi používat styly odstavců Writeru, zde Nadpis1, Nadpis2 apod. Okno stylů zobrazíte např. volbou Formát | Styly a formátování, styl můžete upravit po kliknutí pravou klávesou do textu a po výběru volby Upravit styl odstavce...). Před dopsáním nadpisu přesuňte tabulku nebo pole formuláře na vhodné místo tažením myší.

Návrh konečné podoby formulářeNávrh konečné podoby formuláře

Nezapomeňte nakonec zavřít zbytečné panely nástrojů (Zobrazit | Panely nástrojů), v hotovém formuláři nebudete asi potřebovat žádný. Pravítka se asi skryjí automaticky, popř. to proveďte volbou Zobrazit | Pravítko, ukryjte i stavový řádek (Zobrazit | Stavový řádek). Formulář je standardně nastaven tak, že se nakonec zobrazí ve spodní části panel nástrojů Navigace ve formuláři (vyhradíte asi pro něj navíc trochu místa) a menší navigační panel se zobrazí také na konci tabulky. Pokud jste zobrazili i pole primárního klíče, víte, že se to hodí leda ze cvičných důvodů; nakonec toto pole tedy v návrhovém zobrazení z formuláře odstraňte (pravá klávesa na záhlaví pole, volba Odstranit sloupec). Změny můžete uložit třeba při zavírání okna návrhového zobrazení. Nebylo by špatné skrýt zde nepotřebný pravý posuvník a snad i horní menu, ale to je už nad rámec tohoto seriálu. Výsledek by mohl být takový:

Hodnoty pro tabulku TridaHodnoty pro tabulku Trida

Úkol 14, verze „A“: Vytvořte průvodcem formuláře k tabulce Spisovatel, Obor, Kniha, Trida a NastaveniDatabaze (už bez primárních klíčů).

Úkol 14, verze „B“: Vytvořte průvodcem formuláře k tabulce Spisovatel, Obor a Ctenar (bez primárních klíčů).

Pro verzi „A“ se vám hodnoty v tabulce Trida budou hodit. Mohli byste je rovnou pomocí formuláře zadat třeba takto:

2) Vytvoření formuláře pomocí průvodce – data pro dvě tabulky s vazbou 1 – M

Tato kapitola je rozdělena na tři části:

  • S jakou tabulkou z vazby 1 – M začneme tvořit formulář?
  • Postup tvorby formuláře
  • Další rady pro úpravy formuláře

S jakou tabulkou z vazby 1 – M začneme tvořit formulář? Bylo by dobré mít před založením formuláře v této otázce jasno. S jakou ze dvojice tabulek tvorbu formuláře máme tedy začít: má to být tabulka, která je u vazby na straně M nebo 1? Promyslete to na příkladu tabulek Spisovatel a Kniha u databáze Knihovna verze „B“ (přikládám obrázek, který ukazoval stav této databáze v minulém dílu):

Vazba 1 – M mezi tabulkami Spisovatel a KnihaVazba 1 – M mezi tabulkami Spisovatel a Kniha

Tabulka Spisovatel (vpravo dole) je u vazby na straně 1, tabulka Kniha na straně M (Base tuto násobnost vazby značí n). Když začnete tvorbu formuláře daty z tabulky Kniha, pak k zadanému záznamu bude možné přidat jen jeden záznam z tabulky Spisovatel (jen jednoho autora). Pokud začnete naopak údaji z tabulky Spisovatel, potom k jednomu záznamu (k jednomu autorovi) bude možno zadávat postupně více záznamů o knihách. Tento postup je tedy výhodnější. Proto tvorbu formuláře se dvěma tabulkami začněte vždy tabulkou, která je u vazby na straně 1, potom vám také Base sám nabídne přidání druhé tabulky v průběhu průvodce.

Položky z tabulky Kniha pro formulářPoložky z tabulky Kniha pro formulář

Postup tvorby formuláře je analogický případu 1), jen ještě připojíte druhou tabulku s vazbou (jako příklad vezměme opět tabulky Kniha a Spisovatel). V Base zvolte možnost Použít průvodce pro vytvoření formuláře. V prvním kroku vyberte tabulku Spisovatel, protože je na straně 1 vazby. Z oblasti Dostupná pole přesuňte všechny položky záznamu do oblasti Pole ve Formuláři. Ve druhém kroku tentokrát zatrhnete volbu Přidat podformulář. Dál vyberte přepínač Podformulář založený na existující relaci. Je ještě nutné kliknutím potvrdit tabulku, která se nabízí v oblasti s popisem Kterou relaci chcete přidat?, v našem případě je to tabulka Kniha. Teprve tím se stane aktivním tlačítko Další. Ve třetím kroku vybíráte pro formulář položky z připojené tabulky, navrhuji vybrat všechny kromě CtenarID, což je cizí klíč k tabulce Ctenar; údaje o čtenáři v tomto formuláři nejsou nutné.

Čtvrtý krok (Zobrazit spojená pole) je i v tomto případě v průvodci nedostupný, protože vazba byla jasně určena ve kroku druhém, takže není nutné ji vytvářet zde. Zbývající kroky jsou obdobné případu 1), v osmém kroku nastavíte vhodný název formuláře, např. FormSpisovatel-Kniha (nebo KnihovnaVerzeB.FormSpisovatel-Kniha u databáze, vytvořené v Base z MySQL). Buď přímo z průvodce nebo dodatečně se přepnete do režimu úprav (režimu návrhu) a formulář ještě vylepšíte.

Úpravy formuláře (v návrhovém zobrazení), druhá část

Další rady pro úpravy formuláře: Nad každou z oblastí polí dvou tabulek by bylo dobré napsat nadpis. Zde se projeví výhoda práce se styly: zobrazte si opět okno stylů (Formát | Styly a formátování) a nastavte prvnímu z nadpisů např. styl Nadpis2. Pokud tento styl vhodně upravíte (kliknutí pravou klávesou do textu a výběru volby Upravit styl odstavce...), bude po výběru téhož stylu u textu nad druhou tabulkou i zde už vše hotovo. Aby texty neobtékaly tabulky formuláře, nastavte tabulkám (pravá klávesa myši nad tabulkou) u Obtékání textu první volbu (Bez obtékání) a ještě poslední volbou (Obtékání textu | Upravit...) otevřete dialogové okno Obtékání textu a zde vhodný okraj nad a pod tabulkou:

Nastavení okrajů nad a pod tabulkou formulářeNastavení okrajů nad a pod tabulkou formuláře

Nakonec by formulář mohl vypadat třeba tak, jak ukazuje další obrázek. Zatím byly ponechány primární a cizí klíče, aby bylo vidět, jak vytvářejí vazbu; to, jak tyto sloupce později odstranit, bylo popsáno v první části textu o úpravách formuláře. Ve formuláři je vidět, že byla zadána další kniha k autorovi Steinbeck (v první tabulce formuláře je záznam spisovatele Steinbecka vybrán, což ukazuje zelený trojúhelníček vlevo; druhá tabulka pak zobrazuje všechny knihy tohoto autora).

Hotový formulář s nově zadanou knihouHotový formulář s nově zadanou knihou

Úkol 15, verze „A“: Protože většina vazeb v této verzi databáze vychází ze vztahu M – M, není tu moc „čistých“ vazeb 1 – M. Zkuste ale průvodcem vytvořit formulář pro údaje z tabulek Trida a Ctenar, mezi kterými tato vazba je. Víte, kterou z tabulek začít. Na tabulku Trida je tabulka Ctenar navázána dvakrát, ve druhém kroku průvodce vyberte třeba první z jejích výskytů.

Úkol 15, verze „B“: Vytvořte průvodcem formulář pro údaje ze dvou tabulek Spisovatel a Kniha (podle předchozího návodu) a z tabulek Ctenar a Kniha. I v tomto druhém formuláři bude dobré jeden z cizích klíčů vypustit, jistě přijdete na to, který (nápověda je na konci dílu).

Po splnění Úkolů 14 a 15 byste měli mít v databázi šest formulářů ve verzi „A“ (k tabulkám Spisovatel, Obor, Kniha, Trida a NastaveniDatabaze a ke dvojici tabulek Trida – Ctenar), nebo pět formulářů v databázi verze „B“ (pro data z tabulek Obor, Spisovatel, Ctenar a pro dvojice tabulek Spisovatel – Kniha a Ctenar – Kniha). Se zadáváním dalších dat do tabulek pomocí formulářů ale počkejte, v dalším dílu je ještě vylepšíme (pro snadnější možnost zadávání roku vydání knihy nebo data výpůjčky).

Další výhody formuláře oproti tabulce

V úvodním odstavci textu o formuláři bylo uvedeno, že formuláře usnadňují a zpřehledňují zadávání dat a že jejich prostřednictvím můžeme snáze zadávat data do několika tabulek databáze zároveň.

Formulář umožňuje také dobrou orientaci v záznamech (zobrazuje se číslo záznamu, celkový počet záznamů, snadno je možno přejít na první, poslední nebo nový záznam; základní navigaci nabízí ale i tabulky). Tabulky ale nenabízí možnosti formátování, rozevíracích polí (roletky s možnými hodnotami, oblast kalendáře pro výběr data atd.) Ve formuláři s podformulářem lze po výběru či zadání záznamu v nadřazené tabulce zobrazit najednou všechny související záznamy z druhé tabulky, na první navázané.

Otázky na závěr – Shrnutí osmého dílu

Plnění databáze daty – formuláře

  1. Je vhodné, aby běžný uživatel databáze (kromě jejího tvůrce a správce) pracoval přímo s tabulkami? Uveďte aspoň dva důvody vaší odpovědi.
  2. Je pro běžného uživatele důležité a přínosné, aby sledoval hodnoty primárních a cizích klíčů u záznamů databáze? Vysvětlete. Je rozumné je zobrazovat ve formulářích?
  3. Pokud vytváříte průvodcem formulář pro zadávání nebo prohlížení dat ze dvou tabulek, které jsou provázány vazbou typu 1 – M, jakou z tabulek si vyberete v průvodci jako první? Půjde o tabulku s násobností vazby 1 nebo M?
  4. Formulář sice vytváříte v Base a v dané databázi Base bude pak přístupný, ale je souborem z jiné aplikace; jaké? Ukažte, jak přejdete do režimu úprav formuláře v Base.

Nápověda k otázkám v textu tohoto dílu

Odpověď na otázku z Úkolu 12: (Promyslete (a do tabulky doplňte), jakými hodnotami v tabulce KnihaObor zajistit, aby knihám byly přiřazeny obory tak, jak ukazuje vzor.) Řešení pro naše cvičná data by mělo být toto (na pořadí řádků nezáleží, primární klíč doplnil Base sám, to, že je primární klíč umístěn jako poslední sloupec, není důležité):

Řešení Úkolu 12.Řešení Úkolu 12.

Nápověda k Úkolu 15, verze „B“: (Vytvořte průvodcem formulář pro údaje ze dvou tabulek Spisovatel a Kniha (podle předchozího návodu) a z tabulek Ctenar a Kniha. I v tomto druhém formuláři bude dobré jeden z cizích klíčů vypustit, jistě přijdete na to, který). Do formuláře Ctenar – Kniha nemusíte asi zahrnovat cizí klíč SpisovatelID z tabulky Kniha. Tento údaj (číslo typu Integer) by pro uživatele, který by pracoval s formulářem, stejně neměl smysl. Později bychom mohli vytvořit pokročilejší formulář, který by ke čtenáři umožnil vybrat (zadat) knihu a přitom by zobrazoval i autora (ovšem jménem a příjmením, ne číslem cizího klíče).

Co vás čeká v dalším dílu?

Budeme se dál zabývat formuláři a začneme také s dotazy v databázi, které mohou být kromě tabulek dalším zdrojem dat pro formuláře a pro sestavy. Zkuste ale nejdřív zadat některá data a sestavit jednodušší formuláře podle Úkolů 11 až 15 v tomto dílu.

(Jako ve škole) Průměr: 2.58 | Hodnotilo: 59
 

Komentáře

user avatar Václav
Odpovědět
Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty
15. 01. 2011, 10:18:15
Je to výborné i pro takové databázové amatéry, jako jsem já. Netrpělivě očekávám pokračování.
user avatar Josef Svoboda
Odpovědět
Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty
21. 01. 2011, 19:01:30
Děkuji za zájem. Víc věcí v poslední době způsobilo zdržení, ale na dalších dílech pracuji. Další by měl vyjít snad do týdne.
user avatar Václav Zahrádka
Odpovědět
Problém s otevřením databáze
4. 02. 2011, 08:48:44
Dobrý den,
v první řadě Vám moc děkuji za navody, které připravujete. Sám jsem neodolal a už pracuji.
Dnes mě ale program zaskočil.
Databáze místo aby se otevřela, žádá o výběr importního filtru a dále nespolupracuje. Mohl byste mi poradit, kde je chyba?
Včera jsem vše řádně ukončil (alespoň si to myslím) a dnes pracovat nemohu. Jak byste doporučil těmto problémům předcházet?
Děkuji. V. Zahrádka
user avatar Josef Svoboda
Odpovědět
Re:Problém s otevřením databáze
4. 02. 2011, 21:02:00
Vážený pane Zahrádko,
toto se mi v Base ještě nestalo. Zkusil jste databázový soubor otevřít oběma způsoby? Čili jak jeho výběrem z úvodního okna Base ("Otevřít existující databázový soubor"), tak poklepáním na soubor v souborovém manažeru?
Ve Windows XP se občas setkávám s tím, že se nechce otevřít soubor z balíku OpenOffice (stává se mi to s texty z Writeru) a musím nejdřív ukončit nějaké procesy, ale to asi není tento případ. Zkusil bych ale pro jistotu nejdřív (před spuštěním Base) důsledně pozavírat všechny ostatní programy z balíku OOo. Napište, jestli se Vám podařilo problém vyřešit.
user avatar V. Zahrádka
Odpovědět
Re:Re:Problém s otevřením databáze
5. 02. 2011, 00:39:27
Dobrý den.
Děkuji, že jste se ozval. Tenhle problém se mi vyskytl už jednou a nějak se mi podařilo nakonec to rozchodit. Tentokrát jsem zkusil otevřít soubor jak ze zástupce, tak i přímo z adreáře na disku, zkusil jsem povypínat jiné programy z OO, několikrát jsem počítač restartoval (měl jsem v šachtě flešku s portable aplikacemi, kde je i Open Office), ale nic nepomáhá. Dokonce nejde otevřít ani záložní soubor, který jsem měl v jiném adresáři. Vždy se objeví výzva k vyhledání importního filtru a protože v nabídce filtr pro tuto databázi není, tak tím končím. Starší zálohu, (ve které mám ale asi polovinu záznamů) otevřít jde. Včerejší a předvčerejší stav nefunguje.
Možná by bylo lepší, kdybychom se zkonktovali na mém mailu a až se dopracujeme nějakého výsledku, dali jej v plen veřejnosti.
Zdravím a děkuji.
##V##
user avatar student
Odpovědět
Re:Problém s otevřením databáze
25. 02. 2011, 11:36:54
Mal som niekoľko krát tento problém.... bohužiaľ niet riešenia (aspoň som ho nenašiel), ale zistil som príčinu.
Stalo sa to vtedy ak niekto v sieti ukončil prácu s databázou, ale tá ho vyzvala, že nastali zmeny a tie sa majú uložiť..... Lenže sa nič neuložilo na danom PC vybehla hláška - Oneskorený zápis sa nezdaril (to sa môže stať aj lokálne na PC).
Keďže došlo len k čiastočnému uloženiu súboru, teda nejaké dáta sa stratili a tak je súbor poškodený = nefunkčný, teda Base resp. OO nevie ktorému modulu ho má priradiť.
Mojím riešením bolo pravidelné vytváranie záloha a ak sa niečo podobné opakovalo, tak som jednoducho obnovil poslednú zálohu.
Časom (aj kôli 1-užívateľskému) prístupu som to zmenil na kombináciu MS SQL (to kôli kompatibilite inak by som použil MySql) a OO Base ako frontend pre databázu. Mimochodom funguje to nad očakávanie.
user avatar Luboš Králík
Odpovědět
Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty
24. 04. 2012, 11:45:23
Dobrý den,
široko daleko v české internetu jsem nenašel lepší tutorial na Base. Díky za něj, jinak bych se do svého projektu ani nepustil.
Mám na svou databázi jen základní požadavky. Prosím o radu s jedním z nich:
V databázi mám několik tabulek, které vyplňuji přes formuláře. Většina z nich obsahuje hlavičku s rodným číslem (RC), příjmením (prijmeni) a jménem (jmeno). Tyto údaje jsou v tabulce Nacionale, kde RC je primárním klíčem. Rád bych si zjednodušil práci a při zadávání do ostatních formulářů bych jen zadal příjmení osoby a nabídlo by mi to doplnění celé hlavičky včetně RČ a jména.
Jde to nějak jednoduše? Základy SQL si osvojuji.
Za odpověď Vám děkuji.
Králík
LibreOffice Base 3.5.2
user avatar kanec
Odpovědět
Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty
28. 01. 2014, 12:01:01
nejde to
user avatar Kuba
Odpovědět
Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty
23. 02. 2015, 09:39:19
Dobrý den chci se zeptat zda je nejake doporučení na zalohovaní databaze?
a také se chci zeptat zda je mmožne nastavit databaze tak ze na serveru ve firme bude mit jeden pc pristup k jednomu sloupci který muže upravovat ale ostatni sloupce ne? dekuji za odpoved
user avatar Lukáš Jelínek
Odpovědět
Re:Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty
23. 02. 2015, 10:59:38
Dobrý den,
pokud je řeč o databázi MySQL, tak malé databáze lze normálně "vysypat" do souboru pomocí nástroje mysqldump. U velkých to může být problém, protože aby se databáze udržela konzistentní, je potřeba ji zálohovat v jedné transakci (resp. ji celou zamknout v případě enginu MyISAM) a to může při provozu vadit, protože velká DB může zůstat zamčená třeba desítky vteřin. Pak je výhodné databázi replikovat do samostatného exempláře a ten teprve zálohovat. A co se týká práv, MySQL umožňuje nastavovat práva i na úrovni sloupců, takže může mít nějaký počítač (přesněji určitý uživatel při připojení z daného počítače) přístup omezen třeba jen na jeden sloupec.
user avatar Kuba
Odpovědět
Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty
23. 02. 2015, 11:12:36
Dobrý den , mohu poprosit oo radu jak nastavit ty prava trosku jsem se dotoho zamotal,dekuji za pomoc a odpoved
user avatar Lukáš Jelínek
Odpovědět
Re:Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty
23. 02. 2015, 14:13:25
Je to podrobně popsané v dokumentaci, ale ve stručnosti - například následující příkazy:

GRANT SELECT ON databaze.tabulka TO 'uzivatel'@'192.168.1.10';
GRANT UPDATE (sloupec) ON databaze.tabulka TO 'uzivatel'@'192.168.1.10';

přidělí práva uživateli "uzivatel" na počítači 192.168.1.10 tak, že tabulku "tabulka" v databázi "databaze" může celou prohlížet, ale měnit může jen sloupec "sloupec".
user avatar Franta
Odpovědět
Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty
5. 03. 2015, 23:38:04
dobrý den
Potřebuji poradit jak použít příkaz z MSOffice.
Mazání prázdných řádku,tento příkaz maže řádky podle označení sloupce
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
v LibreOffice Basic
předem děkuji Franta
user avatar Lenka
Odpovědět
Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty
6. 03. 2017, 18:54:24
Dobrý den, můžete mi prosím poradit jak vytvořím tlačítko "další" na které když kliknu tak se uloží stávající formulář, zavře se a otevře se jiný?
user avatar neutr
Odpovědět
Re:Práce s databází Base z OpenOffice.org (8) – Formuláře – plnění databáze daty
6. 03. 2017, 19:56:58
Lenko to se dělá tak že jedním formem zadáváte libovolný počet záznamů. Ale abychom to uměli upřesnit potřebujeme vidět Vaše konkrétní řešení.

Tohle je spíš na téma do fóra. Otevřete nový příspěvek v sekci Base. Pokud potřebujete zadávat do jiné databáze je to možné řešit - ale zase je to nutné vidět.

Tlačítko musí otevřít jiný form (nebo dialog) a zavřít ten stávající. Takže bez ukázky Vám asi těžko někdo správně poradí.

Odpovědět

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Josef Svoboda

Josef Svoboda

J. Svoboda učí M, F a IVT na Gymnáziu ve Frýdlantu nad Ostravicí

 
 
 
woo jaw demo hz