Tipy pro MS Access - práce s formuláři (pokračování)

1. 4. 1999

Sdílet

Práce s podformuláři- Pokud chcete ponechat možnost zadávání nových záznamů přímo do podformuláře (prostřednictvím jednoho z navigačních tlačítek) formulář např. zobrazuje úd...

Práce s podformuláři
- Pokud chcete ponechat možnost zadávání nových záznamů přímo do podformuláře

(prostřednictvím jednoho z navigačních tlačítek) formulář např. zobrazuje údaje

prodejce z tabulky Prodejci a podformulář seznam tímto prodejcem uzavřených

smluv z tabulky Smlouvy (vazba přes automatické číslo ID_Prodejce z tabulky

Prodejci) musíte použít událost podformuláře Před vložením (v orig. Before

Insert). V kódu této události je totiž třeba „vložit“ identifikační číslo

prodejce do nového záznamu jím uzavřené smlouvy takto:



Me![ID_Prodejce] = Forms![Prod_Smlouvy]![ID_Prodejce]



- Podformulář ve formě datového listu (tedy seznamu záznamů) poskytuje

uživateli velké možnosti práce s filtrem. Chcete-li uživateli navíc poskytnout

možnost aktuálně vybrané záznamy vytisknout, vytvořte na formuláři příkazové

tlačítko a zapište následující programový kód do události Po klepnutí

(Objednavky_Sez je název formuláře, sfrm Objednavky_Sez název podformuláře a

rptObj_Sez název tiskové sestavy):



Dim MyFilter As String

MyFilter = Forms![Objednavky_Sez]![sfrmOb­jednavky_Sez].Form.Filter

DoCmd.OpenReport „rptObj_Sez“, , , MyFilter



Předdefinavaná dialogová okna

- Pro zobrazení zprávy uživateli programu nabízí Access předdefinované modální

dialogové okno, které vyvoláte příkazem MsgBox. Funkce má několik parametrů

(text vlastní zprávy, zobrazená tlačítka, titulek okna, soubor s nápovědou) a

vrací podle stisknutého tlačítka příslušnou hodnotu Integer. Následující kód

ukazuje použití funkce (viz obr. t), kdy uživatel má možnost zrušit tisk:



resp = MsgBox(„Bude vytisknuta sestava prodeje.“, vbOKCancel + vbQuestion)

If resp = vbOK Then

DoCmd.OpenReport „rptSalesResults“

End If



- K zadání jednoho parametru uživatelem můžete použít druhé předdefinované

modální dialogové okno, které se zobrazí příkazem InputBox. Funkce vrací

proměnnou typu String (po stisknutí tlačítka Storno vrací prázdný řetězec),

jako parametr můžete zadat také přednastavenou hodnotu, bohužel však není možné

nadefinovat formát a kontrolu zadávaného údaje.



Doménové funkce

- Pokud chcete k aktuálnímu záznamu na formuláři vždy zobrazit pole z jiné

tabulky, nemusíte vytvářet podkladový dotaz tabulky, ale můžete použít funkci

DLookup. Např. k zobrazení názvu prodejní oblasti (tabulka Skupiny) na

formuláři s údaji prodejce (tabulka Prodejci, vazba přes numerické pole

ID_Skupiny) vytvořte textové pole a jako

zdroj tohoto pole zadejte výraz



=DLookUp(„[Oblast]“;„Skupiny“; „[ID_ Skupiny] =“ & Forms („Prod_Smlouvy“).[ID_

Skupiny]).



- Obdobou funkce DLookup je funkce DCount, která slouží k zobrazení počtu

záznamů (pro zjištění součtu je určena funkce DSum). K zobrazení celkového

počtu smluv uzavřených prodejcem (tabulky Prodejci a Smlouvy, vazba přes

numerické pole ID_Prodejce) na

formuláři osobních údajů prodejce zadejte zdroj dat do textového pole



=DCount(„[ID_Prodejce]“;„Smlou­vy“;„[ID_Prodejce] =“ & Forms(„Prod_Smlouvy“).

[ID_Prodejce]).



Poznámka: V případě textového typu pole ID_Prodejce by výraz pro zdroj dat

vypadal takto:



=DCount(„[ID_Prodejce]“;„Smlou­vy“;„[ID_Prodejce] =“ & „\“ &

Forms(„Prod_Smlouvy“).[ID_Prodejce] & „,“).



- Výše uvedené funkce (DLookUp, DCount, ale i některé další) tvoří skupinu tzv.

doménových agregačních funkcí. Tyto funkce mohou být použity na libovolnou

doménu, a ne tedy jen na vztaženou tabulku. Jako příklad může sloužit zobrazení

příjmení přímého nadřízeného na formuláři údajů prodejce, tedy údajů jiného

záznamu z téže tabulky Prodejci (numerická pole ID_Prodejce, ID_Nadrizeny,

…), viz obr. s. Zdrojem textového pole Nadrizeny pak bude výraz



=DLookUp („[Prijmeni]“; „Prodejci“; „[ID_Prodejce] =“ & Forms(„Prodejci“).

[ID_Nadrizeny]).



Další

- Chcete-li vytisknout sestavu pouze pro aktivní záznam formuláře

(např. údaje aktuálního prodejce), použijte parametr Where příkazu

DoCmd.OpenReport. Pro vytisknutí sestavy pouze aktuálního prodejce vytvořte na

formuláři tlačítko pro tisk a do události Při klepnutí (v orig. On Click)

zapište kód



DoCmd.OpenReport „rptProdejce“, , , „[ID_Prodejce] =

Forms![Prodejci]![ID_Prodejce]“,



kde rptProdejce je název tiskové sestavy a ID_Prodejce identifikační číslo

prodejce.



- Možná jste se setkali se situací, kdy jste zadali nový záznam prostřednictvím

formuláře (např. údaje nového zaměstnance) a ihned vytiskli tiskovou sestavu

(osobní kartu tohoto zaměstnace), která však byla prázdná. Údaje nového záznamu

totiž nebyly uloženy v tabulce automaticky se uloží přechodem na jiný záznam; k

uložení tak můžete použít příkaz DoCmd.RunCommand s parametrem acCmdSaveRecord.



9 0195/OK