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]![sfrmObjednavky_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]";"Smlouvy";"[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]";"Smlouvy";"[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