Máme za úkol vytvořit adresář osob včetně tisku adresních štítků pro pozvánky na odborné akce. Dále budeme evidovat údaje pro jednotlivé akce (ty budeme používat při tisku různých sestav). Jednotlivé osoby budeme přiřazovat jako účastníky k jednotlivým akcím a doplňovat potřebnými údaji jako jsou platby za sborník, stravu apod.
Ze systému budeme tisknout kromě jiného také jmenovky účastníků. Proto jsou účastníci děleni do jednotlivých skupin (účastníci, organizátoři apod.). Tisk jmenovek se často doplňuje logem konference, to je rovněž uloženo u údajů konference.

Obr. 5. Datová struktura evidence vědeckých konferencí

Obr. 6. Formulář pro práci s adresářem
Při práci s adresářem se očekává, že bude nutné vybírat osoby podle různých požadavků. Na obr. 6 je uveden formulář pro práci s adresářem. V horní části je nabídka různých možností výběru. Vybrané osoby je možno označit nebo zrušit jejich označení (odznačit). Pokud se nám totiž nepodaří vybrat osoby jiným způsobem, můžeme je ručně označit a pak vybrat jen označené osoby. Tisk adresních štítků se totiž provádí pro aktuální výběr osob.
V dolní části je rovněž tlačítko, kterým je možno zapsat aktuální osobu k aktuální akci jako účastníka zvoleného typu. Přitom se samozřejmě kontroluje, zda osoba není zapisována na akci opakovaně.
Výběr záznamů probíhá obdobně také při práci s účastníky konkrétní akce. Protože kombinací výběru je velké množství, byla vytvořena funkce, která kontroluje údaje jednoho záznamu (účast osoby na akci) a vrací logickou informaci, zda záznam vyhovuje aktuálnímu požadavku. Ve zdrojovém dotazu pro formulář pak pro každý záznam testujeme, zda funkce vrací hodnotu 1.
Function UcastFiltrDej (Jm As Variant, Org As Variant, St As Variant, Tisk As Variant, Kl As Variant, Poc As Variant) As Integer
*********************************************************
Kontrola aktuálního záznamu, zda vyhovuje filtru
*********************************************************
Dim Mul As Integer
Mul = 0
If IsNull(UJmeno) Or UJmeno = Then
Mul = Mul + 1
Else
If IsNull(Jm) Or Jm = Or InStr(Jm, UJmeno) 0 Then
Mul = Mul + 1
End If
End If
If IsNull(UOrganizace) Or UOrganizace = Then
Mul = Mul + 1
Else
If IsNull(Org) Or Org = Or InStr(Org, UOrganizace) 0 Then
Mul = Mul + 1
End If
End If
If IsNull(UStat) Or Ustat = Then
Mul = Mul + 1
Else
If IsNull(St) Or St = Or InStr(St, UStat) 0 Then
Mul = Mul + 1
End If
End If
If IsNull(UTisk) Or Utisk = Then
Mul = Mul + 1
Else
If IsNull(Tisk) Or Tisk = Or Tisk = UTisk Then
Mul = Mul + 1
End If
End If
If IsNull(USkupina) Or USkupina = Then
Mul = Mul + 1
Else
If IsNull(Kl) Or Kl = Or InStr(Kl, USkupina) Then
Mul = Mul + 1
End If
End If
If IsNull(UUHost) Or UUHost = 0 Then
Mul = Mul + 1
Else
If IsNull(Poc) Or UUHost = Poc Then
Mul = Mul + 1
End If
End If
If Mul = 6 Then
UcastFiltrDej = 1
Else
UcastFiltrDej = 0
End If
End Function
Z výpisu je zřejmé, že funkce pracuje s uloženými požadavky filtru. Ty se ukládají vždy po změně obsahu položky filtru pomocí následující funkce. O který parametr se jedná, určuje vlastnost Tag aktuálního objektu formuláře.
Function UcastFiltrSet ()
*********************************************************
nastavení globální proměnné pro filtr záznamů
*********************************************************
Dim C As Control
Set C = Screen.ActiveControl
Select Case C.Tag
Case 1
If IsNull(C.Value) Then
UJmeno =
Else
UJmeno = C.Value
End If
Case 2
If IsNull(C.Value) Then
UOrganizace =
Else
UOrganizace = C.Value
End If
.....
Case Else
MsgBox Chybné volání procedury UcastFiltrSet()
End Select
End Function
Je potřeba nezapomenout na počáteční nastavení proměnných pro filtr. Nejlépe při otevření formuláře, který filtr používá.
Function UcastFiltrInit ()
*********************************************************
Nastavení proměnných pro filtr záznamů
*********************************************************
UJmeno = UOrganizace = UStat = UTisk = Null USkupina = UUHost = Null End Function