Preverjanje Accessovega obrazca s kontrolnikom WklValidator
Polja z besedilom na Accessovem obrazcu (obrazcu za urejanje ob seznamu, pogovornem oknu ali katerem koli vezanem obrazcu) preverite s pravili za posamezna polja in za celoten zapis, napake prikažite ob poljih in v povzetku ter preprečite, da bi se shranil zapis, ki krši pravilo.
Zahteva WKL Forms Object Library 1.31 ali novejšo različico.
Pregled rešitve
- En kontrolnik na obrazcu. WKL Validator (kontrolnik ActiveX) vstavite tja, kjer naj bo povzetek, na primer pod polja. Dokler ni napak, ne nariše ničesar.
- Prazen modul. Lastnost obrazca Ima modul nastavite na Da. Access dogodke obrazca posreduje kontrolniku samo, če ima obrazec modul; zadošča prazen. Lastnosti dogodkov, ki jih potrebuje, preverjalnik sam nastavi na [Dogodkovna procedura].
- Pravila na straneh oblikovalnika Pravila polj in Pravila zapisa ali kot JSON v
Rules: za poljerequired,maxLength,pattern,min,max,valueList,text, po željiwhen(pravilo velja le, dokler ima drugo polje eno od navedenih vrednosti); za zapisexactlyOne,atLeastOne,atMostOneprek več polj. - Kaj vidi uporabnik: ko zapusti polje, ki krši pravilo, fokus ostane v njem; polje dobi rdečo obrobo, sporočilo pa se prikaže kot njegov zaslonski namig; preverjalnik prikaže „Napak: 2 – …“, klik nanj pa skoči na prvo napako. Shranjevanje zapisa, ki krši pravilo, je zavrnjeno – tudi shranjevanje, ki ga Access izvede, ko se fokus z zasidranega obrazca za urejanje vrne na njegov seznam. Okna s sporočili se ne odpirajo.
Izvedba
Obrazec za urejanje frmIdentity (vezan na tblIdentity, s praznim modulom) je zasidran ob seznamu. Polje Login
sestavljajo male črke in je obvezno za vrsto „Login“; identiteta navaja natanko eno od treh možnosti: osebo, račun
Windows ali ključ:
' Once, in design view (or on the designer's pages); the rules are saved with the form.
Forms!frmIdentity!Validator1.Object.Rules = _
"{""fields"":[" & _
"{""field"":""Login"",""pattern"":""[a-z]+"",""text"":""Prijavno ime samo z malimi črkami""}," & _
"{""field"":""Login"",""required"":true,""when"":{""field"":""Kind"",""equals"":""Login""}}]," & _
"""records"":[{""exactlyOne"":[""PersonId"",""Account"",""KeyId""],""text"":""Navedite natanko en vir""}]}"
Lasten gumb za shranjevanje v povzetku sporoči tudi zavrnitev podatkovne storitve:
Private Sub cmdShrani_Click()
On Error GoTo Zavrnjeno
If Not Me!Validator1.Object.Validate Then Exit Sub ' shows what is missing
Me.Dirty = False
Exit Sub
Zavrnjeno:
Me!Validator1.Object.SetError "", Err.Description
End Sub
Pogosti vzorci:
| Polje | pattern |
|---|---|
| Identifikator, kot ga poimenuje SQL Server (brez vezaja) | [A-Za-z_][A-Za-z0-9_]* |
| Omrežje IPv4 v zapisu CIDR | (25[0-5]|2[0-4]\d|1?\d?\d)(\.(25[0-5]|2[0-4]\d|1?\d?\d)){3}/(3[0-2]|[12]?\d) |
| Poštna številka (Slovenija) | [0-9]{4} |
V JSON je vsaka poševnica nazaj zapisana dvakrat (\\d).
Opombe
- Brez modula preverjalnik sam ne preverja ničesar. To sporoči v svojem pravokotniku („Preverjanje neaktivno …“),
IsConnectedpa je False;Validate, poklican iz kode, še vedno deluje. Glejte Preverjalnik ničesar ne preveri. - Kako so poimenovana polja.
fieldje ime kontrolnika ali polje, ki ga kontrolnik prikazuje (njegov vir kontrolnika; izračunani kontrolniki nikoli ne štejejo); enako velja zawhen.fieldin polja pravil zapisa. Polje brez kontrolnika se prebere iz zapisa in preveri, vendar ni označeno. Sporočila polje poimenujejo z napisom pripete oznake kontrolnika – oznaka, prosto postavljena zraven, ne šteje. - Vzorci se vedno ujemajo s celotnim besedilom (
^/$ni treba), so regularni izrazi .NET (\\p{L}za katero koli črko v JSON), preverjajo samo vnesene vrednosti in če preverjanje traja dlje kot četrt sekunde, vzorec velja za neujemajoč. - Lastnosti dogodkov, ki vsebujejo makro ali izraz, ostanejo nespremenjene; ta dogodek nato prejme makro, ne preverjalnik. Uporabite [Dogodkovna procedura] in makro pokličite iz procedure.
- Napake vira podatkov pri shranjevanju – pravilo za veljavnost tabele, podatkovna storitev, ki zapis zavrne prek svojega gonilnika ODBC – se prikažejo v povzetku namesto v oknu s sporočilom Accessa (
HandleDataErrors, privzeto vklopljeno), z razlogom gonilnika – pri shranjevanju, ki ga Access izvede med uporabnikovim dejanjem. Shranjevanje, ki ga sproži vaša koda (Me.Dirty = Falsein tudi premik fokusa s kodo, na primerarea!grdMain.SetFocus), napako namesto tega sporoči tej kodi, kot v vsakem Accessovem obrazcu (na primer napako 3316 pravila za veljavnost tabele ali 3155 gonilnika ODBC, ki zapis zavrne); besedilo podajte metodiSetErrorkot zgoraj. Glejte Zavrnjeno shranjevanje se ne pokaže v povzetku preverjalnika. - Nov zapis, shranjen zapis in razveljavitev počistijo napake;
ClearErrorskadar koli obnovi obrobe in zaslonske namige. - Preverjanja, ki jih ne morete zapisati kot pravilo, sodijo v dogodek
ValidateRecord(Message, Cancel) – za razliko od pravil potrebuje kodo v modulu. - Gradnja s kodo: preverjalnik vstavite kot gradnik kontrolnika, ne s
CreateControl– glejte Vstavljanje kontrolnikov WKL v obrazce s kodo. - Preverjalnik deluje na Accessovih obrazcih; na uporabniških obrazcih (UserForm) v Excelu in Wordu nima obrazca, ki bi ga preverjal.
Sorodne teme
- Preverjanje vnosa v celice – ista pravila za celice seznama
sl/wiki/msaccess/comctl/how-to/check-a-form-with-the-validator.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille