Access/ makra.

Makra i akcje.

Makra to namiastka programowania ...

Makra to proste procedury składające się z sekwencyjnie (ale warunkowo) wykonywanych akcji.

Obiekt klasy "makro" może zawierać kilka makr o różnych nazwach (makra nazwane):
Nazwa makra Warunek Akcja Komentarz
Moje makro A <warunek1> <akcja1>  
  <warunek2> <akcja2>  
       
Moje makro B <warunek3> <akcja3>  
  <warunek4> <akcja4>  
  <warunek5> <akcja5>  
       
      a teraz konkretne przykłady ...
Sprawdź dane [imie i nazwisko] is null OknoKomunikatu wyświetla komunikat ostrzegawczy
  ... AnulujZdarzenie anuluje zdarzenie
  ... PrzejdźDoFormantu uaktywnia pole [imie i nazwisko]
  ... ZatrzymajMakro  
  [nr telefonu] is null OknoKomunikatu wyświetla komunikat ostrzegawczy
  ... AnulujZdarzenie anuluje zdarzenie
  ... PrzejdźDoFormantu uaktywnia pole [nr telefonu]
  ... ZatrzymajMakro  
       

Uwaga: Napis "..." w kolumnie Warunek oznacza "ten sam warunek co wyżej".

Dla każdej akcji można określić szczegółowe argumenty akcji  w dolnej części okna (klawisz F6).

W makrach są dostępne m.in. następujące akcje:

Nazwa angielska Nazwa polska Argumenty  
OpenForm OtwórzFormularz Nazwa formularza,
Widok,
Nazwa filtru,
Warunek Where,
Tryb danych
otwiera formularz podany w "argumentach"
Requery PonówKwerendę Nazwa formantu odświeża listę pola kombi czerpiącą dane z tabeli/kwerendy

... oraz cała masa innych ...

W pomocy można szukać opisu akcji posługując się angielską nazwą;
oto spis nazw wszystkich akcji wyciągnięty z pomocy programu Access 2.0 :

 

Zdarzenia.

Makra są często używane jako reakcja na zdarzenie związane z pewnym obiektem (kontrolką, formularzem itp).

Typ obiektu Zdarzenia kiedy się pojawia
kontrolka kombi Przy wejściu przy wejściu do kontrolki (np klawiszem TAB)
Przy zmianie po zmianie zawartości kontrolki
Przy aktualizacji po zmianie wartości pola z którym kontrolka jest związana (czyli przy próbie wyjścia z kontrolki po modyfikacji jej zawartości)
formularz Przed aktualizacją
(ang. BeforeUpdate)
przed aktualizacją rekordu; można anulować tę aktualizacje przy pomocy akcji AnulujZdarzenie
kontrolka przycisk polecenia Przy kliknięciu po kliknięciu myszą na guzik (lub naciśnięciu "z klawiatury" klawiszem spacja)

Obsługę zdarzeń definiuje się w okienku Właściwości (zakładka "Zdarzenia") danego obiektu.

Uwaga: krótkie opisy zdarzeń widać w linii statusu gdy postawimy kursor na danym zdarzeniu w okienku Właściwości !.

Makro "Sprawdź dane" nadaje się do kontroli poprawności danych wprowadzonych do formularza (sprawdza się czy pole [imie i nazwisko] oraz [nr telefonu] mają niepustą wartość, jeśli nie to nie da się zmodyfikować rekordu). Makro to powinno obsługiwać zdarzenie "Przed aktualizacją" formularza.

.......................................................................
 

Podsumowanie pojęć związanych z makrami:
  • obiekt klasy "makro"; makra nazwane
  • akcja; argumenty akcji
  • zdarzenia

Zadanie 13


Utwórz pusty formularz niezwiązany (z żadną tabelą) i dodaj do niego guzik którego naciśnięcie powoduje wyświetlenie komunikatu "A ku ku !" (poza tym guzik ten niczego sensownego nie robi); użyj akcji OknoKomunikatu.

Zadanie 13a


Do formularza "Klienci" magazynowej bazy danych dodaj kontrolę poprawności wprowadzonych danych przy pomocy makra "Sprawdź dane".

Nazwa makra Warunek Akcja Komentarz
Sprawdź dane [imie i nazwisko] is null OknoKomunikatu wyświetla komunikat ostrzegawczy
  ... AnulujZdarzenie anuluje zdarzenie
  ... PrzejdźDoFormantu uaktywnia pole [imie i nazwisko]
  ... ZatrzymajMakro  
  [adres] is null OknoKomunikatu wyświetla komunikat ostrzegawczy
  ... AnulujZdarzenie anuluje zdarzenie
  ... PrzejdźDoFormantu uaktywnia pole [adres]
  ... ZatrzymajMakro  
       


 

Wprowadzanie danych poprzez kwerendę.

Zadanie 14


Do magazynowej bazy danych dodaj:

Uwaga: zakładamy że do każdej kategorii należy kilka towarów ale i jeden towar może należeć równocześnie do kilku kategorii (czyli związek TowaryKategorii jest typu "wiele do wielu").

Następnie utwórz kwerendę TK1 zawierającą następujące pola:

[nazwa towaru], [id towaru], [nazwa kategorii], [id kategorii]

Uwaga: [id towaru] i [id kategorii] MUSZĄ pochodzić z tabeli TowaryKategorii !.

Następnie otwórz Towary, Kategorie, TowaryKategorii, TK1 (tak jak to pokazano na poniższym obrazku) i spróbuj wprowadzić poprzez kwerendę TK1 następujące dane:

  1. nowy związek miedzy towarem i kategorią (istniejący w tabeli towar i istniejąca kategoria); innymi słowy stwierdzamy że dany towar należy do pewnej kategorii
  2. nowy towar i nic więcej (po wpisaniu nowej nazwy towaru odśwież TK1 - Shift+F9)
  3. nową kategorie oraz związek między tą nową kategorią i istniejącym towarem
  4. nowy towar, nową kategorię oraz związek między nimi (tj stwierdzamy że nowy towar należy do nowej kategorii)

Każdorazowo po wprowadzeniu danych do kwerendy TK1 sprawdź co się zmieniło w tabelkach ! (odświeżanie - Shift+F9).

(Koniec zadania 14)

 

Access/ złożone formularze.

Okazuje się że "model formularz/podformularz" nie zawsze jest wystarczający ...

Przykładowo, po dodaniu do magazynowej bazy danych "kategorii" (jak w zadaniu 14) można w prosty sposób wprowadzać kategorie i towary bieżącej kategorii (w podformularzu), ale jak wprowadzić informacje że dany towar należy także do innych kategorii ???
[na to pytanie odpowiadamy w poniższych zadaniach]

Zadanie 15


W magazynowej bazie danych z kategoriami:

Całość powinna wyglądać mniej więcej tak:

Wskazówki do zadania 15:

Zadanie 15a


(To jest ulepszona wersja zadania 15 !)
W magazynowej bazie danych z kategoriami:

Całość powinna to wyglądać tak:

Wskazówki do zadania 15a:

Zadanie 16


Do formularza Klienci (służącego do wprowadzania klientów i ich zamówień) dodaj nową możliwość:

Powinno to wyglądać tak:

Można zobaczyć jak to powinno działać w bazie bd04_2002.mde na formularzu "Klienci 2 <--".

Wskazówki do zadania 16:


 

Obliczenia na formularzu.

Na formularzu można przeprowadzać obliczenia ...

Zadanie 17


Spróbuj ulepszyć formularz Klienci, tak aby w czasie wprowadzania danych pokazywał:

Sprawdź czy wszystko się poprawnie oblicza !.
Formularz powinien wyglądać tak:

Wskazówki do zadania 17:

Jak odczytać cenę towaru skoro nie ma jej w tabeli Zamówienia na której jest oparty podformularz Zamówienia ?
Odp: =DLookUp("cena";"Towary";"[id towaru]=Forms!Klienci!PodformZam.Form![id towaru]")

Jak obliczyć łączną wartość zamówień bieżącego klienta ?
Odp: trzeba będzie użyć pomocniczej kwerendy która dla każdego klienta oblicza łączną wartość jego zamówień i następnie wyciągać odpowiednią wartość z tej kwerendy przy pomocy funkcji DLookUp()