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