L8: Akční dotazy v MS Access
Akční dotazy umožňují měnit data v tabulkách (obsah) a strukturu databáze.
Spuštění akčních dotazů závisí nejenom na nastavení
pravidel uvnitř databáze, ale i na systémových oprávněních k přístupu.
Zde si vyložíme základní pravidla nastavení databáze a systému, aby mohly
být akční dotazy provedeny. Nejpřísnější omezení platí pro dotazy
aktualizační a odstraňovací, pro ostatní jenom některá.
Jedno doporučení pro všechny akční dotazy:
pořiďte si kopii databáze, aby při případném selhání
akce nebo při chybě v textu dotazu nedošlo ke zničení dat.
Typy akčních dotazů, které lze sestavit v návrháři dotazů:
- Vytvářecí
- Přidávací
- Aktualizační
- Odstraňovací
Pro úplnost uvádím ještě další různé typy dotazů, které se píší přímo v jazyku SQL a nebudou dále diskutovány:
- Sjednocovací
- Předávací
- Definiční
Vytvářecí dotazy
Takovýmto dotazem vytvoříme novou tabulku a naplníme jí záznamy na základě tabulek již existujících, nebo na základě existujících dotazů. Přidat lze i vypočtené hodnoty. Dotaz tohoto typu použijeme jako okamžitý snímek momentálního stavu tabulek v databázi, např. pro následnou kontrolu nestandardního stavu uložených hodnot nebo pro test programu. Většinou se ke kontrolním záznamům připojuje časový údaj.
Popis postupu
V naší databázi db1 vytvoříme pro kontrolu tabulku tbqPracovnik, abychom zachytili momentální stav tabulky tb1Pracovnik. Začneme již známým postupem. Z menu VYTVOŘENÍ klepneme na ikonu Návrh dotazu a po zobrazení formuláře Přidat tabulku vybereme tabulku tb1Pracovnik, formulář zavřeme.
V menu NÁVRH klepneme na ikonu Vytvářecí a program zobrazí výzvu Vytvořit tabulku. V položce Název tabulky zadáme tbqPracovnik a klepneme na OK.


Všechna pole tabulky tb1Pracovnik přeneseme do pracovní tabulky a přidáme vypočtené pole s časovým údajem v době spuštění dotazu, který realizuje funkce Now(), zapisující aktuální hodnotu datumu a času: Cas: Now()
Přidávací dotazy
Takovýmto dotazem přidáme záznamy do již existující tabulky. Přidávané hodnoty do jednotlivých polí mohou být z více zdrojů, ať už z tabulek nebo dotazů, ale mohou to být i vypočtené hodnoty. Typickým příkladem je archivace hodnot v tabulkách databáze k určitému datu, kdy naplňujeme tabulku dříve vytvořenou. Na rozdíl od předchozího se cílová tabulka dotazem nevytváří.
Popis postupu
V naší databázi db1 přidáme záznamy do tabulky
tbqPracovnik, vytvořené vytvářecím dotazem.
Začneme již
známým postupem. Z menu VYTVOŘENÍ klepneme na ikonu
Návrh dotazu a po zobrazení formuláře Přidat
tabulku vybereme tabulku tb1Pracovnik, formulář
zavřeme.
V menu NÁVRH klepneme na ikonu Přidávací a program zobrazí výzvu Přidat. V položce Název tabulky zadáme tbqPracovnik a klepneme na OK. V pracovní tabulce přibyl řádek Přidat do:, který specifikuje, do kterého pole cílové tabulky tbqPracovnik budou hodnoty polí zdrojové tabulky tb1Pracovnik zapsány.
Z cvičných důvodů zapíšeme pole Jmeno zdrojové tabulky do pole Prijmeni tabulky cílové a podobně zapíšeme tb1Pracovnik.Prijmeni na pole tbqPracovnik.Jmeno. Doplníme časový údaj podobně jako v předchozím případě. Pokud vypočtené pole nepojmenujeme, program to udělá doplněním názvu automaticky. Dále do řádku Kritéria: doplníme podmínku výběru záznamů. Vytvořený dotaz je na obrázku.

Pozor na náhled dotazu z ikony Zobrazení.
Ten zobrazí výběrový dotaz, který je první částí dotazu přidávacího,
tedy vidíme pole Jmeno a Prijmeni tak, jak
jsou uloženy v tabulce tb1Pracovnik.

Vrátíme se do návrhového zobrazení a dotaz spustíme ikonou
Spustit, zobrazí se výzva programu Chystáte se
přidat 2 řádků, klepneme na Ano a následně si
prohlédneme záznamy v tabulce tbqPracovnik. Vidíme, že u
přidaných záznamů jsou hodnoty v polích Jmeno a
Prijmeni zaměněny.

Dotaz při zavření uložíme pod názvem qry0221.
Aktualizační dotazy
Takovými dotazy lze změnit hodnoty polí uložené v tabulkách. Zdrojem ke změně mohou být jiné tabulky, dotazy, nebo vypočtené údaje. Příkladem může být např. sloučení dvou oddělení ve firmě do jednoho a v tomto smyslu je třeba změnit uložené záznamy pracovníků.
Popis postupu
V naší databázi db1 v záznamech tabulky tb1Pracovnik změníme hodnoty v poli Oddeleni aktualizačním dotazem.
- Začneme již známým postupem. Z menu VYTVOŘENÍ klepneme na ikonu Návrh dotazu a po zobrazení formuláře Přidat tabulku vybereme tabulku tb1Pracovnik, formulář zavřeme.
- V menu NÁVRH klepneme na ikonu Aktualizační a program v pracovní tabulce přidal řádek Aktualizovat do:. Do prvního sloupce pracovní tabulky přidáme Oddeleni z tabulky tb1Pracovnik. V řádku Aktualizovat do: zapíšeme novou hodnotu 88. Tím by se změnila hodnota u všech záznamů, ale my chceme změnit pouze oddělení číslo 2 na číslo 88. Musíme tedy do změny vybrat záznamy podmínkou v řádku Kritéria:. Zapíšeme 2.

Klepnutím na ikonu Zobrazit vidíme dotaz s jedním polem
Oddeleni a dvěma záznamy s hodnotou 2. Vrátíme
se do návrhového zobrazení a klepnutím na ikonu Spustit se
zobrazí výzva programu Chystáte se aktualizovat 2 řádků,
klepneme na Ano a následně si prohlédneme záznamy v tabulce
tb1Pracovnik. Dva záznamy mají v poli Oddeleni
zapsánu hodnotu 88.

Dotaz uzavřeme a uložíme pod názvem qry0231.
Odstraňovací dotazy
Cílem těchto dotazů je odstranit z tabulky nebo z více tabulek záznamy podle nastavených podmínek. Nejde o rušení tabulek, ale údajů v nich obsažených! Příkladem může být pracovník, který opustil firmu a jehož data byla archivována.
Popis postupu
V naší databázi db1 v tabulce tb1Deti zrušíme všechny děti pracovníka číslo 10101 odstraňovacím dotazem.
Začneme již známým postupem.
- Z menu VYTVOŘENÍ klepneme na ikonu Návrh dotazu a po zobrazení formuláře Přidat tabulku vybereme tabulku tb1Děti, formulář zavřeme.
- V menu NÁVRH klepneme na ikonu Odstranit, vidíme v pracovní tabulce nový řádek Odstranit:. Budeme rušit celé záznamy, vybereme do prvního sloupce pracovní tabulky hodnotu tb1Deti.*, která představuje všechna pole tabulky tb1Deti. V řádku Odstranit: program nastavil From, s významem z tabulky.
- Chceme odstranit záznamy o dětech pouze jednoho pracovníka a to sdělíme programu nastavením podmínky. V druhém sloupci pracovní tabulky nastavíme Cislo, program v řádku Odstranit nastaví hodnotu kde s významem nastavení omezující podmínky. My doplníme v řádku Kritéria: hodnotu 10101.


Vrátíme se do návrhového zobrazení a klepnutím na ikonu
Spustit program zobrazí výzvu Chystáte se odstranit
2 řádků z dané tabulky. Klepnutím na Ano se
zrušení záznamů provede. Dotaz při zavření uložíme pod názvem
qry0241.
