Toate macrocomenzile pe care le-ați văzut până acum au fost liniare. Ei și-au executat macrocomenzile pentru a începe de la început până la sfârșit. Dacă acest lucru pare puțin monoton, atunci așa este. Dar macrocomanda dvs. nu trebuie să rămână astfel. Îi poți permite să ia decizii și să execute macrocomenzi condiționate. Și ca o încurajare sunt foarte ușor de întrebat.
Pentru a crea o macrocomandă cu o condiție, trebuie să aplicați coloana Conditionare. În mod normal, acesta nu este afișat. Pentru a fi vizibilă în constructorul macro, faceți clic pe Lucrul cu macrocomenzi | Constructor> Afișare sau ascundere> Condiții (Instrumente macro | Design> Afișare / Ascundere> Condiții).
Nu este surprinzător faptul că în coloana Stare sunt stabilite condiții. Condiția este similară cu o expresie, dar are întotdeauna una din cele două valori: Adevăr sau Fals. Programul Access verifică starea și decide cu ajutorul lui dacă va executa sau nu macroul corespunzător. (În limba programatorilor, aceasta se numește verificarea condiției.)
Acesta este modul în care funcționează acest mecanism.
Dacă lăsați coloana Stare goală (ca în cazul macrocomenzilor normale), programul Access execută întotdeauna această macrocomandă dacă nu este resetat din cauza unei erori;
Dacă condiția este setată și se dovedește a fi adevărată, Access execută macro-ul corespunzător;
Dacă condiția este setată și se dovedește a fi Falsă, accesul trece macro-ul și trece la următoarea comandă din listă.
Pe scurt - aveți o modalitate de a efectua o macrocomandă doar ocazional, după cum este necesar.
În cursul acestei discuții, apare o întrebare interesantă: cum să formați o condiție? În cele mai simple tipuri de condiții, se compară două valori diferite. Iată un exemplu:
Această condiție compară valoarea curentă a controlului ProductName cu cuvântul "Baloney" (cârnați afumați Bologna). Dacă ProductName conține în prezent acest text (și numai acesta), condiția este True. Dacă ProductName conține altceva, rezultatul condiției este False.
Uneori obțineți o condiție exact opusul a ceea ce ați dorit să creați. Într-un moment dificil, puteți oricând să schimbați starea la contrariul, punând cuvântul Nu la început. Condiția Nu [ProductName] = "Baloney" este egală cu Adevărul numai dacă articolul curent nu conține produsul din carne pe care îl iubește toată lumea.
Semnul egal (=) este una dintre principalele componente ale logicii condiționale, dar nu singura opțiune. Operația semnează "mai mult decât" (>) și "mai puțin decât" (<) и оператор "не равно" (о). Далее приведено выражение, проверяющее, больше ли числовое поле определенного значения:
Din motive de importanță, puteți adăuga funcțiile de acces preferate la mix. (Capitolele 4 și 7 descriu multe funcții utile.) Următoarea este o condiție care verifică lungimea câmpului și returnează o valoare True dacă câmpul are mai puțin de trei caractere:
Len ([FirstName]) <3
În loc de operatorii pe care i-ați văzut până acum, puteți folosi funcția care dă rezultatul Adevărului sau Falsei pentru a crea propriile condiții. Experții în programare numesc rezultatul, care poate fi Adevărul sau Lie și nimic altceva, o valoare booleană în onoarea supermateticianului britanic George Boole.
Programul Access are doar câteva funcții care returnează valori booleene, dar cea mai remarcabilă dintre aceste galaxii stelare este numită IsNull (). După cum ați învățat mai devreme, câmpurile goale sunt câmpuri care nu conțin date. Funcția IsNull () verifică dacă câmpul sau controlul este gol. Iată cum puteți să-l utilizați pentru a identifica numele lipsă:
Această condiție duce la valoarea True dacă nu există date în câmpul Nume curent.
Tehnica descrisă este blocul principal pentru generarea logicii de verificare (după cum veți vedea în secțiunea următoare). Utilizați funcția IsNull () pentru a detecta datele pierdute și pentru a avertiza utilizatorul care utilizează macroul că a pierdut ceva important.
În concluzie, ultima metodă care poate fi utilizată în condiții este combinația mai multor condiții pentru crearea de super-condiții mai puternice. Pentru a face acest lucru, există două cuvinte cheie care vă pot ajuta să combinați condițiile: Și (I) și Or (Or).
Și necesită îndeplinirea simultană a ambelor condiții, făcând astfel starea dvs. mai strictă. Următoarea condiție returnează un rezultat True numai dacă ambele câmpuri FirstName și LastName sunt mai lungi de trei caractere fiecare:
Len ([FirstName]) <3 And Len([LastName]) <3
Sau oferă două alternative pentru a îndeplini această condiție. Următoarea condiție returnează true dacă câmpul FirstName sau LastName este gol. Returnează minciunile numai dacă există text în ambele câmpuri.
IsNull ([FirstName]) sau IsNull ([LastName])
Cu aceste blocuri - operatori condiționali, funcții și cuvinte cheie Nu, Și și - Puteți crea multe condiții. În următoarea secțiune, veți vedea un exemplu care face ca condițiile să funcționeze.
Verificarea datelor folosind condițiile
Multe dintre guru-urile de acces utilizează macrocomenzi pentru a împiedica modificarea incorectă și alte operații suspecte pe date (de exemplu, inserții și ștergeri). Acum că înțelegeți cum să scrieți o condiție, puteți dezvolta cu ușurință o logică de testare de acest fel.
După cum se știe din capitolul 4, programul Access are mai multe instrumente care pot ajuta la protejarea datelor din tabel, inclusiv măști de intrare, condiții pentru valori și substituții. Trebuie să încercați întotdeauna să aplicați aceste instrumente înainte de a trece la macrocomodare. Cu toate acestea, există multe tipuri de erori care necesită utilizarea de macrocomenzi. Un exemplu obișnuit este corectitudinea unui câmp, în funcție de valoarea celuilalt câmp.Primul pas este de a răspunde la evenimentele potrivite - în special, Înainte de Lipire, Înainte de Upgrade și Înainte de confirmări. Când apar, puteți să îndepliniți condițiile și să găsiți între ei eronatul. Dacă vedeți ceva care nu vă place, utilizați comanda CancelEvent pentru a întrerupe complet procesul și, astfel, anulați operația de inserare, actualizare sau ștergere.
Fig. 15.21. Atunci când este selectată opțiunea Vă rugăm să anunțați-mă despre oferte speciale (vă rugăm să anunțați-mă despre ofertele speciale), câmpul WantsEmail este setat la Da. Dar această intrare are o problemă - nu există nicio valoare în câmpul E-mail
Comanda UndoEdit nu are argumente - pur și simplu întrerupe procesul care se execută în prezent. Anulare Evenimentul funcționează cu orice eveniment care începe cu cuvântul "Înainte", ceea ce înseamnă că operația reală este gata de execuție, dar nu este încă executată.
Să presupunem că doriți să creați o condiție simplă care oprește actualizarea unei anumite înregistrări. Luați în considerare forma prezentată în Fig. 15.21.
Veți avea nevoie de următoarea condiție logică:
WantsEmail = Da și IsNull ([EmailAddress])
Această condiție returnează adevărat dacă WantsEmail este Da și EmailAddress este gol. După ce sa terminat, este timpul să anulați actualizarea utilizând macrocomanda CancelExecute.
Nu există altă opțiune. Puteți utiliza comanda Setare valoare pentru a înlocui valorile incorecte. Dar, de regulă, este mai bine să permiteți utilizatorului care efectuează actualizarea să încerce să rezolve problema singură.
Atunci când un eveniment este anulat, acesta nu derulează nicio modificare. Anularea evenimentului împiedică finalizarea operațiunii. Dacă înregistrarea se modifică și se face o încercare de a merge la o altă intrare, apare evenimentul Înainte de actualizare. Dacă macrocomanda anulează acest eveniment, programul Access vă interzice să navigați la o altă înregistrare și vă lasă în același loc. Dar înregistrarea curentă rămâne în modul de editare cu toate valorile editate. Cazul dvs. este de a rezolva problema sau de a apăsa tasta
Condiționat macro Undo Evenimentul este inima multor macrocomenzi de verificare. Dar aveți nevoie de încă o atingere finală: mesajul de eroare. Altfel, utilizatorul care efectuează actualizarea nu va ghici ce este problema. El va fi înclinat să creadă că accesul a dispărut complet de pe role.
Puteți utiliza macroul Mesaj (MsgBox) pentru a afișa mesajul de eroare. Este clar că doriți să afișați un mesaj de eroare numai dacă apare eroarea, astfel încât comenzile Undo și Post trebuie să includă condiții.
Programul Access are un instrument fantastic de accelerare, care vă ajută să utilizați de două ori același macro dacă este necesar. În loc să repetați aceeași condiție de lângă fiecare macro (care este puțin enervant), introduceți pur și simplu trei puncte (...) în coloana Condition pentru fiecare macro următoare. Aceste trei puncte reprezintă o modalitate scurtă de a spune accesului pentru a aplica condiția din macro-ul anterior.
În Fig. 15.22 prezintă macro-ul finalizat, iar în Fig. 15.23 - macro-ul care rulează.
Fig. 15.22. Această macrocomandă constă din două macrocomenzi cu o condiție. Pentru a bloca datele incorecte, atașați-le la evenimentele Pending și Upstream.