MS Access 2000 PL Zaawansowane techniki programowania


CENTRUM EDUKACYJNE
EDUSOFT
ul. Ogrodowa 46/48
00-876 Warszawa
tel. (0-22) 654 55 22
fax (0-22) 654 55 23
e-mail: centrum@edusoft.pl
http://www.edusoft.pl
MS Access 2000 PL
zawansowane techniki programowania baz danych
MS Access 2000  zaawansowane techniki
programowania baz danych
SPIS TREŚCI
WPROWADZENIE ...............................................................................................................................................3
OMÓWIENIE BAZY DANYCH..........................................................................................................................4
ZDARZENIA - ICH ROLA W TWORZENIU APLIKACJI ............................................................................7
USTAWIANIE SPOSOBU URUCHAMIANIA BAZY DANYCH .....................................................................................13
LISTA WYBRANYCH AKCJI..................................................................................................................................14
OBIEKTY MICROSOFT ACCESS - ICH WAAŚCIWOŚCI I METODY....................................................19
WYBRANE METODY I WAAŚCIWOŚCI NIEKTÓRYCH OBIEKTÓW. ..........................................................................21
WSTP DO JZYKA VISUAL BASIC ............................................................................................................24
PODSTAWOWE INSTRUKCJE I FUNKCJE JZYKA VISUAL BASIC...................................................27
INSTRUKCJE .......................................................................................................................................................27
FUNKCJE ............................................................................................................................................................29
PROGRAMOWANIE ZA POMOC OBIEKTÓW DOSTPU DO DANYCH (DAO)...........................................................47
PRZETWARZANIE TRANSAKCYJNE......................................................................................................................64
ZAGADNIENIA DODATKOWE.......................................................................................................................66
WYKORZYSTANIE JZYKA SQL- PRZYKAAD ......................................................................................................68
FILTROWANIE PRZEZ FORMULARZ......................................................................................................................73
PODACZANIE DANYCH Z ZEWNTRZNYCH yRÓDEA...........................................................................................75
OBSAUGA BADÓW WYKONANIA........................................................................................................................76
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
1
MS Access 2000  zaawansowane techniki
programowania baz danych
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
2
MS Access 2000  zaawansowane techniki
programowania baz danych
Wprowadzenie
Tematem tego szkolenia jest wprowadzenie do tworzenia aplikacji obsługujących bazy
danych z wykorzystaniem języka programowania Visual Basic.
W ciągu pięciu dni szkolenia uczestnicy mają za zadanie zbudować z przygotowanych
obiektów (tabel, formularzy i raportów), pod kierunkiem prowadzącego zajęcia, działającą
aplikację. Aplikacją tą jest program obsługi wypo\yczalni płyt. Program ma umo\liwiać
prowadzenie ewidencji płyt, listy klientów, rejestrowanie wypo\yczeń i zwrotów oraz
rozliczanie klientów i księgowanie wpłat. Oprócz tego, na oddzielnych przykładach zostaną
zademonstrowane zagadnienia programowania, które nie zostały ujęte w przykładowej
aplikacji.
Program szkolenia trwa 5 dni i wygląda następująco:
1. Pierwszy dzień obejmuje przedstawienie elementów składowych i zapoznanie z projektem
aplikacji w podstawowej wersji, przedstawienie koncepcji zdarzeń i omówienie sposobów
sterowania działaniem aplikacji za pomocą obsługi tych zdarzeń (procedury zdarzeń).
Przedstawione zostaną typowe zdarzenia występujące w aplikacjach. Zadaniem
uczestników będzie wykonanie pod kierunkiem prowadzącego ćwiczeń znajdujących się w
materiałach szkoleniowych.
2. Następne dwa dni poświęcone są podstawom programowania za pomocą obiektów
programu Microsoft Access. Przedstawione zostaną podstawowe instrukcje i elementy
języka Visual Basic, zasady programowania oraz obiekty Microsoft Access - ich
właściwości i metody. Poznawanie tych obiektów będzie przebiegało równolegle z
rozbudową aplikacji zgodnie z przygotowanymi ćwiczeniami.
3. Ostatnie dwa dni przeznaczone są na przedstawienie najwa\niejszych obiektów dostępu do
danych (Data Access Objects) wraz z ich strukturą, ich właściwościami, metodami i
sposobami korzystania z nich. Omówione zostanie tak\e wykorzystanie języka SQL,
zarządzanie dostępem do obiektów z poziomu języka, metody śledzenia i wykonywania
programów. Po wykonaniu ćwiczeń z tego zakresu powstanie w pełni działająca aplikacja.
UWAGA: Kurs jest podzielony na etapy. Na początku ka\dego etapu uczestnicy muszą
skopiować na dysk lokalny z dysku sieciowego, z katalogu podanego przez prowadzącego,
wersję bazy danych z poprzedniego dnia uzupełnioną o elementy potrzebne na ćwiczenia w
danym dniu (z zało\enia uczestnicy nie tworzą formularzy, raportów, zapytań i tabel gdy\ nie
jest to celem szkolenia).
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
3
MS Access 2000  zaawansowane techniki
programowania baz danych
Omówienie bazy danych
Proces tworzenia aplikacji zaczniemy od utworzenia podstawowej wersji bazy danych, której
zadaniem będzie na początku przechowywanie informacji tylko o kategoriach muzycznych,
wykonawcach, płytach i nagraniach na poszczególnych płytach. W skład bazy wchodzą
następujące elementy:
1. Cztery tabele dotyczące informacji o płytach:
" KATEGORIE_MUZYCZNE
" WYKONAWCY
" PLYTY
" NAGRANIA
" Dodatkowa tabela nie związana merytorycznie z muzyką - tabela MENU. W tej tabeli
znajdują się oznaczone liczbami nazwy poleceń. Tabela ta zostanie wykorzystana do
sterowania aplikacją. Polecenia podzielone zostały na trzy grupy:
- KATALOG (są to polecenia oznaczone numerami od 100 do 199),
- WYDRUKI (200-299)
- KLIENCI (300 -399).
Relacje (związki) między tabelami przedstawione zostały na poni\szym rysunku.
Rys. 1 Relacje między tabelami
2. Cztery kwerendy.
" Trzy z nich (KATALOG, WYDRUKI, KLIENCI) wybierają z tabeli MENU polecenia z
odpowiedniej grupy,
" Czwarta  LISTA_PLYT - wyświetla listę płyt zarejestrowanych w bazie.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
4
MS Access 2000  zaawansowane techniki
programowania baz danych
3. Pięć formularzy:
" LOGO - formularz będzie automatycznie wyświetlany po otwarciu bazy danych. Znajdują
się na nim dwie etykiety z informacjami o aplikacji. Po upływie zadanego czasu
(np. 5 sekund), lub po kliknięciu myszką w dowolnym miejscu formularza, formularz ten
będzie zamykany, a po jego zamknięciu automatycznie będzie otwierany formularz
PANEL STEROWANIA
" PANEL - centralny formularz całej aplikacji. Jego zadaniem będzie udostępnienie
u\ytkownikowi, za pośrednictwem poleceń i przycisków, wszystkich akcji niezbędnych do
poprawnej pracy aplikacji.
Poszczególne elementy sterujące zostały zaznaczone na rysunku i zostaną poni\ej omówione.
Etykieta
Grupa opcji
Pole listy
Etykieta
Przycisk
Przycisk
polecenia
polecenia
Rys. 2 Okno dialogowe - Panel sterowania aplikacją
Etykieta informuje, która grupa poleceń wyświetlana jest w polu listy poni\ej.
Grupa opcji, składająca się z czterech przycisków (wartości przekazywane przez tę
grupę to odpowiednio 1, 2, 3 i 4 dla kolejnych przycisków od góry). Zadaniem trzech
pierwszych przycisków jest wyświetlenie w polu listy poleceń (z odpowiedniej
kwerendy) oraz zmianę tytułu etykiety..
Przycisk polecenia otwiera formularz obsługi wypo\yczalni. (Formularz pojawi się w
jednym z kolejnych etapów szkolenia)
Pole listy, w którym po kliknięciu odpowiedniego przycisku z grupy opcji pojawi się
lista poleceń z odpowiedniego zapytania. Dwukrotne kliknięcie polecenia
wyświetlonego w tym polu ma spowodować wykonanie odpowiedniej akcji.
Etykieta - dwukrotne kliknięcie tej etykiety powoduje wyświetlanie komunikatu z
informacją o autorze.
Przycisk polecenia - przycisk kończący pracę z aplikacją i programem Access.
" PLYTY - Formularz zespolony przeznaczony do wyświetlania i edycji informacji o
płytach. (W formularzu PLYTY umieszczony jest podformularz PLYTY_PF, w którym
wyświetlane są tytuły nagrań).
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
5
MS Access 2000  zaawansowane techniki
programowania baz danych
2
1
3
4
6
5
7
14
8
12
13 11
10 9
Rys. 3 Okno dialogowe formularza PAYTY
Elementy sterujące na formularzu PLYTY
1) Związane pole tekstowe wyświetlające numer płyty (przy dodawaniu nowego
rekordu, Access powinien automatycznie proponować kolejny numer - proszę
pamiętać, \e nie jest to pole typu licznik)
2) Pole kombi - pole związane z polem Numer_wykonawcy w tabeli PLYTY. W
programie umo\liwimy dopisywania do listy nowych wykonawców. yródłem
wiersza dla tego pola jest tabela WYKONAWCY.
3) Pole kombi - pole związane z polem Numer_kategorii w tabeli PLYTY. yródłem
wiersza dla tego pola jest tabela KATEGORIE.
4) Pole tekstowe związane z polem Tytul tabeli PLYTY.
5) 6) 7) - Niezwiązane pola tekstowe, w których wyświetlane są informacje zgodnie z
opisem na etykietach.
8) Grupa przycisków poleceń słu\ących do przechodzenia po rekordach.
9) Przycisk polecenia usuwający płytę z katalogu
10) Przycisk polecenia dodający nową płytę do katalogu.
11) 12) Przyciski poleceń ustawiające filtrowanie płyt na wybranego wykonawcę i
wybraną kategorię muzyki.
13) Przycisk polecenia zamykający formularz
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
6
MS Access 2000  zaawansowane techniki
programowania baz danych
14) Podformularz Plyty_pf wyświetlający informacje o nagraniach znajdujących się na
płycie (z tabeli NAGRANIA).
" PLYTY PF - formularz będący częścią składową formularza zespolonego PLYTY
" WYKONAWCA - formularz do edycji i wprowadzania danych o wykonawcach.
ĆWICZENIE 1
1. Otwórz bazę danych, która znajduje się w pliku muzyka2000_1.mdb
2. Proszę zapoznać się z relacjami, indeksami i właściwościami pól poszczególnych tabel.
3. Następnie krótko przedyskutować wady i zalety projektu a w szczególności wymuszania
mechanizmów kaskadowych oraz ustawienie właściwości,  wymagane dla pól kluczy
obcych na  Tak .
ĆWICZENIE 2
Jakie znaczenie mają właściwości połączeń, ustawione w sposób przedstawiony na rysunku 1
ilustrującym relacje w bazie danych, dla tej bazy (przy istniejących w bazie właściwościach
pól)?
Zdarzenia - ich rola w tworzeniu aplikacji
Access jest aplikacją sterowaną zdarzeniami. Co to w praktyce oznacza?
Podczas pracy aplikacji dzieją się ró\ne rzeczy, u\ytkownik naciska klawisze na klawiaturze,
klika myszką, wpisuje nowe wartości do pól, w bazie danych do tabel dodawane są nowe
rekordy, formularze są otwierane i zamykane, raporty są formatowane itd..
Na większość tego typu zdarzeń Access potrafi reagować. Zadaniem u\ytkownika-
programisty jest zaprojektowanie aplikacji w taki sposób, aby większość operacji na bazie
danych wykonywana była automatycznie w odpowiedzi na zachodzące w bazie zdarzenia. Do
tego celu słu\ą makra i procedury języka Visual Basic, które podłączone do właściwości
zdarzeń wybranych obiektów powodują w bazie po\ądane działania. Na przykład, jeśli
chcemy by po kliknięciu myszą przycisku z napisem Poka\ klientów otwierany był
automatycznie formularz z listą klientów, lub po kliknięciu przycisku Zestawienie kwartalne
drukowany był raport z podsumowaniem sprzeda\y za kwartał musimy sami zaprogramować
reakcję programu Access na zdarzenie  przy kliknięciu dla danego przycisku.
Reakcję taką mo\emy uzyskać tworząc odpowiednie makro i przypisując je właściwości
wybranego zdarzenia dla wybranego obiektu (formantu) lub pisząc procedurę obsługi
zdarzenia. W tej części szkolenia zajmować się będziemy tworzeniem makr i przypisywaniem
ich odpowiednim zdarzeniom.
Poni\ej przedstawiamy niektóre typy zdarzeń według kategorii zdarzeń.
UWAGA: Zdarzenia mo\na obsługiwać za pomocą makr programu Access lub za pomocą
procedur języka Visual Basic. O ile przy programowaniu obsługi zdarzeń przy pomocy makr
nazwy zdarzeń są polskie, o tyle w języku Visual Basic występują nazwy angielskie.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
7
MS Access 2000  zaawansowane techniki
programowania baz danych
Zdarzenia okien - gdy u\ytkownik otwiera, zamyka lub zmienia rozmiar formularza lub
raportu.
Zdarzenie Opis
Przy otwarciu (Open) Po otwarciu, lecz przed wyświetleniem pierwszego rekordu. Dla
raportów zdarzenie to występuje przed podglądem wydruku albo
przed wydrukowaniem raportu.
Przy załadowaniu (Load) Zdarzenie Load występuje, gdy formularz zostaje otwarty i
wyświetlane są jego rekordy
Przy zmianie rozmiaru Podczas zmiany rozmiaru, lecz tak\e podczas otwarcia
(Resize) formularza, czy raportu.
Przy zwolnieniu (Unload) Po zamknięciu formularza, lecz przed usunięciem go z ekranu.
Przy zamknięciu (Close) Po zamknięciu i usunięciu z ekranu
Zdarzenia fokusu - zwrot  Dany element ma fokus oznacza, \e na dany element przyjmuje
ewentualne znaki wprowadzane z klawiatury (reaguje na naciśnięcia klawiszy). Zdarzenia
fokusu następują, gdy element sterujący uzyskuje lub traci fokus, na przykład po naciśnięciu
klawisza ENTER lub po kliknięciu myszką innego elementu.
Zdarzenie Opis
Przy aktywowaniu (Activate) Kiedy formularz lub raport stają się aktywne.
Przy wejściu (Enter) Po aktywacji, lecz przed uzyskaniem fokusu
przez element sterujący.
Przy uzyskaniu fokusu (GotFocus) Kiedy formularz lub element sterujący
uzyskuje fokus.
Przy zakończeniu (Exit) Zanim element sterujący straci fokus.
Przy utracie fokusu (LostFocus) Kiedy element sterujący straci fokus.
Przy dezaktywowaniu (Deactivate) Kiedy formularz lub raport jest zamykany, ale
zanim inne okno stanie się aktywne.
UWAGA. Zdarzenia Activate i Deactivate
występują tylko w przypadku przenoszenia
fokusu w ramach aplikacji. Przenoszenie
fokusu na obiekt lub z obiektu w innej
aplikacji nie wyzwala \adnego z tych zdarzeń.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
8
MS Access 2000  zaawansowane techniki
programowania baz danych
Zdarzenia danych  występują, gdy dane w formularzu lub elemencie sterującym są
wprowadzane, usuwane lub zmieniane oraz gdy następuje przeniesienie fokusu z rekordu do
innego rekordu.
Zdarzenie Opis
Przed wstawieniem (BeforeInsert) Zachodzi, gdy u\ytkownik wpisze pierwszy
znak w nowym rekordzie, lecz jeszcze przed
utworzeniem nowego rekordu w bazie
Przed aktualizacją (BeforeUpdate) Zachodzi przed aktualizacją rekordu lub
zmianą danych w elemencie sterującym
Po aktualizacji (AfterUdate) Zachodzi po zmianie danych w elemencie
sterującym lub po aktualizacji rekordu.
Po wstawieniu (AfterInstert) Zachodzi po dodaniu nowego rekordu, ale
przed jego aktualizacją.
Przy usunięciu (Delete) Zachodzi po naciśnięciu klawisza Delete, lub
uruchomieniu polecenia usunięcia rekordu,
lecz przed jego usunięciem.
Przed usunięciem (BeforeDelConfirm) Po usunięciu jednego lub kilku rekordów lecz
przed wyświetleniem prze Accessa
komunikatu o potwierdzeniu usunięcia.
Po usunięciu (AfterDelConfirm) Zachodzi, gdy u\ytkownik potwierdził
usunięcie i rekordy są usuwane lub operacja
jestanulowana.
Przy zmianie (Change) Po zmianie zawartości pola tekstowego lub
pola kombi (po wpisaniu przez u\ytkownika
pierwszego znaku)
Przy bie\ącym (Current) Zachodzi, gdy rekord uzyskuje fokus lub staje
się bie\ącym. Pojawia się równie\ po
ponowieniu zapytania zródła rekordów
formularza.
Przy wartości spoza listy (NotInList) Pojawi się, gdy u\ytkownik wprowadzi do
pola kombi wartość, której nie ma na liście
Przy aktualizacji (Updated) Zdarzenie występuje, gdy dane obiektu OLE
zostały zmodyfikowane od ostatniego zapisu.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
9
MS Access 2000  zaawansowane techniki
programowania baz danych
Zdarzenia myszy - w czasie wykonywania operacji myszą
Zdarzenie Opis
Przy naciśniętej myszy (MouseDown) Po naciśnięciu dowolnego przycisku myszy
Przy zwolnionej myszy (MouseUp) Po zwolnieniu naciśniętego przycisku myszy
Przy kliknięciu (Click) Po kliknięciu lewym przyciskiem myszy
Przy kliknięciu dwukrotnym (DblClick) Po dwukrotnym kliknięciu lewym przyciskiem
myszy
Przy ruchu myszy (MouseMove) Po poruszeniu myszką nad elementem sterującym
Zdarzenia klawiatury - gdy u\ytkownik pisze na klawiaturze lub wysyła znaki za pomocą
Akcji WyślijKlawisze lub instrukcji SendKeys, gdy element sterujący lub formularz ma fokus
Zdarzenie Opis
Przy naciśniętym klawiszu (KeyDown) Po naciśnięciu klawisza
Przy naciśnięciu klawisza (KeyPressed) Po naciśnięciu i zwolnieniu klawisza
Przy zmianie (Change) Po zmianie zawartości pola tekstowego lub pola
kombi (po wpisaniu przez u\ytkownika
pierwszego znaku)
Przy zwolnieniu klawisza (KeyUp) Po zwolnieniu klawisza
Zdarzenia drukowania  występują, gdy raport jest drukowany lub formatowany
Zdarzenie Opis
Przy formatowaniu (Format) Po określeniu, jakie dane będą w sekcji, lecz przed
sformatowaniem sekcji do wydruku lub podglądu
wydruku.
Przy wydruku (Print) Kiedy dane w sekcji są ju\ sformatowane, lecz nie
zostały jeszcze wydrukowane
Przy powrocie (Retreat) Kiedy podczas formatowania Access wraca do
poprzednich sekcji
Przy braku danych (NoData) Po sformatowaniu do drukowania raportu, w
którym nie ma danych (raport jest związany z
pustym zestawem rekordów), lecz przed
wydrukowaniem raportu. Zdarzenie to mo\na
wykorzystać do anulowania pustego raportu.
Przy stronie (Page ) Po sformatowaniu strony do drukowania, lecz
przed wydrukowaniem strony. Zdarzenie to
mo\na wykorzystać np. do narysowania ramki
wokół strony.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
10
MS Access 2000  zaawansowane techniki
programowania baz danych
Zdarzenie dodatkowe -  Timer - (Przy cyklu czasomierza) występuje w regularnych
odstępach czasu określonych we właściwości  TimerInterval (Okres czasomierza)
Przy programowaniu zdarzeń trzeba zwracać uwagę na dwa istotne czynniki:
" Trzeba pamiętać, \e niektóre zdarzenia automatycznie pociągają za sobą wystąpienie
innych. Na przykład przed zdarzeniem  Dwukrotne kliknięcie (DblClick) wystąpią
kolejno zdarzenia  Naciśnięcie myszy (MouseDown) ,  Zwolnienie myszy (MouseUp) ,
 Kliknięcie (Click) .
" Wa\na jest kolejność, w jakiej zdarzenia występują po sobie. Szczegółowy opis
następowania zdarzeń znajduje się w pomocy programu Access. W tym miejscu
przytoczymy tylko kilka najczęściej spotykanych sytuacji:
Otwieranie formularza: Otwarcie (Open) >Załadowanie(Load) >Zmiania rozmiaru
(Resize) >Aktywacja(Active) > Bie\ący (Current)
Zamykanie formularza :Zwolnienie (Unload) > Dezaktywacja (Deactivate) >
Zamknięcie (Close)
Wejście i wyjście do elementu sterującego : Wejście (Enter) > Uzyskanie fokusu
(GotFocus) > Zakończenie (Exit) > Utrata fokusu (LostFocus)
Zmiana tekstu w polu edycji lub w polu tekstowym : Naciśnięcie klawisza
(KeyDown) >Naciśnięty klawisz (KeyPress) > Zmiana (Change) > Zwolnienie
klawisza (KeyUp)
Usunięcie rekordu: Przy usunięciu (Delete) >Przy bie\ącym (Current) > Przed
usunięciem (BeforeDelConfirm) > Po usunięciu (AfterDelConfirm)
UWAGA: W niektórych przypadkach mo\e zachodzić potrzeba anulowania zdarzenia, które
uruchomiło makro lub procedurę. Mo\na to zrobić za pomocą makra, w którym wystąpi akcja
AnulujZdarzenie (CancelEvent), lub za pomocą procedury zdarzenia, nadając argumentowi
Cancel takiej procedury wartość True. (Tylko dla tych procedur zdarzeń, dla których
argument ten występuje). Procedury zdarzeń będą omawiane w dalszej części podręcznika.
Akcją AnulujZdarzenie  CancelEvent mo\na anulować następujące zdarzenia:
Przy zastosowaniu filtru (ApplyFilter) Przy filtrowaniu (Filter)
Przed usunięciem (BeforeDelConfirm) Przed wstawieniem (BeforeInsert)
Przed aktualizacją (BeforeUpdate Przy kliknięciu dwukrotnym (DblClick)
Przy usunięciu (Delete) Przy zakończeniu (Exit)
Przy formatowaniu (Format) Przy otwarciu (Open)
Przy wydruku (Print) Przy zwolnieniu (Unload)
Przy buforowaniu (Dirty) Przy braku danych (NoData)
Przy naciśniętym klawiszu (KeyPress) <- dostępne tylko w makrach
Przy naciśnięciu klawisza (KeyDown) <- dostępne tylko w makrach
Przy naciśniętej myszy (MouseDown) <- prawy przycisk myszy tylko makra
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
11
MS Access 2000  zaawansowane techniki
programowania baz danych
Schemat programowania obsługi zdarzeń wygląda następująco:
Jeśli wystąpienie zdarzenia dla jakiegoś elementu sterującego ma skutkować wykonaniem
jakiegoś działania nale\y:
" Wyświetlić element sterujący w widoku projekt (na przykład przycisk na formularzu, pole
tekstowe).
" Zaznaczyć go klikając myszą
" Wyświetlić listę właściwości danego obiektu (wybierając polecenie Widok > Właściwości)
" Wybrać kategorię właściwości: Zdarzenie
" Po odszukaniu właściwości wybranego zdarzenia, jako wartość właściwości nale\y:
- Wybrać makro z listy utworzonych wcześniej makr (lub uruchomić generator makr
by je utworzyć) lub
- W polu właściwości wybrać Procedura zdarzenia, wyświetlić generator kodu i wpisać
treść procedury.
ZALECENIA DO ĆWICZEC:
Celem poni\szych ćwiczeń jest utworzenie makr, które będą obsługiwać fragment aplikacji.
Makro AutoExec ma po otwarciu bazy danych ukrywać okno bazy danych i uruchamiać
formularz LOGO. Po kliknięciu tego formularza (lub po upływie czasu) formularz LOGO ma
być zamykany a otwierany formularz PANEL. Działanie formularza PANEL będziemy
programować ju\ w języku Visual Basic. W tej części ćwiczeń zaprogramujemy jeszcze za
pomocą makr reakcję przycisków na formularzu PLYTY..
W ćwiczeniach tych wystąpią akcje: OtwórzFormularz, Zamknij, OknoKomunikatu,
UruchomPolecenie.
ĆWICZENIE 3
Proszę w oknie makro utworzyć makro o nazwie Logo. Zadaniem tego makra będzie
wykonanie dwóch akcji:
" Zamknięcie formularza LOGO (Akcja Zamknij)
" Otwarcie formularza PANEL (Akcja OtwórzFormularz)
ĆWICZENIE 4
1. Proszę podłączyć makro Logo do właściwości  Przy kliknięciu dla sekcji szczegółów
oraz dwóch etykiet znajdujących się na formularzu LOGO,
2. Makro nale\y podłączyć równie\ do właściwości całego formularza  Przy cyklu
czasomierza  i ustawić właściwość formularza  Okres czasomierza na 3 sekundy
(3000).
3. Proszę otworzyć formularz LOGO w widoku Formularz i sprawdzić czy reaguje na
kliknięcie i na upływ czasu.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
12
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 5
Proszę samodzielnie utworzyć i podłączyć do etykiety  Informacja o autorze makro o nazwie
Info. Zadaniem makra będzie wyświetlenie komunikatu z informacją o autorze - akcja
uruchamiana po dwukrotnym kliknięciu etykiety. (Akcja makra OknoKomunikatu).Do
zawinięcia tekstu mo\na u\yć skrótu Ctrl+Enter.
ĆWICZENIE 6
1. Proszę utworzyć i podłączyć do odpowiednich zdarzeń makro grupowe o nazwie Przyciski.
2. Makro ma obsługiwać siedem przycisków znajdujących się na formularzu PLYTY, oraz
sześć z formularza WYKONAWCA reagując na kliknięcie ka\dego z przycisków (dla
wszystkich przycisków poleceń za wyjątkiem przycisków  Wykonawcy i  Kategorie .
Przyciski  wykonawcy i  kategorie zostaną podłączone w pózniejszym czasie).
3. Makra:
Pierwszy (akcja UruchomPolecenie, polecenie PrzejdzDoPierwszegoRekordu)
Poprzedni (akcja UruchomPolecenie, polecenie PrzejdzDoPoprzedniegoRekordu)
Następny (akcja UruchomPolecenie, polecenie PrzejdzDoNastępnegoRekordu)
Ostatni (akcja UruchomPolecenie, polecenie PrzejdzDoOstatniegoRekordu)
Usuń płytę (akcja UruchomPolecenie, polecenie UsuńRekord)
Zamknij formularz (akcja Zamknij bez \adnych argumentów)
Nowa płyta (akcja UruchomPolecenie, polecenie PrzejdzDoNowegoRekordu)
4. Proszę zaobserwować działanie przycisków  Poprzedni ,  Następny ,  Nowa płyta . Z
czym jest kłopot?
Ustawianie sposobu uruchamiania bazy danych
W poprzednich wersjach programu Access do automatycznego wykonywania pewnych
działań przy uruchamianiu bazy danych słu\yło makro o nazwie AutoExec. W wersji Access
97 mo\na ustawić właściwości startowe bazy danych za pomocą polecenia Autostart z menu
Narzędzia. Do wyboru są między innymi następujące opcje:
" Ustawienie tytułu aplikacji
" Przyporządkowanie ikony do aplikacji
" Ustawienie domyślnego paska menu
" Ustawienie formularza startowego.
" Ukrycie okna bazy danych i paska stanu.
ĆWICZENIE 7
Proszę ustawić właściwości startowe bazy danych w taki sposób, aby po uruchomieniu
wyświetlany był formularz LOGO, ukrywane było okno bazy danych. Proszę ustawić tytuł
aplikacji na Wypo\yczalnia, oraz dobrać dowolną ikonę dostępną w komputerze.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
13
MS Access 2000  zaawansowane techniki
programowania baz danych
Lista wybranych akcji
W poni\szej tabeli znajduje się omówienie akcji, które mo\na uruchomić za pomocą makr.
UWAGA: Akcje mo\na równie\ uruchomić z poziomu kodu języka Visual Basic, z tą tylko
ró\nicą, \e w języku tym nazwy akcji oraz ich argumenty są angielskojęzyczne. Z tego te\
powodu obok nazw polskich w tabeli przedstawione zostały ich angielskie odpowiedniki.
Akcja Opis
DodajMenu (AddMenu) Dodaje menu do własnego paska menu. Argumenty akcji: Nazwa
menu, Nazwa makra menu, Tekst paska stanu
ZastosujFiltr Uruchamia filtr w postaci nazwanego filtru, kwerendy lub klauzuli
(ApplyFilter) WHERE języka SQL (bez słowa kluczowego WHERE). Lewa
strona wyra\enia WHERE zawiera zwykle nazwę pola z tabeli
podstawowej, kwerendy, formularza lub raportu. Jeśli występuje
odwołanie do elementów sterujących to nazwa elementu powinna
występować w pełnej składni: Formularz! [Nazwa formularza]!
[Element sterujący]. Maksymalna długość klauzuli WHERE to 256
znaków. Filtr stosuje się w celu ograniczenia informacji
prezentowanych w tabel, formularza lub raporcie.
Sygnał Sygnał dzwiękowy z komputerowego głośnika.
(Beep)
AnulujZdarzenie Anuluje zdarzenie, które spowodowało uruchomienie makra. Lista
(CancelEvent) zdarzeń, które mo\na anulować została przedstawiona wcześniej.
Zamknij Zamyka okno otwartego obiektu określonego podanymi
(Close) argumentami. Jeśli nie zostaną podane \adne argumenty, Access
zamyka aktywne okno, a przy braku aktywnego okna zamyka bazę
danych. Mo\na wskazać czy przy zamknięciu obiektu mają być
zachowane dokonane zmiany, czy nie.
KopiujObiekt Kopiuje wybrany obiekt do innej bazy Microsoft Access lub do tej
samej bazy pod inną nazwą.
(CopyObject)
UsuńObiekt Usuwa wybrany obiekt z bazy danych.
(DeleteObject)
UruchomPolecenie Wykonuje wybrane polecenie menu. Polecenie musi mieć sens dla
obiektu. Na przykład nie mo\na wykonać poleceń z menu Rekordy,
(RunCommand)
jeśli obiekt wyświetlany jest w momencie uruchomienia makra w
widoku  projekt . Na liście Polecenia dostępnych jest ponad 300
wbudowanych poleceń programu MS Access.
Echo Włącza lub wyłącza odświe\anie ekranu. Drugi parametr zawiera
tekst paska stanu. Akcja Echo występuje zwykle w połączeniu z
(Echo)
akcją Klepsydra.
ZnajdzNastępny Znajduje następny rekord spełniający warunki określone w
ostatnim wywołaniu akcji ZnajdzRekord.
(FindNext)
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
14
MS Access 2000  zaawansowane techniki
programowania baz danych
Akcja Opis
ZnajdzRekord Wyszukuje rekord spełniający warunki określone argumentami.
Argumenty są takie same, jak argumenty w polu dialogu
(FindRecord)
wyświetlanego z menu poleceniem Edycja > Znajdz
IdzDoFormantu Akcja przenosząca fokus do elementu sterującego aktywnym
formularzu. Jako argument nale\y podać nazwę elementu. Mo\na
(GoToControl)
przenieść fokus tylko do tych elementów, które mogą go mieć.
Akcja dotyczy równie\ pól w tabeli, czy kwerendzie.
IdzDoStrony Akcja przenosi fokus do pierwszego elementu sterującego na
podanej stronie aktywnego formularza.
(GoToPage)
IdzDoRekordu Akcja ustawia podany rekord jako rekord bie\ący tabeli,
formularza lub kwerendy. Jeśli jako argument rekord wybrana
(GoToRecord)
została wartość Poprzedni lub Następny to argument Skok
precyzuje o ile rekordów zostanie przesunięty nowy bie\ący rekord
względem aktualnego. Jeśli argumentem jest IdzDo to rekordem
bie\ącym będzie rekord o numerze podanym w argumencie Skok.
Klepsydra Zmienia wskaznik myszy na klepsydrę podczas wykonywania
makra. Akcja wykorzystywana zwykle w połączeniu akcją Echo
(Hourglass)
Maksymalizuj Powiększa aktywne okno na cały ekran
(Maximize)
Minimalizuj Zwija aktywne okno do ikony
(Minimize)
RuchRozmiar Przesuwa lub zmienia rozmiary aktywnego okna.
(MoveSize)
OknoKomunikatu Wyświetla okno z komunikatem lub ostrze\eniem. U\ytkownik
mo\e wybrać typ komunikatu, tekst komunikatu, tytuł okna i
(MsgBox)
zdecydować czy będzie sygnał dzwiękowy
OtwórzFormularz Otwiera formularz w widoku formularz, arkusz danych, podgląd
wydruku lub projekt. Za pomocą argumentów akcji mo\na ustawić
(OpenForm)
filtr dla formularza lub klauzulę. Tryby otwarcia formularza to:
Dodawanie, Edycja, Tylko do odczytu.
OtwórzModuł Otwiera wybrany moduł w widoku projekt podanej procedury
(OpenModule)
OtwórzKwerendę Uruchamia kwerendę w jednym z trzech widoków (projekt, arkusz
danych, podgląd wydruku).
(OpenQuery)
OtwórzRaport Otwiera wybrany raport w widoku projekt lub podgląd wydruku,
albo wysyła raport do wydruku (widok wydruk). Dla raportu
(OpenReport)
mo\na określić filtr lub klauzulę WHERE.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
15
MS Access 2000  zaawansowane techniki
programowania baz danych
Akcja Opis
OtwórzTabelę Otwiera wybraną tabelę w jednym z trzech widoków (projekt,
arkusz danych, podgląd wydruku)
(OpenTable)
WyprowadzDo Wysyła dane z wybranego obiektu bazy danych do osobnego pliku.
Mo\e to być plik tekstowy txt, plik w formacie arkusza Excela xls,
(OutputTo)
plik formatu rich-text rtf, plik formatu HTML html, plik Internet
Information Serwera idc lub htx, albo plik Active Serwera asp.
Wydruk Drukuje aktywny obiekt bazy danych. Mo\na wybrać zakres
wydruku, numery stron, jakość i sortowane kopii.
(PrintOut)
Zakończ Kończy pracę programu MS Access. Mo\liwe są trzy ustawienia
argumentu Opcje: Zapisz wszystkie, Potwierdzaj i Zakończ. Ta
(Quit)
ostatnia opcja powoduje zakończenie pracy bez zachowywania
zmian.
ZmieńNazwę Zmienia nazwę wybranego obiektu. Obiekt musi być zamknięty.
(Rename)
Odświe\Obiekt Wymusza natychmiastowe zakończenie rozpoczętych aktualizacji
ekranu i przeliczania elementów sterujących na aktywnym
(RepaintObject)
formularzu
PonówKwerendę Aktualizuje dane zródłowe formantu lub, jeśli aktywny jest
formularz to formularza przez ponowne wykonanie kwerendy.
(Requery)
U\ywane do aktualizacji zawartości pól list, pól kombi i
formularzy.
Przywróć Przywraca poprzednie rozmiary okna zwiniętego do ikony lub
rozwiniętego na cały ekran. Akcja bez parametrów, działa na
(Restore)
aktywnym oknie.
UruchomAplikację Uruchamia aplikację (nale\y podać nazwę pliku wykonywalnego
wraz ze ście\ką dostępu), po uruchomieniu aplikacji aplikacja
(RunApp)
działa na pierwszym planie, a makro kontynuuje działanie.
Uruchom kod Wywołuje funkcję języka Visual Basic
(RunCode)
UruchomMakro Podajemy nazwę makra. Mo\na jako argumenty podać liczbę
powtórzeń oraz wyra\enie, które gdy stanie się fałszywe, zatrzyma
(RunMacro)
działanie makra.
UruchomSQL Uruchamia instrukcję SQL będącą kwerendą funkcjonalną, czyli
modyfikującą dane, lub kwerendą definiującą dane. Mo\na
(RunSQL)
uruchomić polecenie SQL u\ywając przetwarzania transakcyjnego,
które dokładniej zostanie omówione w dalszej części podręcznika.
Max długość instrukcji SQL to 255 znaków. śeby uruchomić
dłu\szą instrukcję nale\y u\yć akcji OtwórzKwerendę.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
16
MS Access 2000  zaawansowane techniki
programowania baz danych
Akcja Opis
WybierzObiekt Jeśli trzeci argument  w oknie bazy danych ustawiony jest na
NIE, wybiera otwarty obiekt o podanej nazwie i typie. Jeśli trzeci
(SelectObject)
argument  w oknie bazy danych ustawiony jest na TAK, ustawia
się na nazwie wybranego obiektu w oknie bazy danych. Jeśli baza
danych była ukryta to automatycznie jest odkrywana (dotyczy tylko
opcji TAK) U\yteczna technika, je\eli chcemy wyświetli ukryte
okno bazy danych!
WyślijKlawisze Wysyła podane jako argument klawisze (symulacja pracy na
klawiaturze)
(SendKeys)
WyślijObiekt Dołącza arkusz, formularz, raport lub moduł do listu poczty
elektronicznej. Argument Czekaj=Tak wstrzymuje dalsze
(SendObject)
instrukcje makra do zakończenia symulacji.
UstawWartość UstawWartość bardzo często wykorzystywana akcja za pomocą
której mo\na zmienić wartość samego elementu sterującego lub
(SetValue)
wartość wybranej właściwości tego elementu. Z akcji tej będziemy
bardzo często korzystać w języku Visual Basic.
UstawOstrze\enie Włącza lub wyłącza wyświetlanie komunikatów systemowych.
Powoduje zablokowanie wyświetlania komunikatów modalnych w
(SetWarnings)
czasie wykonywania makra. Nie blokuje jednak wyświetlania
komunikatów o błędach wykonania ani pól dialogowych, jeśli
wymaga tego makro.
Poka\WszystkieRekordy Usuwa filtr ustawiony dla tabeli formularza, lub kwerendy i
wyświetla wszystkie rekordy
(ShowAllRecords)
Poka\PasekNarzędzi Wyświetla lub ukrywa wbudowane paski narzędzi lub
niestandardowe paski narzędzi utworzone przez u\ytkownika.
(ShowToolbar)
ZatrzymajWszystkie Zatrzymuje działanie wszystkich aktualnie działających makr.
Makra
(StopAllMacros)
ZatrzymajMakro Zatrzymuje działające makro.
(StopMacro)
TransportBazyDanych Importuje, eksportuje lub dołącza obiekty z i do innych baz danych.
(TransferDatabase)
TransportArkusza Importuje lub eksportuje dane z lub do arkusza kalkulacyjnego
Excela, lub Lotusa.
(TransferSpreadsheet)
TransportTekstu Importuje lub eksportuje dane do plików tekstowych.
(TransferText)
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
17
MS Access 2000  zaawansowane techniki
programowania baz danych
Akcja Opis
Zapisz Akcji Zapisz mo\na u\yć do zapisania określonego obiektu
programu Microsoft Access lub obiektu aktywnego, jeśli \aden
(Save)
obiekt nie jest określony. Mo\na w niektórych przypadkach tak\e
zapisać obiekt aktywny pod nową nazwą (działa to tak samo jak
polecenie Zapisz jako z menu Plik).
UstawElementMenu Akcji UstawElementMenu mo\na u\yć do ustawienia stanu
elementów menu (włączone lub wyłączone, zaznaczone lub nie
(SetMenuItem
zaznaczone) na niestandardowym pasku menu lub globalnym
pasku menu aktywnego okna.
OtwórzStronęDostępu Otwiera stronę dostępu do danych w widoku przeglądanie (jako
DoDanych strona Web) lub w widoku projekt.
(OpenDataAccessPage) Wprowadzona w Accessie 2000
OtwórzWidok W pliku projektu programu Access (rozszerzenie .adp), który ma
połączenie z bazą danych serwera SQL umo\liwia otwarcie
(OpenView)
dowolnego widoku (View) w jednej z trzech dostępnych opcji :
podgląd wydruku, arkusz danych, lub widok projektu.
Wprowadzona w Accessie 2000
OtwórzDiagram W pliku projektu programu Access (rozszerzenie .adp), który ma
połączenie z bazą danych serwera SQL, otwiera w widoku projekt
(OpenDiagram)
diagram relacji pomiędzy tabelami w bazie danych serwera.
Wprowadzona w Accessie 2000
OtwórzPrzechowywaną W pliku projektu programu Access (rozszerzenie .adp), który ma
Procedurę połączenie z bazą danych serwera SQL, otwiera procedurę
przechowywaną w bazie danych serwera, czyli zbiór procedur SQL
(OpenStoredProcedure)
w widoku projekt, w postaci arkusza danych, lub podglądu
wydruku. Jeśli procedura ta jest poleceniem definiującycm lub
odpowiednikiem accessowej kwerendy funkcjonalnej, wykonuje
procedurę, lecz nie zwraca danych. Dodatkową mo\liwością dla
procedur wybierających jest zabezpieczenia danych wyświetlanych
rekordów np. poprzez otwarcie ich tylko do odczytu, lub tylko do
dodawania nowych rekordów.
Wprowadzona w Accessie 2000
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
18
MS Access 2000  zaawansowane techniki
programowania baz danych
Obiekty Microsoft Access - ich właściwości i metody
Baza danych składa się z trzech ró\nych rodzajów obiektów. Pierwszy rodzaj obiektów to
obiekty Microsoft Access. Drugi rodzaj to obiekty dostępu do danych (DAO, Data Access
Object) , a trzeci rodzaj to obiekty danych ActiveX (ADO, ActiveX Data Objects). W tej
części szkolenia będziemy się zajmować obiektami Microsoft Access.
Ka\dy obiekt ma swoje właściwości (w przypadku formularzy, raportów i formantów listę
właściwości obiektu mo\na wyświetlić otwierając obiekt w widoku Projekt i wybierając
polecenie Widok > Właściwości, lub wybierając nazwę obiektu w Konstruktorze wyra\eń).
Ustawienia właściwości obiektów mo\na odczytywać a tak\e zmieniać (ustawiać) podczas
pracy aplikacji.
Oprócz właściwości obiekty mają swoje metody. Metody są to operacje (działania), które
mo\na na obiektach wykonywać. Na przykład jedną z metod obiektu typu formularz jest
metoda Requery (PonówKwerendę). Metoda ta powoduje ponowne wykonanie kwerendy dla
zródła rekordów formularza.
Otwarte obiekty typu formularz tworzą razem kolekcję formularzy, która sama w sobie jest
obiektem, podobnie otwarte obiekty typu raport tworzą kolekcję raportów, która tak\e jest
obiektem. Poniewa\ kolekcja formularzy i kolekcja raportów same w sobie równie\ są
obiektami mają więc swoje właściwości.
Obiekty z kolekcji formularzy lub z kolekcji raportów numerowane są od 0 zgodnie z
kolejnością otwarcia.
Hierarchia obiektów wygląda następująco:
" Na szczycie hierarchii znajduje się obiekt Application (Aplikacja). Obiekt Aplikacja
określa całą aplikację Microsoft Access. Obiektu tego u\ywamy jeśli chcemy zastosować
metodę do całej aplikacji lub ustawić właściwości całej aplikacji. Na przykład za pomocą
właściwości MenuBar mo\na ustawić dostosowany pasek menu dla całej aplikacji.
U\ywając do całej aplikacji metody SetOption mo\na ustawić parametry aplikacji z okna
dialogowego Narzędzia > Opcje
" Obiekt Application zawiera w sobie wiele ró\nych kolekcji i obiektów np. kolekcję
Forms obiektów typu Formularz, kolekcję Reports obiektów typu Raport, Kolekcję
Modules obiektów typu Moduł, kolekcję References obiektów typu połączenie z inną
aplikacją lub obiektem, kolekcję DataAccessPages obiektów typu Strony Web, oraz
obiekty: Screen, DoCmd, VBE, DefaultWebOption i inne dostępne w pomocy pod
hasłem  Microsoft Access Objects
" W skład obiektów typu Report i Form wchodzą kolekcje Controls obiektów typu Formant
(element sterujący).
Do obiektu, który nale\y do kolekcji formularzy mo\na odwoływać się na trzy sposoby:
Forms![nazwa formularza]
Forms( Nazwa formularza )
Forms(numer formularza)
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
19
MS Access 2000  zaawansowane techniki
programowania baz danych
Do raportów odwołujemy się w podobny sposób:
Reports![Nazwa raportu]
Reports( Nazwa raportu )
Reports(numer raportu)
Do elementów sterujących (formantów) na formularzach i raportach odwołujemy się jak na
poni\szych przykładach u\ywając jako nazwy kolekcji odpowiednio Forms lub Reports:
Nazwa_kolekcji![nazwa formularza]![nazwa elementu sterującego]
Do właściwości obiektów odwołujemy się za pomocą kropki i nazwy właściwości:
Nazwa_kolekcji![nazwa formularza].właściwość
Nazwa_kolekcji![nazwa formularza]![nazwa elementu sterującego].właściwość
Metody obiektów wywołujemy w następujący sposób (przykład)
Nazwa_kolekcji![nazwa formularza].metoda argument1, argument2 itd...
Nazwa_kolekcji![nazwa formularza]![nazwa elementu sterującego].metoda
argument1, _ argument2
UWAGA: Nie wszystkie metody wymagają podawania argumentów.
UWAGA: Argumenty umieszczamy w nawiasach po nazwie metody wtedy, gdy metoda
zwraca wynik. Jeśli tylko wykonuje działanie na obiekcie, to nawiasy są niepotrzebne.
Właściwości obiektów ustawiamy w następujący sposób
Nazwa_kolekcji![Nazwa formularza]![Nazwa elementu sterującego].Właściwość = _
nowa_wartość
na przykład:
Forms![mój formularz]![przycisk rejestruj].Visible = False
Szczegółowy opis wszystkich metod i właściwości poszczególnych obiektów znajduje się w
pomocy w tematach Objects i Properties.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
20
MS Access 2000  zaawansowane techniki
programowania baz danych
Wybrane metody i właściwości niektórych obiektów.
Obiekt Aplikacja  wybrane metody
Echo Składnia  Aplikacja.Echo echoon, [tekst_paska_stanu].
Włącza (echoon = True) lub wyłącza (echoon = False) odświe\anie
ekranu.
GetOption, SetOption Aplikacja.GetOption(nazwa_opcji)
Aplikacja.SetOption nazwa_opcji, ustawienie
Akcja ta ustawia lub odczytuje wartości opcji, które mo\na ustawić
dla aplikacji z okna bazy danych poleceniem Narzędzia > Opcje.
Opcje podzielone są na kilka grup:
Widok, Ogólne, Edytowanie/Znajdowanie, Klawiatura,
Arkusz_Danych, Tabele/Kwerendy, Formularze/Raporty,
Zaawansowane.
Quit Aplikacja.Quit [argument]
Akcja kończy pracę z programem Access. Jako argument mogą
wystąpić następujące stałe predefiniowane:
AcQuitPrompt  Access zapyta o zachowanie wszystkich nie
zachowanych obiektów. acQuitSaveAll  zachowuje wszystkie nie
zachowane obiekty bez zadawania pytań. AcQuitSaveNone 
kończy pracę bez zachowywania zmian w obiektach.
Obiekt Aplikacja - właściwości
CurrentObjectName Zwraca nazwę aktywnego obiektu
CurrentObjectType Zwraca typ aktywnego obiektu (np. acTable, acQuery)
MenuBar Umo\liwia ustawienie makra paska menu, który mo\na np.
włączyć dla całej aplikacji, formularza czy raportu.
Obiekt Formularz - metody
GoToPage Przenosi fokus do pierwszego elementu sterującego na podanej
stronie formularza.
Recalc Natychmiast aktualizuje wszystkie obliczane elementy sterujące na
formularzu
Refresh Natychmiast aktualizuje rekordy zródła danych formularza, jeśli
inni u\ytkownicy lub sam u\ytkownik wprowadzał do tabel jakieś
zmiany. (Patrz Requery)
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
21
MS Access 2000  zaawansowane techniki
programowania baz danych
Repaint Wymusza natychmiastową aktualizację ekranu (wraz ze wszystkimi
przeliczeniami elementów sterujących). Przydatne jeśli Access
czeka z odświe\eniem ekranu na wykonanie jakichś operacji.
Requery Odświe\a dane zródłowe formularza. Metoda ta ró\ni się od metody
Refresh tym \e metoda Refresh nie pokazuje zmian w aktualnym
zestawie rekordów spowodowanych usunięciem lub dodaniem
rekordów, a tylko zmianami wykonanymi na rekordach bie\ącego
zestawu. Metoda Requery odświe\a zestaw rekordów pokazując
rekordy dodane i usuwając z zestawu rekordy usunięte.
SetFocus Przenosi fokus do podanego formularza lub elementu sterującego.
Poniewa\ obiekt typu formularz ma około 100 właściwości wymienimy tutaj tylko kilka tych,
które będą u\yteczne w programowaniu.
Dirty Określa czy bie\ący rekord został zmodyfikowany od czasu
ostatniego zachowania. True lub False
RecordSetClone Właściwość zwraca obiekt RecordSet typu dynamicznego zestawu
rekordów, reprezentujący rekordy będące zródłem formularza.
Obiekty typu RecordSet będą omawiane w części szkolenia
poświęconej obiektom DAO. Teraz tylko przykład wywołania
obiektu RecordSetClone :
Dim ListSet As Recordset.
Set ListSet = Forms![Orders].RecordsetClone
Określa tabelę, zapytanie lub instrukcję SQL, będącą zródłem
RecordSource
danych dla formularza.
Wartość tej właściwości jest ciągiem znaków
Obiekt Screen nie zawiera metod
Obiekt Screen - właściwości
ActiveControl Właściwość reprezentuje element sterujący, który ma fokus.
Przykładowe wykorzystanie:
Set ElSter = Screen.ActiveControl
nazwa = ElSter.Name
Jeśli \aden element sterujący nie ma fokusu wystąpi błąd.
ActiveForm Reprezentuje formularz, który ma fokus. Uwaga jak poprzednio.
ActiveReport Reprezentuje raport, który ma fokus. Uwaga o błędzie jak w
poprzednich właściwościach
PreviousControl Reprezentuje element sterujący, który jako poprzedni miał fokus .
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
22
MS Access 2000  zaawansowane techniki
programowania baz danych
Obiekt Raport - metody
Circle Rysuje w obiekcie typu Raport, okrąg, elipsę lub łuk.
Line Rysuje linię.
Print Drukuje w obiekcie typu Raport podany tekst bie\ącą czcionką.
PSet Ustawia kolor wybranego punktu w raporcie
Scale Definiuje skalę u\ytkownika dla obiektu typu Raport (standardowa
skala to 1/1440 cala)
TextHeight Zwraca wysokość podanego w metodzie tekstu, przy u\yciu
bie\ącej czcionki
TextWidth Zwraca szerokość tekstu, przy u\yciu bie\ącej czcionki.
Właściwości obiektu Raport pominiemy
Obiekt typu formant - metody
ItemData Zwraca dane z kolumny związanej dla podanego wiersza. Metoda
dotyczy tylko pól list i pól kombi
Requery Aktualizuje dane przez ponowne wykonanie kwerendy, lub kodu
SQL
SetFocus Przenosi fokus do podanego elementu sterującego.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
23
MS Access 2000  zaawansowane techniki
programowania baz danych
Wstęp do języka Visual Basic.
W programie Microsoft Access dla Windows 95 (wersja 7) język Access Basic, u\ywany w
wersjach 1 i 2 programu Microsoft Access, został zastąpiony przez język Visual Basic for
Applications. Pod wieloma względami język Visual Basic jest identyczny z językiem Access
Basic, a program Microsoft Access automatycznie wykonuje większość niezbędnych
konwersji kodu podczas konwersji bazy danych. Visual Basic jest zwykłym językiem
programowania, którego instrukcje przypominają instrukcje znane z innych języków. Za
pomocą procedur napisanych w tym języku i podłączonych do właściwości zdarzeń mo\na
programować reakcje aplikacji na zachodzące w niej zdarzenia. W ostatnich latach Visual
Basic stał się stał się wspólnym językiem programowania dla aplikacji z rodziny Microsoft
Office, w tym Accessa, Excela, Worda, PowerPointa. Jeden język ułatwia integrację obiektów
pomiędzy ró\nymi aplikacjami i automatyzuje obiekty ActiveX. Od wersji Accessa 2000
(wersja 9) wykorzystywane jest wspólne dla wszystkich aplikacji środowisko edycyjne
(Visual Basic Edytor).
Wszystkie procedury i funkcje przechowywane są w modułach. Moduły mogą być tworzone
niezale\nie z okna bazy danych na karcie moduły. Jednak wa\niejszą rolę pełnią moduły
formularzy i raportów. W tych modułach (po jednym module dla ka\dego raportu i
formularza) Access przechowuje procedury zdarzeń obsługujące zdarzenia wszystkich
elementów sterujących danego raportu lub formularza.
W programie Microsoft Access 2000 są dwa typy modułów: moduły standardowe i moduły
klas. W uproszczeniu wygląda to tak, \e moduł klasy związany jest z formularzem lub
raportem, natomiast moduł standardowy, zawiera funkcje i procedury ogólnodostępne, z
ka\dego innego modułu. Chocia\ nie jest to objęte programem tego szkolenia, wypada jednak
wspomnieć \e od wersji 97 programu Access mo\na tworzyć moduły klas na karcie Moduły
w oknie Bazy Danych jako samodzielny moduł zawierający definicje niestandardowych
obiektów aplikacji.
Kiedy powinno się u\ywać obsługi zdarzeń w języku Visual Basic (kiedy nie wystarczy samo
projektowanie za pomocą makr)?
" VB jest elastyczniejszy i wydajniejszy od makr a kod bardziej czytelny i szybszy.
" VB posiada mo\liwość szczegółowej obsługi błędów.
" VB umo\liwia tworzenie własnych funkcji.
" VB obsługuje procedury przekazujące i przyjmujące parametry.
" VB umo\liwia tworzenie nowych obiektów za pomocą kodu.
" VB umo\liwia interakcję z innymi programami systemu Windows.
" VB umo\liwia tworzenie własnych bibliotek.
W zasadzie mo\na powiedzieć, \e tworzenie powa\niejszych aplikacji bez programowania w
języku Visual Basic nie bardzo ma sens.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
24
MS Access 2000  zaawansowane techniki
programowania baz danych
Budowa modułów
Ka\dy moduł składa się z sekcji deklaracji, z sekcji procedur i funkcji.
W sekcji deklaracji modułu mo\na umieszczać deklaracje stałych i zmiennych
obowiązujących w całym module.
Deklaracja zmiennych wygląda następująco:
Dim zmienna1 As typ1, zmienna2 As typ2, ....
Deklaracja stałych wygląda następująco:
Const stała1 = wartość1, stała2 = wartość2, itd...
Typy zmiennych w języku Visual Basic ró\nią się nieznacznie od typów deklarowanych dla
wartości pól tabel. Poni\ej w tabeli przedstawiamy odpowiedniki typów między Accessem a
językiem Visual Basic:
Odpowiedniki typów danych Access <=> Visual Basic
typ pól programu Access typ Visual Basic
Autonumer Long
Waluta Currency
Data/godzina Date
Nota String
Liczba (bajt) Byte
Liczba (całkowita) Integer
Liczba (całkowita długa) Long
Liczba (pojedyncza precyzja Single
Liczba (podwójna precyzja) Double
Liczba dziesiętna Decimal
Obiekt OLE String
Tekst String
Tak/Nie Boolean
Hiperłącze String
Oprócz typów podanych w tablicy, w języku Visual Basic mogą występować typy
definiowane przez u\ytkownika, oraz typ Variant. Zmienne tego typu mogą przechowywać
wartości wszystkich pozostałych typów i jednej zmiennej mo\na przypisywać w dowolnym
momencie daną dowolnego typu.
Zmienne typu Variant jako jedyne mogą przyjmować wartość Empty (pusty).
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
25
MS Access 2000  zaawansowane techniki
programowania baz danych
Deklaracja procedury wygląda następująco:
Sub Nazwa_procedury (arg1, arg2, .....)
deklaracje zmiennych lub stałych
.....
instrukcje
.....
End Sub
Deklaracja funkcji wygląda następująco (w treści funkcji musi wystąpić przyrównanie nazwy
funkcji jakiejś wartości albo wyra\eniu - w przykładzie podkreślone - jest to miejsce w
którym funkcja uzyskuje wartość)
Function Nazwa_funkcji (argument1, argument2, ...) As zwracany typdanych
deklaracje zmiennych lub stałych
....
....
instrukcje
Nazwa_funkcji = wyra\enie
...
End Function
UWAGA: Argumenty funkcji i procedur, deklarowane w nagłówku domyślnie przekazywane
są przez zmienną. Jeśli chcemy przekazywać je przez wartość nale\y argument poprzedzić
zwrotem ByVal.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
26
MS Access 2000  zaawansowane techniki
programowania baz danych
Podstawowe instrukcje i funkcje języka Visual Basic
Instrukcje
Do u\yteczniejszych instrukcji strukturalnych nale\ą:
Select Case:
Składnia
Select Case wyra\enie tekstowe lub liczbowe
Case wartość lub wyra\enie1
instrukcje
Case wartość lub wyra\enie2
instrukcje
Case wartość lub wyra\enie3
instrukcje
Case Else
instrukcje
End Select
Jeśli wyra\enie ma wartość jedną z podanych w instrukcjach Case to wykonywane są
instrukcje od tej instrukcji Case do następnej. Jeśli \adna z podanych wartości nie odpowiada
wartości wyra\enia to wykonywane są instrukcje po słowie Case Else
If
Składnia
If wyra\enie Then
instrukcje1
Else
instrukcje2
End If
Jeśli wyra\enie jest prawdziwe to wykonywana jest pierwsza grupa instrukcji, jeśli wyra\enie
jest fałszywe to druga grupa instrukcji.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
27
MS Access 2000  zaawansowane techniki
programowania baz danych
Pętla For
Składnia
For licznik = wartość_początkowa To wartość_końcowa
....
instrukcje
.....
Next
Instrukcje znajdujące się w pętli wykonywane są do czasu a\ licznik osiągnie wartość
końcową.
Pętla Do ... Loop
Składnia 1
Do
...
instrukcje
...
Loop Until warunek
Instrukcje w tej pętli wykonywane są tak długo, jak długo warunek nie jest spełniony. W tej
składni wykonywane są przynajmniej jeden raz niezale\nie od warunku.
Składnia 2
Do Until warunek
...
instrukcje
...
Loop
Instrukcje w tej pętli wykonywane są tak długo, jak długo warunek nie jest spełniony. Jednak
jeśli warunek jest spełniony przy wchodzeniu do pętli to instrukcje nie będą wykonane ani
razu.
Są jeszcze dwie składnie pętli Do...Loop, w których pętla działa tak długo jak długo warunek
jest spełniony.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
28
MS Access 2000  zaawansowane techniki
programowania baz danych
Funkcje
Oprócz instrukcji w kodzie języka Visual Basic mogą wystąpić wywołania funkcji. Mogą to
być funkcje własne u\ytkownika, przechowywane w modułach globalnych lub bibliotekach
(zagadnienie tworzenia bibliotek nie jest objęte programem szkolenia), oraz funkcje
wbudowane.
Język Visual Basic dostarcza u\ytkownikowi ponad 100 ró\nego rodzaju funkcji.
Szczegółowy opis wszystkich funkcji znajduje się w dokumentacji programu, w tym
materiale szkoleniowym podamy tylko listę wybranych funkcji z podziałem na kategorie.
Sterowanie programem
Opis Funkcja lub instrukcja
Tworzenie pętli Do...Loop, Exit Do, Exit For, For...Next, On...GoTo
Wyjście z programu lub End, Stop
zatrzymanie programu
Obsługa błędów On Error, Resume, Resume Next
Podejmowanie decyzji Choose, If...Then...Else, If Then, Select Case
Konwersja
Opis Funkcja lub instrukcja
Zamiana wartości ANSI na ciąg Chr
znaków
Ciąg znaków na wartość ANSI Asc
Liczba na ciąg znaków Format, Str
Ciąg znaków na liczbę Val
Zmiana jednego typu liczbowego Cbool, Cbyte, CCur, Cdate, CDbl, CDec, CInt, CLng,
na inny CSng, CStr, CVar,
Zamiana liczb dziesiętnych na inny Hex, Oct
format
Zamiana daty na liczbę Day, Month, Weekday, Year
Zamiana czasu na liczbę Hour, Minute, Now, Second
Zamiana serii liczb na datę lub DateSerial, TimeSerial
godzinę
Zamiana ciągu znaków na datę lub DataValue, TimeValue
godzinę
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
29
MS Access 2000  zaawansowane techniki
programowania baz danych
Data/Godzina
Opis Funkcja lub instrukcja
Bie\ąca data lub godzina Date, Now, Time
Ustawienie daty lub godziny Date, Time
Działania na datach DateAdd, DateDiff, DatePart
Funkcje domeny
Opis Funkcja lub instrukcja
Funkcje agregujące DAvg, DCount, DFirst, DLast, DMin, DMax, DStDev,
DStDevP, Dsum, DVar, DvarP
Wyszukiwanie wartości w domenie Dlookup
Funkcje - Dynamic Data Exchange (DDE)
Opis Funkcja lub instrukcja
U\ycie języka Visual Basic jako klienta DDE DDEExecute, DDEInitiate
Wysłanie danych z Visual Basica do serwera DDE DDEPoke, DDESend
U\ycie VB do pobrania danych z serwera DDE DDE, DDERequest
Zakończenie wymiany DDE DDETerminate, DDETerminateAll
Obsługa błędów
Opis Funkcja lub instrukcja
Przechwycenie błędu podczas wykonywania On Error, Resume
procedury
Dane o statusie błędu Err, Erl
Komunikat o błędzie Funkcja Error
Symulacja błędu w czasie wykonania Instrukcja Error
Funkcje Wejścia /Wyjścia (I/O)
Opis Funkcja lub procedura
Utworzenie lub otwarcie pliku Open
Zamknięcie pliku Close, Reset
Zapis do pliku Print #, Put, Write #
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
30
MS Access 2000  zaawansowane techniki
programowania baz danych
Sterowanie formatem danych Spc, Tab, Width #
wyjściowych
Czytanie z pliku Get, Input, Input #, Line Input #
Pobranie informacji o pliku EOF, FileAttr, FreeFile, Loc, LOF, Seek
Ustawienie lub określenie pozycji Seek
w pliku dla operacji typu
odczyt/zapis
Zarządzanie napędami ChDir, ChDrive, CurDir, MkDir, RmDir
dyskowymi i katalogami
Zarządzanie plikami Dir, Kill, Lock, Unlock, Name
Finansowe
Opis Funkcja
Obliczenia finansowe DDB, FV, IPmt, IRR, MIRR, NPer, NPV, Pmt, PPmt,
PV, Rate, SLN, SYD
Sprawdzanie zmiennych
Opis Funkcja
Sprawdzenie czy zmienna jest datą IsDate
Sprawdzenie czy zmienna jest pusta IsEmpty
Sprawdzenie czy zmienna jest równa Null IsNull
Sprawdzenie czy zmienna jest liczbą IsNumeric
Określenie typu danej przypisanej bie\ąco VarType
zmiennej typu Variant
Matematyczne
Opis Funkcja
Funkcje ogólne Exp, Log, Sqr
Funkcje trygonometryczne Atn, Cos, Sin, Tan, Derived Math Functions
Część całkowita liczby Nit, Ix
Wartość bezwzględna liczby Bas
Znak liczby Sygn.
Generowanie liczb pseudolosowych Randomize, Rnd
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
31
MS Access 2000  zaawansowane techniki
programowania baz danych
Ró\ne
Opis Funkcja
Uruchomienie innej aplikacji AppActivate, Shell
Wyświetlenie okna dialogu InputBox, MsgBox
Symulacja klawiatury SendKeys
Pobranie argumentów z linii poleceń Command
Wyszukiwanie zmiennych środowiskowych Environ
Nazwa bie\ącego u\ytkownika CurrentUser
Dzwięk z głośniczka Beep
Wykonanie akcji Microsoft Access DoCmd
SQL
Opis Funkcja
Funkcje agregujące SQL Avg, Count, First, Last, Min, Max, StDev, StDevP, Sum, Var
Ciągi znaków
Opis Funkcja
Formatowanie ciągu znaków Format
Wartości ANSI Asc, Chr
Operacje na ciągach znaków InStr, Left, LTrim, Mid, Right, RTrim, Trim
Zmiana liter z du\ych na małe i odwrotnie LCase, Ucase
Wyrównane ciągu znaków LSet, Rset
Długość ciągu znaków Len
Porównywanie dwóch ciągów znaków StrComp
Deklaracja sposobu porównywania ciągów Option Compare
znaków
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
32
MS Access 2000  zaawansowane techniki
programowania baz danych
Oprócz instrukcji w kodzie procedur i funkcji mogą wystąpić wywołania obiektów, ich
właściwości i metod w opisany poprzednio sposób, oraz funkcje i procedury utworzone w
modułach lub funkcje i procedury wbudowane (lista znajduje się w generatorze).
ZALECENIA DO ĆWICZEC
Korzystanie z języka Visual Basic rozpoczniemy od utworzenia nowego modułu o nazwie
FUNKCJE i utworzenie w tym module funkcji o nazwie Zaladowany(nazwaFormularza).
Funkcja będzie sprawdzała czy formularz o nazwie podanej jako argument funkcji jest
otwarty. Jeśli jest zwracana będzie przez funkcję wartość True, jeśli nie jest otwarty to False.
Do ćwiczeń nale\y otworzyć plik o nazwie Muzyka2000_2.mdb.
ĆWICZENIE 8
1. Proszę utworzyć nowy moduł o nazwie FUNKCJE i utworzyć w tym module nową funkcję o
nazwie ZALADOWANY. Treść funkcji zamieszczona została poni\ej.
2. Funkcja działa w sposób następujący:
" Deklarowana jest zmienna typu Integer
" Następuje nadanie funkcji wartości False
" W pętli następuje przeglądanie kolejnych formularzy z kolekcji otwartych
formularzy i następuje sprawdzenie czy właściwość Formname formularza jest równa
nazwie szukanego formularza przekazanej jako argument. Jeśli nazwa odpowiada
szukanej nazwie następuje przypisanie funkcji wartości True i zakończenie
wykonywania.
" Jako wartość końcowa występuje wartość właściwości Count kolekcji Forms.
Właściwość Count kolekcji podaje liczbę obiektów znajdujących się w kolekcji.
3. Oto Kod funkcji:
Public Function zaladowany(MojFormularz As String) As Boolean
Dim i As Integer
zaladowany = False
For i = 0 To Forms.Count - 1
If Forms(i).FormName = MojFormularz Then
zaladowany = True
Exit Function
End If
Next
End Function
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
33
MS Access 2000  zaawansowane techniki
programowania baz danych
Do następnego ćwiczenia potrzebna będzie znajomość funkcji MsgBox i obiektu DoCmd.
Obiekt DoCmd słu\y do wykonywania w języku Visual Basic akcji, które mo\na wykonać za
pomocą makr. Lista akcji podana została w części poświęconej makrom. Proszę pamiętać, \e
nale\y podawać angielskie nazwy akcji.
Składnia:
DoCmd.NazwaAkcji argument1, argument2, .....
Funkcja MsgBox wyświetla okno komunikatu z określonymi przyciskami i zwraca wartość w
zale\ności od wybranego przycisku.
Składnia
MsgBox( komunikat , typ , tytuł)
komunikat - ciąg znaków lub zmienna znakowa wyświetlana w oknie dialogowym.
typ - suma wartości numerycznych określających postać okna komunikatu
Wartość Odpowiednik VB Znaczenie
Ilość i rodzaje przycisków
0 VbOKOnly Tylko przycisk OK.
1 VbOKCancel Przyciski OK i Cancel.
2 VbAbortRetryIgnore Przyciski Abort, Retry i Ignore.
3 VbYesNoCancel Przyciski Yes, No, i Cancel buttons.
4 VbYesNo Przyciski Yes i No.
5 VbRetryCancel Przyciski Retry i Cancel.
16384 VbMsgBoxHelpButton Przycisk Help
Typ ikony
0 VbApplicationModal Brak ikony. Okno modalne dla aplikacji
16 VbCritical Ikona STOP - komunikat krytyczny.
32 VbQuestion Ostrze\enie ze znakiem zapytania.
48 VbExclamation Ostrze\enie z wykrzyknikiem.
64 VbInformation Informacja.
Przycisk domyślny
0 VbDefaultButton1 Pierwszy przycisk jako domyślny.
256 VbDefaultButton2 Drugi przycisk jako domyślny.
512 vbDefaultButton3 Trzeci przycisk jako domyślny.
768 vbDefaultButton4 Czwarty przycisk jako domyślny.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
34
MS Access 2000  zaawansowane techniki
programowania baz danych
tytuł - ciąg znaków lub zmienna znakowa, która będzie tytułem okna.
Funkcja MsgBox zwraca jedną z następujących wartości:
Wartość Odpowiedniki VB Znaczenie
1 VbOK Naciśnięto przycisk OK.
2 VbCancel Naciśnięto przycisk Cancel
3 VbAbort Naciśnięto przycisk Abort
4 VbRetry Naciśnięto przycisk Retry
5 VbIgnore Naciśnięto przycisk Ignore
6 VbYes Naciśnięto przycisk Yes
7 VbNo Naciśnięto przycisk No
ĆWICZENIE 9
Proszę zaprogramować działanie przycisków grupy opcji z formularza PANEL. Zadaniem
pierwszych trzech przycisków będzie zmiana etykiety znajdującej się nad polem listy poleceń
oraz zmiana zródła wiersza dla pola listy poleceń na odpowiednie zapytanie. Czwarty
przycisk ma zamykać formularz. Przed zamknięciem formularza wyświetlany jest komunikat z
prośbą o potwierdzenie zamknięcia formularza. Aby wykonać to ćwiczenie nale\y:
1. Wyświetlić formularz PANEL w widoku projekt
2. Zaznaczyć grupę opcji  Wybor (klikając ramkę grupy) i dla właściwości zdarzenia  przy
kliknięciu wybrać Procedura zdarzenia i uruchomić Konstruktor kodu(...)
3. Następnie nale\y wpisać poni\szy kod:
Sub Wybor_Click ()
Dim odp As Integer
Select Case Me![Wybor]
Case 1
Me![etykietka_polecen].Caption = "Katalog"
Me![Lista_polecen].RowSource = "Katalog"
Case 2
Me![etykietka_polecen].Caption = "Wydruki"
Me![Lista_polecen].RowSource = "Wydruki"
Case 3
Me![etykietka_polecen].Caption = "Klienci"
Me![Lista_polecen].RowSource = "Klienci"
Case 4
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
35
MS Access 2000  zaawansowane techniki
programowania baz danych
odp = MsgBox("czy zamknąć panel sterowania", 4 + 32 + 256, "Pytanie")
UWAGA :Powy\szą linijkę mo\na te\ zapisać wykorzystując stałe Visual Basic:
odp = MsgBox("czy zamknąć panel sterowania", vbYesNo + vbQuestion +
vbDefaultButton2, "Pytanie")
If odp = 6 Then  lub If odp= vbYes Then
DoCmd.Close acForm,  PANEL
DoCmd.SelectObject acTable, True
Else
Me![Wybor] = 1
Me![etykietka_polecen].Caption = "Katalog"
Me![Lista_polecen].RowSource = "Katalog"
End If
End Select
End Sub
4. Po wykonaniu tego ćwiczenia proszę otworzyć formularz PANEL i sprawdzić czy działa
poprawnie. Co dzieje się po otwarciu panelu, czy tak powinien się zachowywać?
ĆWICZENIE 10
Aby poprawić działanie PANELU proszę ustawić właściwość "Tytuł" formantu
"etykietka_polecen" oraz właściwość śródłoWiersza formantu "Lista_polecen"
ĆWICZENIE 11
1. Nale\y zaprogramować reakcję pola listy (pole z nazwami poleceń) na dwukrotne
kliknięcie, w taki sposób, aby po dwukrotnym kliknięciu pola listy wykonywane było
odpowiednie polecenie.
2. W polu listy wyświetlane są polecenia z tabeli MENU. Oprócz poleceń wyświetlane są
tak\e odpowiadające poleceniom numery (w kolumnie o zerowej szerokości). Jest to
kolumna związana, w związku z czym do programu przekazywany jest z pola listy, numer
polecenia.
3. Procedura powinna sprawdzać czy na liście są polecenia. Jeśli nie ma poleceń to lista po
dwukrotnym kliknięciu przekazuje wartość Null.
" w pierwszej instrukcji będziemy sprawdzać czy wartość przekazywana przez pole wynosi
Null. Jeśli tak będzie to kończymy wykonywanie procedury po wyświetleniu
odpowiedniego komunikatu.
" Jeśli jest to wartość ró\na od Null to instrukcją Select Case w zale\ności od numeru
polecenia wykonujemy odpowiednią akcję.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
36
MS Access 2000  zaawansowane techniki
programowania baz danych
4. Proszę przeanalizować, wpisać i uruchomić poni\szą procedurę:
Sub lista_polecen_DblClick(Cancel As Integer)
If IsNull([lista_polecen]) Then
MsgBox ("Nie wybrano \adnego polecenia")
Exit Sub
End If
Select Case [lista_polecen]
Case 101
DoCmd.OpenForm "Plyty", , , , acAdd
Case 102
DoCmd.OpenForm "Plyty", , , , acEdit
Case 106
DoCmd.OpenForm "Wykonawca", , , , acFormReadOnly
Case 107
DoCmd.OpenQuery "Lista_plyt"
Case Else
MsgBox "Tego jeszcze nie obsługujemy"
End Select
End Sub
ĆWICZENIE 12
Nale\y zaprogramować reakcję przycisku zamykającego aplikację
1. Jedyną nową akcją będzie tutaj akcja Quit z argumentem acQuitPrompt, wywoływana
przez instrukcję DoCmd i zamykająca aplikację.
2. Proszę wpisać poni\szą procedurę:
Sub koniec_Click()
Dim rezultat As Integer
Const komunikat = "Czy chcesz zakończyć aplikację ??"
Const typ_okna = 4 + 16 + 256
Const tytul = " pytanie ostrzegawcze"
rezultat = MsgBox(komunikat, typ_okna, tytul)
If rezultat = 6 Then
DoCmd.Quit acQuitPrompt
Else
Me![Wybor] = 1
Me![etykietka_polecen].Caption = "Katalog"
Me![lista_polecen].RowSource = "Katalog"
End If
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
37
MS Access 2000  zaawansowane techniki
programowania baz danych
W dalszej części ćwiczeń zaprogramujemy synchronizację dwóch formularzy. W pliku
muzyka2000_3.mdb (który nale\y otworzyć) znajdują się dwa nowe formularze: formularz
LISTA_PLYT i formularz TYTULY_NAGRAN.
Rys. 4 Okno dialogowe Formularz: LISTA_PLYT
Formularz LISTA_PLYT składa się z pięciu elementów sterujących:
1. Z pola kombi, w którym wyświetlane są nazwy kategorii muzycznych. yródłem
wiersza dla tego pola jest tabela KATEGORIE_MUZYCZNE.
2. Pola listy. Pole to początkowo wyświetla listę wszystkich płyt, które znajdują się w
katalogu. Docelowo ma wyświetlać tylko płyty wybranej kategorii muzycznej.
3. Przycisku Zamknij formularz ,którego zadaniem jest zamknięcie formularza.
4. Przycisku Wypo\ycz - przycisk ten jest widoczny tylko wtedy jeśli formularz
wyświetlany jest z formularza WYPOZYCZALNIA i słu\y wtedy do rejestrowania
wypo\yczenia płyty. (W tej części ćwiczeń nie zajmujemy się tym przyciskiem -
standardowo nie jest on wyświetlany. Oprogramowanie wypo\yczalni będzie
tematem pózniejszych ćwiczeń.)
5. Przycisku Tytuły nagrań - podstawowym zadaniem tego przycisku jest
wyświetlenie tytułów nagrań z wybranej płyty.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
38
MS Access 2000  zaawansowane techniki
programowania baz danych
Formularz TYTUAY NAGRAC składa się z czterech formantów:
1. Pola listy, w którym będą wyświetlane tytuły nagrań na płycie zaznaczonej w
formularzu LISTA_PLYT.
2. Przycisku Zamknij
3. Pól tekstowych Wykonawca i tytuł płyty, w których maja być wyświetlone
odpowiednio nazwa wykonawcy i tytuł płyty.
Celem pierwszej grupy ćwiczeń będzie zsynchronizowanie działania obu pól na formularzu
LISTA_PLYT w taki sposób aby po wybraniu nowej kategorii, w polu listy pojawiały się
tytuły płyt tylko z wybranej kategorii. Druga grupa ćwiczeń ma doprowadzić do
zsynchronizowania działania formularzy LISTA_PLYT i TYTULY_NAGRAN aby:
" Po kliknięciu przycisku Tytuły nagrań wyświetlany był formularz z listą nagrań
wybranej płyty.
" Jeśli wyświetlone są obydwa formularze to kliknięcie dowolnego tytułu płyty
automatycznie aktualizuje nagrania z tej płyty. Podobnie działa zmiana kategorii.
" Jeśli otwarte są oba formularze to zamknięcie formularza LISTA_PLYT
automatycznie zamyka formularz TYTULY NAGRAN.
ĆWICZENIE 13
Proszę zmodyfikować właściwość zródło wiersza pola listy lista tytułów aby rekordy
wyświetlane w tym polu były wybierane zgodnie z wartością przekazywaną przez pole lista
kategorii.
1. Wyświetl arkusz właściwości pola listy Lista tytułów
2. Kliknij w polu właściwości yródło wiersza
3. Uruchom konstruktor i po wyświetleniu siatki projektowania zapytania, w wierszu Kryteria
w kolumnie Numer kategorii wstaw jako kryterium wartość pola lista kategorii:
[Formularze]![Lista_plyt]![lista_kategorii]
4. Zamknij okno projektowania zapytania i odpowiedz twierdząco na pytanie o to, czy
aktualizować właściwość.
ĆWICZENIE 14
Efekt jaki został uzyskany w poprzednim ćwiczeniu to wyczyszczenie pola listy tytułów.
Pytanie: Co trzeba jeszcze zrobić aby po zmianie w polu lista_kategorii, w polu lista_tytulow
automatycznie wyświetlane były tytuły z danej kategorii?
1. Nale\y za pomocą procedury zdarzenia obsłu\yć zdarzenie  po aktualizacji dla pola
Lista_kategorii.. Proszę utworzyć poni\szą procedurę.
Sub lista_kategorii_AfterUpdate()
Me!lista_tytulow.Requery
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
39
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 15
Następnym etapem tworzenia aplikacji będzie wyświetlanie za pomocą przycisku Tytuły
nagrań z formularza LISTA_PLYT formularza TYTULY_NAGRAN z nagraniami z
zaznaczonej płyty (najpierw jednak sprawdzimy, czy wybrano jakąś płytę.
1. Proszę wpisać następującą procedurę:
Sub tytuly_nagran_Click()
If IsNull(Me!lista_tytulow) Then
MsgBox "wybierz jakas płytę"
Exit Sub
Else
DoCmd.OpenForm "tytuly_nagran"
End If
End Sub
ĆWICZENIE 16
Jak łatwo zauwa\yć, synchronizacja nie jest doskonała. Po wyświetleniu formularza, w polu
listy nie wyświetlane są \adne nagrania.
1. Za pomocą metody, którą wykorzystaliśmy poprzednio do filtrowania listy tytułów, proszę
stworzyć i przefiltrować listę nagrań w taki sposób aby na liście pojawiały się tylko
nagrania z płyty zaznaczonej w poprzednim formularzu.
2. Nale\y stworzyć zródło rekordów pola listy Tytuly_nagran w oparciu o tabelę Nagrania i
ustawić kryterium w kolumnie  nr_plyty . Proszę uzupełnić zródło wierszy w widoku SQL
kwerendy poni\szym kodem:
SELECT Nagrania.Nr_nagrania, Nagrania.Tytul_nagrania, Nagrania.Czas_nagrania,
Nagrania.Nr_plyty FROM Nagrania
WHERE Nagrania.Nr_plyty = [Formularze]![Lista_plyt]![lista_tytulow]
3. Sprawdz czy formularz TYTULY NAGRAN jest podręczny?
ĆWICZENIE 17
1. Co zrobić aby po kliknięciu innej płyty na formularzu LISTA_TYTULOW lista nagrań była
automatycznie aktualizowana? Nale\y sprawdzić funkcją Zaladowany(tytuly_nagran) czy
formularz TYTULY_NAGRAN jest otwarty.
" Jeśli nie jest, nie powinna być wykonywana \adna akcja.
" Jeśli jest otwarty to po kliknięciu innej płyty, lista nagrań na formularzu
TYTULY_NAGRAN powinna być zaktualizowana, czyli powinniśmy ponowić zapytanie
pola listy.
2. Wpisz następującą procedurę:
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
40
MS Access 2000  zaawansowane techniki
programowania baz danych
Sub lista_tytulow_AfterUpdate()
If zaladowany("tytuly_nagran") Then
Forms![tytuly_nagran]![lista_nagran].Requery
End If
End Sub
ĆWICZENIE 18
1. Pytanie: Dlaczego po otwarciu formularza TYTULY_NAGRAN bezpośrednio z okna bazy
danych wyświetlana jest prośba o podanie parametru i czy jest to błąd?
2. Zaprogramuj działanie przycisków zamykających oba formularze. W obu przypadkach
mo\na wpisać taką samą procedurę powodującą zamknięcie aktywnego formularza:
Sub Zamknij_Click()
DoCmd.Close
End Sub
3. Dla formularza TYTULY_NAGRAN mo\na dopisać linijkę zmieniającą napis na przycisku
Sub Zamknij_Click()
DoCmd.Close
Forms!Lista_plyt!tytuly_nagran.Caption = "tytuły nagrań"
End Sub
ĆWICZENIE 19
Co zrobić aby po zamknięciu formularza LISTA_PLYT zamykany był równocześnie formularz
TYTULY_NAGRAN jeśli jest otwarty?
1. Wpisz następującą procedurę:
Sub Form_Close()
If zaladowany("TYTULY_NAGRAN") Then
DoCmd.Close acForm, "TYTULY_NAGRAN"
End If
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
41
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 20
Proszę zmienić działanie procedury po aktualizacji listy kategorii na formularzu LISTA_PLYT
w taki sposób aby po wybraniu nowej kategorii i bezpośrednim naciśnięciu guzika tytuły
nagrań nie pokazywały się \adne nagrania  przecie\ \adnego nie wybraliśmy.
UWAGA: Pola kombi i pola listy pamiętają ostatnio wybrane wartości a\ do momentu
wyboru innej pozycji z listy, zamknięcia formularza lub sztucznego  wyzerowania pola listy.
Po wyzerowaniu pole takie będzie się zachowywało, jakby było puste (jakby nigdy nic nie
wybierano).
Zmodyfikuj następującą procedurę dla pola Lista_kategorii w formularzu LISTA_PLYT
(procedura była utworzona wcześniej).
Sub lista_kategorii_AfterUpdate()
Me!lista_tytulow.Requery
Me!lista_tytulow = Null
End Sub
ĆWICZENIE 21
Jeśli w polu listy z tytułami płyt nie jest zaznaczona \adna płyta to kliknięcie przycisku Tytuły
nagrań nie spowoduje otwarcia formularza TYTULY_NAGRAN. Co zrobić aby przycisk ten
działał na dwa sposoby jednak jeśli jest wybrana jakaś płyta:
Sposób pierwszy jeśli jest otwarty formularz TYTULY_NAGRAN to go zamkniemy. Sposób
drugi jeśli formularz nie jest otwarty to go otworzymy i zmienimy napis na przycisku na
gotowy do obsługi przycisku ze sposobu pierwszego: Zmodyfikuj następującą procedurę
(procedura jest ju\ wpisana)
Sub tytuly_nagran_Click()
If IsNull(Me!lista_tytulow) Then
MsgBox "wybierz jakąś płytę"
Exit Sub
End If
If zaladowany("TYTULY_NAGRAN") Then
Me![tytuly_nagran].Caption = "tytuły nagrań "
DoCmd.Close acForm, "TYTULY_NAGRAN"
Else
DoCmd.OpenForm "TYTULY_NAGRAN"
Me![tytuly_nagran].Caption = "ukryj tytuły"
End If
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
42
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 22
Proszę podłączyć formularz LISTA_PLYT do formularza PANEL do polecenia
przeszukiwanie katalogu i sprawdzić jego działanie.
UWAGA: Jako samodzielne ćwiczenie proszę do procedury zdarzenia po aktualizacji dodać
dwa polecenia: przenoszące fokus i akcję symulującą naciśnięcie klawisza "strzałki w dół"
(albo enter).
Następnym etapem szkolenia będzie zainstalowanie formularza rejestrującego wypo\yczanie i
zwroty płyt. W tym celu proszę wczytać plik o nazwie muzyka2000_4.mdb.
W pliku znajdują się dodatkowe obiekty:
1. Tabela KLIENCI_LISTA o polach: nr_klienta, imie, nazwisko, miasto, ulica. Zadaniem
tabeli będzie przechowywanie informacji o klientach.
2. Tabelę PLYTY proszę uzupełnić o dodatkowe pole nr_klienta: typu liczba całkowita
długa. W polu tym będziemy rejestrować fakt wypo\yczenia płyty przez klienta. Po
wypo\yczeniu klientowi płyty, numer klienta będzie wpisywany do tego pola. Po oddaniu
płyty zawartość pola będzie czyszczona (usuwany będzie numer klienta).
3. Proszę utworzyć dodatkową relację między tabelami PLYTY i KLIENCI_LISTA:
Rys. 5 Relacje pomiędzy tabelami
4. Pojawił się równie\ nowy formularz WYPOZYCZALNIA, w którym znajdują się
następujące elementy sterujące:
" pole kombi które będzie słu\yło do wybierania klienta z listy zarejestrowanych w
wypo\yczalni klientów.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
43
MS Access 2000  zaawansowane techniki
programowania baz danych
" pole listy (wypo\yczone płyty) - w tym polu będą wyświetlane tytuły płyt
wypo\yczonych przez wybranego klienta.
" przyciski poleceń: Lista płyt, Zamknij, Zwrot płyty, Rozliczenie
Rys. 6 Okno dialogowe Formularza WYPOZYCZALNIA
Celem ćwiczeń z tej części szkolenia będzie zaprogramowanie rejestrowania wypo\yczeń i
zwrotów płyt. Procesy wypo\yczania i zwrotów będą związane z programowaniem za
pomocą obiektów dostępu do danych (DAO - Data Access Objects).
Proces wypo\yczania płyty przebiegać ma w następujący sposób:
1. Po wybraniu klienta mo\na będzie przyciskiem Lista płyt - wypo\yczanie
wyświetlić formularz LISTA_PLYT, którym zajmowaliśmy się dotychczas.
Wyświetlając ten formularz trzeba będzie równocześnie pokazać przycisk
Wypo\ycz znajdujący się na tym formularzu.
2. Po wybraniu płyty z listy i kliknięciu przyciksu Wypo\ycz, odpowiednia procedura
zdarzenia ma znale\ć rekord opisujący zaznaczoną płytę w tabeli PLYTY,
sprawdzić czy płyta nie jest wypo\yczona. Jeśli jest, to wyświetlić komunikat i
zakończyć operację, a jeśli nie jest, to w polu nr_klienta wpisać numer klienta
przekazywany przez pole kombi klientów formularza WYPOZYCZALNIA
3. Po wypo\yczeniu płyty lista płyt wypo\yczonych przez klienta powinna zostać
odnowiona.
Zwrot płyty przebiega w podobny sposób:
1. Po zaznaczeniu płyty na liście wypo\yczonych płyt na formularzu
WYPOZYCZALNIA i kliknięciu przycisku Zwrot, odpowiednia procedura
zdarzenia ma usuwać numer klienta z odpowiedniego rekordu w tabeli płyty.
2. Po wykonaniu tej operacji powinna być odświe\ona lista płyt wypo\yczonych.
Pierwszym ćwiczeniem będzie synchronizacja zawartości pola listy płyt z polem w którym
wyświetlany jest klient.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
44
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 23
Najpierw nale\y uzupełnić kwerendę LISTA_PLYT o nowo dodane pole nr_klienta z tabeli
PLYTY. Po dodaniu pola kwerendę nale\y zachować. Kolejnym krokiem będzie stworzenie
zródła wiersza dla pola l_wyp_plyt na formularzu WYPOYCZALNIA. Pole to ma pokazywać
tytuły i nazwy wykonawców wypo\yczonych przez klienta płyt. Proponuję stworzyć za pomocą
kreatora (trzy kropki obok właściwości zródło wiersza) procedurę SELECT języka SQL
opartą na poprzednio zmodyfikowanej kwerendzie LISTA_PLYT:
SELECT Lista.Numer_plyty, Lista.Tytul_plyty, Lista.Nazwa_Wykonawcy,
Lista.Nr_klienta
FROM Lista_plyt as lista
WHERE Lista.Nr_klienta = [Forms]![wypozyczalnia]![klient]
Nale\y wpisać procedurę, która będzie synchronizowała zawartości pola kombi z zawartością
pola listy. Metodę REQUERY mo\na tutaj u\yć na kilka sposobów  proszę wybrać jeden.
Sub klient_AfterUpdate()
Me![l_wyp_plyt].Requery  sposób pierwszy dla Requery
DoCmd.Requery (l_wyp_plyt)  sposób drugi
DoCmd.Requery "l_wyp_plyt"  sposób trzeci
Me![l_wyp_plyt] = Null  a tu znany ju\ sposób zerowania pola
End Sub
ĆWICZENIE 24
Proszę do przycisku Lista płyt - wypo\yczanie podłączyć formularz LISTA_PLYT w taki
sposób aby w przypadku gdy nie został wybrany \aden klient, zamiast akcji pojawiał się
komunikat o konieczności wybrania klienta z listy.
1. Wpisz następującą procedurę:
Sub wypoz_Click()
If IsNull(Me!klient) Then
MsgBox "najpierw wybierz klienta"
Exit Sub
Else
DoCmd.OpenForm "lista_plyt"
End If
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
45
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 25
Proszę samodzielnie do przycisku Wypo\yczalnia na formularzu PANEL podłączyć formularz
WYPOZYCZALNIA. Przycisk ten ma jednocześnie zamykać formularz PANEL
ĆWICZENIE 26
Proszę o ustawienie właściwości zdarzeń w taki sposób aby przycisk polecenia Wypo\ycz na
formularzu LISTA_PLYT był wyświetlany tylko wtedy, gdy otwarty jest formularz
WYPOZYCZALNIA. W przeciwnym razie przycisk nie powinien być widoczny (tak jak jest
teraz).
1. Wpisz następującą procedurę:
Sub Form_Activate()
If zaladowany("wypozyczalnia") Then
Me![wypozycz].Visible = True
Else
Me![wypozycz].Visible = False
End If
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
46
MS Access 2000  zaawansowane techniki
programowania baz danych
Programowanie za pomocą obiektów dostępu do danych
Access składa się z dwóch podstawowych części  aparatu aplikacyjnego który nadzoruje
programowanie i interfejs u\ytkownika, oraz z aparatu bazodanowego JET DBEngine, który
nadzoruje przechowywanie danych i definicje wszystkich obiektów w bazie danych. Visual
Basic obsługuje dwa odmienne modele obiektów słu\ące do operacji na obiektach
przechowywanych przez aparat bazodanowy DAO (Data Access Objects) i ADO (ActiveX
Data Objects)
Kiedy baza danych zostaje otwarta, aparat aplikacyjny wczytuje odpowiednie kolekcje
obiektów z plików bazy danych i aplikacji, aby nazwy wszystkich tabel, kwerend,
perspektyw, diagramów baz danych, procedur przechowywanych, formularzy, raportów, stron
dostępu do danych, makr i modułów wyświetlić w oknie bazy danych. Najwy\szym obiektem
w hierarchii ustanawianym przez aparat aplikacyjny jest Application, który zawiera kolekcje
Forms wszystkich otwartych formularzy, kolekcję Reports, kolekcję References i inne
omówione we wcześniejszej części podręcznika. W Accessie 2000 obiekt Application zawiera
dwa dodatkowe obiekty: DBEngine (dla DAO) i Connection (dla ADO)
DAO (Data Access Objects)
Obiekt DBEngine jest starszym z dwóch modeli, słu\ącym do pobierania danych, oraz
sprawdzania lub tworzenia nowych obiektów danych. Jest modelem obiektów dostępu do
danych. Model ten najlepiej się nadaje do stosowania w ramach aplikacji z rozszerzeniem
.mdb, poniewa\ był stworzony specjalnie do współpracy z Accessem i aparatem JET
DBEngine
UWAGA: Aby skorzystać z tego modelu nale\y wcześniej załadować odwołanie do
biblioteki obiektów Microsoft DAO 3.6 Objets Library (otwórz dowolny moduł w widoku
projekt i z menu Tools/References Narzędzia/Odwołania wybierz odpowiednią bibliotekę).
Warto te\ od razu nadać tej bibliotece wy\szy priorytet ni\ posiada automatycznie
uruchamiana biblioteka Microsoft ActiveX Data Objects 2.1 Library (obie biblioteki
posiadają takie same funkcje, a Access zawsze wybierze funkcje z biblioteki o wy\szym
priorytecie, co mo\e prowadzić do konfliktów i błędów).
DAO tworzy strukturę hierarchiczną składającą się z obiektów następującego typu:
Aparat bazy danych Microsoft JET DBEngine
Znajduje się na szczycie hierarchii obiektów dostępu do danych. Zawiera w sobie kolekcję
Workspaces (obszarów roboczych), Errors (błędów), Properties (właściwości). Do metod
obiektu nale\ą między innymi: CompactDatabase, CreateWorkspace, RepairDatabase.
Kolekcja obszarów roboczych (workspaces)
Kolekcja Workspaces (obszarów roboczych) składa się z obiektów typu Workspace (obszar
roboczy). W obiekcie Workspace znajdują się: kolekcja baz danych (databases) , kolekcja
u\ytkowników (Users) i kolekcja grup (Groups). Do metod obiektu nale\ą: BeginTrans,
CreateGroup, Close, CreateUser, CommitTrans, OpenDatabase, CreateDatabase, Rollback.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
47
MS Access 2000  zaawansowane techniki
programowania baz danych
Kolekcja baz danych (databases)
Kolekcja baz danych (Databases) składa się z obiektów typu baza danych. Obiekt Database
(baza danych) zawiera kolekcje: Containers (kontenery), Relations (relacje), QueryDefs
(Definicje zapytań), TableDefs (definicje tabel), Recordsets (Zestawy rekordów). Poni\ej w
tabeli znajduje się krótki opis ka\dej z tych kolekcji.
Containers W obiekcie kontener znajdują się informacje o bazie danych i o
wszystkich zachowanych w bazie tabelach, kwerendach, relacjach,
formularzach, raportach, makrach, modułach, stronach dostępu do
danych.
Kontenery Forms i Reports zawierają informacje o wszystkich
obiektach zachowanych w bazie, kolekcje Forms i Reports, omawiane
w pierwszej części szkolenia, tylko o obiektach otwartych.
W ka\dym kontenerze wybranego typu znajduje się kolekcja
Dokumentów (Documents), z których ka\dy opisuje jeden obiekt
danego typu zachowany w bazie.
Obiekt dokument nie zawiera kolekcji ani metod, ale ma między
innymi właściwości:
Container - nazwa konteneru, do którego nale\y obiekt Dokument
Name - nazwa obiektu
Relations Ka\dy obiekt Relation reprezentuje relację w bazie danych. Obiekt
Relation składa się z obiektów Fields.
QueryDefs Obiekt QueryDef zawiera definicję kwerendy.
TableDefs (kolekcja Obiekty TableDef zawierają definicje tabel i tabel dołączonych.
domyślna)
Recordsets Obiekty typu Recordset reprezentują rekordy z tabel lub rekordy
z dynamicznego zestawu rekordów otrzymanego w wyniku zapytania.
Za pomocą obiektów wymienionych w powy\szej tabeli mo\na z poziomu kodu języka
Visual Basic modyfikować strukturę bazy danych (na przykład tworzyć tabele, modyfikować
tabele, jak równie\ modyfikować wartości rekordów z danymi).
ADO (ActiveX Data Objects)
Zestaw modeli ADO został wprowadzony przez Microsoft aby zapewnić mo\liwość odwołań
nie tylko do obiektów przechowywanych przez aparat JET DBEngine, lecz tak\e do obiektów
przechowywanych w innych bazach danych, takich jak Microsoft SQL Serwer. Modele te
noszą nazwę architektury obiektów danych ActiveX. Poniewa\ ADO ma zapewnić obiekty
dla dowolnych aparatów danych obsługujących obiekty danych ActiveX, nie zawsze są one
zgodne z architekturą DAO. Jeśli jednak spodziewamy się, \e pewnego dnia nasza aplikacja
zostanie rozbudowana do aparatu danych ActiveX ( na przykład serwera SQL) korzystniejsze
mo\e się okazać korzystanie właśnie z ADO. Równie\ jeśli aplikacja tworzona jest jako
projekt Accessa (rozszerzenie .adp) połączony z serwerem SQL, nale\y się posługiwać
wyłącznie architekturą ADO.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
48
MS Access 2000  zaawansowane techniki
programowania baz danych
W dalszej części kursu skupimy się na architekturze DAO, prezentując przy okazji
podstawowe ró\nice pomiędzy architekturą DAO i ADO.
Najpierw szczegółowo omówimy obiekt typu recordset.
W programie Access 2000 dostępnych jest pięć typów obiektów recordset dla programowania
w DAO (w tym jeden tylko przy u\yciu ODBC), oraz cztery typy kursorów stosowane w
programowaniu w wykorzystanie obiektów ADO.
1. Tabelowy zestaw rekordów DAO (table). Mo\e odnosić się tylko do lokalnej tabeli.
yródło nie mo\e być tabelą dołączoną. W tabelowym zestawie rekordów mo\na
ustanowić indeks bie\ący i u\yć go do wyszukiwania wierszy za pomocą metody seek
dostępnej tylko dla tego typu zestawu. Typ tabelowy jest typem domyślnym dla lokalnych
tabel.
2. Dynamiczny zestaw wyników DAO (dynaset). yródłem rekordów dla tego zestawu mo\e
być tabela lokalna, tabela dołączona, kwerenda lub instrukcja SQL. Do wyszukiwania
rekordów w tym zestawie rekordów mo\na u\yć metody find. Pozwala uzyskiwać i
aktualizować dane z jednej lub kilku połączonych tabel i mo\e zawierać aktualizowalne
rekordy. Obiekt Recordset typu zestaw dynamiczny jest zestawem rekordów, który mo\na
stosować do dodawania, zmiany lub usuwania rekordów z określonej tabeli lub tabel bazy
danych. Typ dynamiczny jest typem domyślnym dla tabel dołączonych, kwerend i
instrukcji SQL. śeby w zestawie obejrzeć nowododane rekordy nale\y u\yć metody
requery dla rekorsetu.
3. Utrwalony zestaw wyników DAO (snapshot). Zwraca kopie danych istniejących w bazie
w momencie tworzenia zestawu. Kopii tych nie mo\na modyfikować. Do wyszukiwania
rekordów słu\y metoda find. Przydatny na przykład do generowania raportów lub
wyszukiwania wartości.
4. Zestaw (DAO) i kursor (ADO) typu progresywnego (forward only) jest to typ podobny
do typu utrwalonego, z wyjątkiem tego, \e nie jest udostępniany \aden kursor. Rekordy
udostępnione przez ten typ zestawu mo\na przewijać tylko w przód rekord po rekordzie
(metoda movenext). Efektem jest lepsza wydajność w sytuacji, gdy potrzebne jest tylko
jedno przejście po rekordach zestawu wynikowego. W ADO ten typ kursora jest kursorem
domyślnym.
5. Zestaw (ODBC) i kursor (ADO) typu dynamicznego (dynamic) jest to zestaw/kursor,
który pozwala oglądać nie tylko zmiany w istniejących wierszach, ale równie\, w
odró\nieniu od zestawu dynamicznego DAO, nowo dodawane przez innych
u\ytkowników rekordy. Poniewa\ liczba rekordów mo\e zmieniać się dynamicznie więc
w tym zestawie/kursorze nie będzie miała zastosowania metoda recordcount.
6. Kursor klinowy ADO (keyset) jest odpowiednikiem zestawu dynamicznego w DAO. Jeśli
ADO korzysta z baz typu .mdb kursor ten umo\liwi dostep do istniejących w momencie
jego tworzenia rekordów. Podobnie jak w zestawie dynamicznym DAO nowododawane
rekordy nie będą widoczne.
7. Kursor migawkowy ADO (static) działa podobnie jak utrwalony zestaw wyników DAO
Kiedy tworzony jest nowy obiekt Recordset, bie\ący rekord jest ustawiany na pierwszym
rekordzie, je\eli istnieją ju\ jakieś rekordy. Jeśli nie ma \adnych rekordów, właściwość
RecordCount przyjmuje wartość 0, a właściwości BOF i EOF przyjmują wartość True.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
49
MS Access 2000  zaawansowane techniki
programowania baz danych
W jaki sposób otworzyć zestaw rekordów ?
Zestawy rekordów tworzy metoda OpenRecordset (DAO) (lub metoda Open w ADO).
Metoda OpenRecordset jest dostępna dla obiektów typu: Database, TableDef, QueryDef i
Recordset. W pierwszych trzech przypadkach składnia jest inna ni\ dla ostatniego:
Składnia dla obiektu typu Database:
Set zmienna = baza_danych.OpenRecordset(zródło,typ[,opcje])
zródło - ciąg znaków określający zródło rekordów dla tworzonego zestawu. Mo\e to być
nazwa tabeli, nazwa kwerendy lub instrukcja SQL wybierająca rekordy.
typ - jedna z pięciu stałych predefiniowanych:
" dbOpenTable Otwiera obiekt Recordset typu tabelowego
" dbOpenDynamic Otwiera obiekt Recordset typu dynamicznego (tylko ODBC).
" dbOpenDynaset Otwiera obiekt Recordset typu zestaw dynamiczny
" dbOpenSnapshot Otwiera obiekt Recordset typu utrwalonego
" dbOpenForwardOnly Otwiera obiekt Recordset typu progresywnego.
Opcje dla DAO  dowolna ilość z ośmiu dostępnych w DAO (w ADO co najwy\ej dwie
opcje z pięciu dostępnych).
" dbAppendOnly Tylko dodawanie nowych wierszy (dla table i dynaset)
" dbSeeChanges Zabrania równoczesnej edycji rekordu (zwraca błąd)
" dbDenyWrite Zabrania edycji i wstawiania, gdy ktoś inny otworzył zestaw.
" dbDenyRead Zabrania czytania wierszy, gdy ktoś inny otworzył zestaw.
" dbInconsistent lub dbConsistent Pierwsza dopuszcza, druga zaś zabrania zmian
dokonywanych na przykład w kluczu obcym jednej z tabel, w ten sposób by po zmianie
pole zawierało wartość naruszającą spójność u\ytego w kwerendzie lub instrukcji SQL
sprzę\enia.( Zmiany nie mogą jedna naruszać więzów integralności danych.
" dbPessimistic lub dbOpimistic Pierwsza (domyślna) opcja blokuje wiersz
bezpośrednio po u\yciu metody edit. Blokada trwa a\ do wystąpienia metody update,
Druga opcja blokuje wiersz tylko na czas wykonywania metody update. Jeśli ktoś inny
w tym czasie poddał ten sam wiersz edycji następuje błąd czasu wykonania.
Przykład tworzenia zestawu rekordów (dla tabeli klienci)
Dim Baza As Database, Zestaw As Recordset
Set Baza = DBEngine.Workspaces(0).Databases(0) albo Set Baza = CurrentDb()
Set Zestaw = baza.OpenRecordset( Klienci ,dbOpenTable, dbOptimistic)
W tym momencie zmienna zestaw reprezentuje zestaw rekordów w postaci tabeli.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
50
MS Access 2000  zaawansowane techniki
programowania baz danych
Wybrane metody dla obiektu Recordset
metoda Składnia Działanie
AddNew Zestaw.AddNew Dodaje nowy rekord do zestawu. Pola przyjmują
wartość Null, nadawany jest kolejny numer dla pola
automumer. Dodany rekord staje się rekordem
bie\ącym. Po Update rekordem bie\ącym staje się
rekord który był poprzednio bie\ącym
Close Zestaw.Close Zamyka zestaw rekordów. Nie mo\na zamknąć bazy
danych metodą Close jeśli jest otwarty zestaw
rekordów. Próba zamknięcia zamkniętego obiektu
powoduje wygenerowanie błędu.
Delete Zestaw.Delete Usunięcie bie\ącego rekordu. Aby usunąć rekord,
musi istnieć bie\ący rekord. Jeśli go nie ma, nale\y
u\yć metody Move, Find lub Seek, albo ustawić
właściwość Bookmark. Usunięty rekord pozostaje
bie\ącym a\ do przejścia do innego rekordu. Nie
mo\na go jednak edytować.
Edit Zestaw.Edit Kopiuje bie\ący rekord z zestawu do bufora w celu
umo\liwienia przeprowadzenia zmian w rekordzie. Po
wykonaniu zmian i w celu ich zatwierdzenia nale\y
u\yć metody Update. Musi istnieć rekord bie\ący.
FindFirst, Zestaw.FindFirst Znajduje odpowiednie rekordy.
FindLast, kryteria Kryteria  wyra\enie typu ciąg znaków (klauzula
FindNext, WHERE bez słowa kluczowego WHERE, na przykład:
FindPrevious kryteria = "Title = 'Sales Representative'"
Właściwość Zestaw.NoMatch = True określa, \e
operacja wyszukiwania się nie powiodła..
Move Zestaw.Move Przesuwa rekord o podaną ilość wierszy.
ile_wierszy[, start] Ile_wierszy (dodatnia liczba do przodu, ujemna do
tyłu)
start  ciąg znaków identyfikujący zakładkę.
MoveFirst Zestaw.MoveFirst Poruszanie się w zestawie rekordów.
MoveLast kryteria
MoveNext
MovePrevious
OpenRecordSet Zestaw.OpenReco Tworzenie recordsetu na podstawie ju\ istniejącego
rdset Set nowyzestaw = zestaw. OpenRecordSet
([typ],[opcje]) ([typ],[opcje])
Requery Zestaw.Requery Aktualizacja zestawu rekordów przez ponowne
wykonanie zapytania
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
51
MS Access 2000  zaawansowane techniki
programowania baz danych
1. Mo\na stosować tylko w indeksowanych zestawach
Seek Zestaw.Seek
typu tabela.
3 porównanie3 ,
2. porównanie - jeden z operatorów >,>=,<,<=,=
klucz1, klucz2 ...
3. wartości odpowiadające polom klucza bie\ącego
indeksu zestawu
Update zestaw.Update Zachowuje zmiany wprowadzone do bie\ącego
rekordu metodą AddNew lub Edit
Właściwości recordsetów:
Nazwa Opis
BOF, EOF Wskazuje czy bie\ący rekord jest przed pierwszym lub po ostatnim
rekordzie. Wskazniki tylko do odczytu.
Przykłady zastosowania:
1. Do Until MyTable.EOF
MyTable.MoveNext (...)
Loop
2 MyTable.MoveLast
Do Until MyTable.BOF
MyTable.MovePrevious (...)
Loop
Bookmark Ustawia zakładkę jednoznacznie identyfikującą rekord w zestawie
odczyt/zapis.
Dim zakladka As String
Zakladka = zestaw.Bookmark
...(instrukcje przenoszące rekord bie\ący)
zestaw.Bookmark = zakladka
Bookmarkable Czy mo\na ustawić zakładkę. W przypadku załączonych tabel z innych
baz danych mo\e być to niemo\liwe.
If zestaw.bookmarkable Then
......
End If
Filter (dynaset i snapshot - read/write).
Set MySet = MyDB.OpenRecordset("Orders", dbOpenDynaset)
MySet.Filter = "[Ship Country] = 'UK'"
Set FilteredSet = MySet.OpenRecordset()
Uwaga. Po ustawieniu filtru trzeba ponownie otworzyć ten sam zestaw rekordów jako
inny.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
52
MS Access 2000  zaawansowane techniki
programowania baz danych
Index Ustawia dla zestawu typu tabela bie\ący indeks (read/write). Musi to być
nazwa istniejącego obiektu typu indeks.
LastModified Dynaset i Table, ustawia Bookmark na ostatnim modyfikowanym lub
dodanym rekordzie. Zestaw.Bookmark = Zestaw.LastModified
DataCreated, Data utworzenia tabeli i data ostatniej zmiany projektu tabeli.
LastUpdated
Name Nazwa obiektu
RecordCount W rekordsecie typu table zwraca ilość rekordów w zestawie. Usunięcie
rekordu zmniejsza licznik.
W rekordsecie typu dynaset zwraca ilość rekordów do których uzyskano
dostęp (bezpośrednio po otwarciu zestawu, jeśli istnieją rekordy zwraca
wartość jeden, jeśli rekordów nie ma wartość zero). W celu faktycznego
policzenia ilości rekordów w rekordsecie typu dynaset najpierw trzeba
przejść do rekordu ostatniego np. metodą movelast. Wtedy rekordset
uzyska dostęp do wszystkich istniejących rekordów.
Restartable Określa czy mo\na ponowić zapytanie dla danego zestawu rekordów
metodą Requery
Sort Sortowanie
Set MySet = MyDB.OpenRecordset("Orders", dbOpenDynaset)
MySet.Sort = "[Ship Country]" ' Ustala porządek sortowania
Set SortedSet = MySet.OpenRecordset() ' Tworzy drugi dynaset 
Type Określa typ zestawu
ValidationRule ="UK"
=100
Between 10 And 100
Between #1/1/94# And #3/3/94#
In ("British Columbia", "Quebec")
Like "P[A-F]###" Wyraz musi zaczynać się na literę P, po niej musi
wystąpić litera z zakresu od A do F a następnie 3 cyfry. PB281 i PF031 są
poprawne; PG219 i PBS12 nie są poprawne.
Dlookup("[State Code]", "[States]", "[State Code]=[Region]") Is Not Null
Pole Region musi zwrócić wartość przechowywaną w polu State Code z
tabeli States. Wyra\enie zwraca wartość True je\eli są takie rekordy, w
przeciwnym wypadku zwraca wartość False.
ValidationText Komunikat o złamaniu reguły poprawności
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
53
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 27
Proszę zaprogramować procedurę wypo\yczającą płytę w formularzu LISTA_PLYT.
1. Nale\y utworzyć zestaw rekordów dla tabeli PLYTY, ustawić właściwość Index, na
istniejący indeks "numer płyty", a następnie za pomocą metody Seek odszukać rekord
opisujący daną płytę.
2. Jeśli płyta nie jest wypo\yczona, to po znalezieniu rekordu, otwieramy go do edycji,
wpisujemy numer klienta, podajemy komunikat o powodzeniu operacji, zatwierdzamy
zmianę i opuszczamy procedurę
3. Wpisz następującą procedurę:
Private Sub wypozycz_Click()
If IsNull(Me![lista_tytulow]) Then
MsgBox "wybierz jakas płytkę"
Exit Sub
End If
Dim rcs As Recordset
Set rcs = CurrentDb.OpenRecordset("plyty", dbOpenTable)
rcs.Index = "numer płyty"
rcs.Seek "=", Me!lista_tytulow
If rcs.NoMatch Then
MsgBox "nie znalazłem płyty" & Me!lista_tytulow
Else
If IsNull(rcs("nr_klienta")) Then
rcs.Edit
rcs("nr_klienta") = Forms![Wypozyczalnia]![klient]
rcs.Update
MsgBox "wypozyczenie dokonane"
Else
MsgBox "niestety płytę ma inny klient"
End If
End If
rcs.Close
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
54
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 28
Nale\y dopisać procedurę, która zadba o odświe\enie listy płyt po\yczonych przez klienta na
formularzu WYPOZYCZALNIA. Najładniej jeśli odświe\enie nastąpi bezpośrednio po
wypo\yczeniu płyty. Proszę dopisać do poprzedniej procedury w odpowiednim miejscu
poni\szą linijkę:
Forms![Wypozyczalnia]![l_wyp_plyt].Requery
ĆWICZENIE 29
Nale\y wpisać procedurę zapisująca zwrot po\yczonej płyty
Sub zwrot_plyty_Click()
Dim rcs As Recordset
If IsNull(Me!l_wyp_plyt) Then
MsgBox "zaznacz plyte ktora chcesz zwrocic"
Exit Sub
End If
Set rcs = CurrentDb.OpenRecordset("PLYTYy", dbopentable)
rcs.Index = "numer płyty"
rcs.Seek "=", Me![l_wyp_plyt]
If rcs.NoMatch Then
MsgBox "nie moge znalezć płyty" & Me!l_wyp_plyt
Else
If Not IsNull(rcs("nr_klienta")) Then
rcs.Edit
rcs("nr_klienta") = Null
rcs.Update
MsgBox "dokonano zwrotu"
Forms![Wypozyczalnia]![l_wyp_plyt].Requery
Else
MsgBox " ta płyta nie była wypo\yczona  sprawdz to !!"
End If
End If
rRcs.Close
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
55
MS Access 2000  zaawansowane techniki
programowania baz danych
W dalszej części ćwiczeń będziemy rejestrować w tabeli WYPOZYCZENIA wszystkie
operacje wypo\yczania i zwrotów (tabela będzie przydatna do naliczania opłat za po\yczone
płyty).
ĆWICZENIE 30
1. Proszę zało\yć tabelę WYPOZYCZENIA o polach:
Nazwa pola typ danych
[nr_kolejny] Autonumeracja
[nr_plyty] Liczba całkowita
[data_wypozyczenia] Data/Godzina
[data_zwrotu] Data/Godzina
[nr_klienta] Liczba całkowita długa
2. Wszystkie pola z wyjątkiem pola [data_zwrotu] proszę ustawić jako wymagane.
ĆWICZENIE 31
Proszę uzupełnić relacje w bazie o utworzoną tabelę w sposób przedstawiony na rysunku:
Wynik ćwiczenia
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
56
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 32
Nale\y w taki sposób zmodyfikować procedurę wypo\yczającą, aby równocześnie z
zarejestrowaniem faktu wypo\yczenia płyty w tabeli PLYTY, w tabeli WYPOZYCZENIA
tworzony był nowy rekord, a w nim były rejestrowane następujące dane: numer kolejny,
numer płyty, numer wypo\yczającego, data wypo\yczenia
1. Przeanalizuj zmodyfikowaną wersję procedury i uzupełnij (modyfikacje zostały
podkreślone)
Sub wypozycz_Click()
Dim rcs As Recordset, wyp As Recordset
Set rcs = CurrentDb.OpenRecordset("PLYTY", dbopentable)
Set wyp = CurrentDb.OpenRecordset("WYPOZYCZENIA", dbopentable)
rcs.Index = "numer płyty"
rcs.Seek "=", Me!lista_tytulow
If rcs.NoMatch Then
MsgBox "nie znalazłem płyty" & Me!lista_tytulow
Else
If IsNull(rcs("nr_klienta")) Then
rcs.Edit
rcs("nr_klienta") = Forms![Wypozyczalnia]![klient]
rcs.Update
wyp.AddNew
wyp("nr_klienta") = Forms![Wypozyczalnia]![klient]
wyp("nr_plyty") = Me![lista_tytulow]
wyp("data_wypozyczenia") = Date()
wyp.Update
MsgBox "wypozyczenie dokonane"
Forms![Wypozyczalnia]![l_wyp_plyt].Requery
Else
MsgBox "niestety płytę ma inny klient"
End If
End If
rcs.Close
wyp.Close
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
57
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 33
Zmodyfikuj procedurę zdarzenia dla przycisku Zwrot płyty w taki sposób aby procedura
zapisywała w tabeli WYPOZYCZENIA datę zwrotu płyty. Poni\ej zamieszczona jest
zmodyfikowana wersja procedury.
Sub zwrot_plyty_Click()
Dim rcs As Recordset, wyp As Recordset
Set rcs = CurrentDb.OpenRecordset("plyty", dbopentable)
Set wyp = CurrentDb.OpenRecordset("wypozyczenia", dbOpenDynaset)
 zwróć uwagę na typ danych dbOpenDynaset  wyjaśnienia poni\ej
rcs.Index = "numer płyty"
rcs.Seek "=", Me![l_wyp_plyt]
If rcs.NoMatch Then
MsgBox "nie moge znalezć płyty" & Me!l_wyp_plyt
Else
If Not IsNull(rcs("nr_klienta")) Then
rcs.Edit
rcs("nr_klienta") = Null
rcs.Update
 UWAGA metody find szukają tylko w dbOpenDynaset lub dbOpenSnapshot
wyp.FindFirst "[nr_plyty]=" & Me![l_wyp_plyt] & " and
isnull([data_zwrotu])"
wyp.Edit
wyp("data_zwrotu") = Date
wyp.Update
MsgBox "dokonano zwrotu"
Forms![Wypozyczalnia]![l_wyp_plyt].Requery
Else
MsgBox " ta płyta nie była wypo\yczona !!"
End If
End If
rcs.Close
wyp.Close
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
58
MS Access 2000  zaawansowane techniki
programowania baz danych
Do dalszych ćwiczeń nale\y wczytać bazę, która znajduje się w pliku muzyka2000_5.mdb
Wczytana baza została uzupełniona w następujący sposób:
" Uzupełniono tabelę WYPOZYCZENIA o dwa pola: [czy_zaplacone] (Tak/Nie) i
[nr_wplaty] (Liczba całkowita długa)
" Utworzono tabelę WPLATY o następujących polach: [nr_wpłaty] (autonumer), [kwota]
(waluta), [data_wplaty] (Data/Godzina), [nr_klienta] (liczba - całkowita długa)
" Utworzono formularz ROZLICZENIE, na którym znajdują się trzy pola tekstowe mające
wyświetlać informacje o wypo\yczonych płytach, o płytach nierozliczonych oraz kwotę do
zapłacenia.
" Przycisku Wpłata rejestrującego wpłatę za nierozliczone płyty (płyta nierozliczona jest to
płyta, która została zwrócona i nie została opłacona).
Naszym zadaniem będzie w kolejnych ćwiczeniach:
1. Uzupełnienie procedury wypo\yczania o wypełnianie pól  czy zapłacone i  nr
wpłaty w tabeli wypo\yczenia.
2. Utworzenie relacji w bazie z udziałem nowej tabeli
3. Podpięcie formularza ROZLICZENIE do przycisku Rozliczenie na formularzu
ROZLICZENIA
4. Zaprojektowaniu procedury rozliczającej i wyświetlającej odpowiednie dane na
formularzu ROZLICZENIA
5. Zaprogramowanie przycisku Rejestruj wpłatę na formularzu :ROZLICZENIA
ĆWICZENIE 34
1. Proszę uzupełnić procedurę wypo\yczania o wypełnianie pola: [czy_zaplacone] (wstawić
wartość Nie dla nowego rekordu) i [nr_wplaty] [wstawić wartość Null].
2. W tym celu w procedurze obsługi zdarzenia  Przy kliknięciu dla przycisku Wypo\ycz na
formularzu LISTA_PLYT nale\y dodać instrukcje:
wyp("czy_zaplacone") = 0
wyp("nr_wplaty") = Null
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
59
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 35
Proszę utworzyć odpowiednie relacje zgodnie z poni\szym rysunkiem:
Wynik ćwiczenia
ĆWICZENIE 36
Proszę zaprogramować działanie przycisku Rozliczanie na formularzu WYPOśYCZALNIA
według następującego opisu:
1. Działanie przycisku - Dla wybranego klienta procedura zdarzenia powinna otwierać
formularz o nazwie ROZLICZENIE i wyświetlać na nim następujące informacje:
" ilość wypo\yczonych płyt
" ilość płyt oddanych, za które klient jeszcze nie zapłacił
" kwotę nale\ną do zapłacenia za oddane płyty. Kwota wyliczana prostym
algorytmem - suma wyra\enia (opłata stała + ilość_dni * stawka) dla wszystkich
oddanych i nie zapłaconych płyt.
2. Opisane w poprzednich trzech punktach operacje nie wymagają wprowadzania zmian do
danych.
3. Oprócz tych informacji, na formularzu ROZLICZENIE znajduje się przycisk Rejestruj
wpłatę, którego zadaniem będzie zapisanie niezbędnych danych w bazie, w przypadku gdy
u\ytkownik zdecyduje się zarejestrować wpłatę zgodnie z rozliczeniem.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
60
MS Access 2000  zaawansowane techniki
programowania baz danych
4. Za wyświetlenie formularza i umieszczenie na nim informacji odpowiedzialna jest
następująca procedura: (komentarze wewnątrz procedury)
(pola do wypełnienia: [ilosc_plyt], [ilosc_nierozliczona], [do_zaplacenia])
Sub rozlicz_Click()
If IsNull(Me!klient) Then
MsgBox "najpierw wybierz klienta"
Exit Sub
End If
Dim il_ukl As Integer, il_nzl As Integer, kwota As Currency, wyp As Recordset
Set wyp = CurrentDb.OpenRecordset("wypozyczenia")
DoCmd.OpenForm "rozliczenie"
il_uk = 0 ' ilość płyt, które klient ma jeszcze w domu
il_nzl = 0 ' ilość płyt, które klient oddał ale jeszcze za nie nie zapłacił
kwota = 0  kwota do zapłacenia
wyp.MoveFirst ' idz do pierwszego rekordu
Do While wyp.EOF = False ' dopóki nie dojdziesz do końca rób pętlę
' ponizszy warunek sprawdza płyty które klient ma w domu
If wyp("nr_klienta") = Val(Me!klient) And IsNull(wyp("data_zwrotu")) Then
il_ukl = il_ukl + 1
End If
' poni\szy warunek sprawdza płyty które klient oddał i chce za nie zapłacić
If wyp("nr_klienta") = Val(Me!klient) And Not IsNull(wyp("data_zwrotu")) And
Not wyp("czy_zaplacone") Then
il_nzl = il_nzl + 1
kwota = kwota + 1 + (Date - wyp("data_wypozyczenia")) * 2
End If
wyp.MoveNext ' idz do KONIECZNIE inaczej się zapętlimy  sprawdz dlaczego?
Loop  koniec pętli
' na samym końcu wpisujemy obliczone wartości do odpowiednich pól w formularzu
Forms![rozliczenie]![ilosc_plyt] = il_ukl
Forms![rozliczenie]![ilosc_nierozliczona] = il_nzl
Forms![rozliczenie]![do_zaplacenia] = kwota
wyp.Close
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
61
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 37
Nale\y przeanalizować rejestrację wpłaty za pomocą przycisku Rejestruj wpłatę na
formularzu ROZLICZENIE
1. Jakie operacje powinna wykonać procedura rejestrująca wpłatę ?
" powinna utworzyć w tabeli WPLATY nowy rekord i wpisać tam numer klienta,
datę, i kwotę
" powinna przeszukać tabelę WYPOZYCZENIA,
- znalezć wszystkie rekordy dla danego numeru klienta, które mają w polu
data zwrotu wartość inną ni\  Null i w polu czy zapłacone wartość  Nie
- wpisać numer wpłaty do pola nr wpłaty
- w polu czy zapłacone wstawić wartość  Tak .
2. Po utworzeniu tej procedury zamienimy ją w następnym ćwiczeniu na procedurę
transakcyjną.
Sub zarejestruj_wplate_Click()
Dim wpla As Recordset, wyp As Recordset
Set wyp = CurrentDb.OpenRecordset("WYPOZYCZENIA")
Set wpla = CurrentDb.OpenRecordset("WPLATY")
' poni\ej instrukcje wpisujące nowy rekord z wpłatą w tabeli WPLATY
wpla.AddNew
wpla("kwota") = Me![do_zaplacenia]
wpla("data_wplaty") = Date
wpla("nr_klienta") = Forms![Wypozyczalnia]![klient]
wpla.Update
' poni\ej instrukcje aktualizujące tabelę WYPOZYCZENIA dla odpowiednich rekordów
zmieniane są pola [czy_zaplacone] na Tak i [nr_wpłaty] na odpowiedni numer wpłaty.
Pytanie tylko jak znalezć numer wpłaty ? Otó\ nowy rekord nie staje się automatycznie
rekordem bie\ącym. Rekordem bie\ącym pozostaje najczęściej rekord, który był
bie\ącym przed u\yciem metody AddNew. Aby uczynić dodany rekord bie\ącym,
nale\y u\yć metody Move do zakładki (bookmark) określonej przez ustawienie
właściwości LastModified
wpla.Move 0, wpla.LastModified
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
62
MS Access 2000  zaawansowane techniki
programowania baz danych
 Czas na zmiany w tabeli WYPOZYCZENIA:
' Robimy pętlę, przeszukujemy tabelę WYPOZYCZENIA, wyszukujemy wszystkie
rekordy dla danego numeru klienta [nr_klienta], które mają w polu [data_zwrotu]
wartość  inną ni\ Null i w polu [czy_zaplacone] wartość Nie, wpisujemy numer
wpłaty do pola [nr_wplaty] a do pola [czy_zapłacone] wstawiamy wartość True.
wyp.MoveFirst ' idz do pierwszego rekordu (warto się zastanowić co zrobić, gdy
nie ma \adnego rekordu?
Do Until wyp.EOF
If wyp("nr_klienta") = Val(Forms![Wypozyczalnia]![klient]) And Not
IsNull(wyp("data_zwrotu")) And Not wyp("czy_zaplacone") Then
wyp.Edit
wyp("czy_zaplacone") = True
wyp("nr_wplaty") = wpla("nr_wplaty")
wyp.Update
End If
wyp.MoveNext ' idz do nastepnego
Loop
wpla.Close
wyp.Close
MsgBox "Wpłata została zarejestrowana "
DoCmd.Close acForm, "ROZLICZENIE"
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
63
MS Access 2000  zaawansowane techniki
programowania baz danych
Przetwarzanie transakcyjne
Aby wymusić integralność danych, na przykład w poprzedniej procedurze zadbać o to aby
dane zapisane były zarówno w tabeli WPLATY jak i w tabeli WYPOZYCZENIA, mo\na
wykorzystać mechanizm transakcyjny istniejący w Accessie.
W języku Access Basic istnieją trzy metody obsługi transakcji:
1. Metoda BeginTrans - słu\y do rozpoczęcia nowej transakcji.
2. Metoda CommitTrans do zatwierdzenia wszystkich zmian wprowadzonych od ostatniej
metody BeginTrans
3. Metoda Rollback słu\y do wycofania i anulowania wprowadzonych zmian
Metody powy\sze są metodami obiektu Workspace, stąd te\ ich składnia wygląda
następująco:
Dim Obszar As Workspace
Set Obszar = DBEngine.Workspaces(0)
Obszar.BeginTrans  rozpoczęcie transakcji
...
instrukcje
...
If MsgBox ( Czy zachować wszystkie zmiany ? ,4+32) = vbYes then
Obszar.CommitTrans  zatwierdzenie transakcji (zmian)
Else
Obszar.Rollback  wycofanie transakcji (cofnięcie zmian)
End if
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
64
MS Access 2000  zaawansowane techniki
programowania baz danych
ĆWICZENIE 38
Proszę zmienić poprzednią procedurę na transakcyjną uwzględniając jednocześnie nie
przyjmowanie wpłaty w wysokości 0 złotych. Nowy kod został podkreślony.
Sub zarejestruj_wplate_Click()
Dim odp as Integer
DBEngine.Workspaces(0).BeginTrans
(.. tutaj procedura ju\ istniejąca a\ do słówka Loop kończącego pętlę..)
Loop
wyp.Close
wpla.Close
odp = MsgBox("chcesz przyjąć wpłatę w wysokości " & Me!do_zaplacenia, 4 + 16 + 256)
If odp = vbNo Or Me!do_zaplacenia <= 0 Then
DBEngine.Workspaces(0).Rollback
MsgBox "operacja została anulowana"
Else
DBEngine.Workspaces(0).CommitTrans
MsgBox " wpłata została zarejestrowana"
End If
DoCmd.Close acForm, "ROZLICZENIE"
End Sub
Na koniec warto jeszcze dodać do formularza WYPOZYCZENIA dla przycisku zamknij
króciutką procedurę:
Sub zamknij_Click()
DoCmd.Close
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
65
MS Access 2000  zaawansowane techniki
programowania baz danych
Zagadnienia dodatkowe
Sposób dopisywania rekordów do tabeli będącej zródłem wiersza
dla pola edycji z listą wyboru (obsługa zdarzenia  Przy wartości
spoza listy )
Wykonanie tego zadania polega na utworzeniu procedury zdarzenia  Przy wartości spoza
listy . Procedura taka powinna wykonywać kolejno:
1. Wyświetlać pytanie, czy u\ytkownik na pewno chce wprowadzić nową wartość (mo\e
nastąpił błąd podczas wpisywania ?)
2. Jeśli odpowiedz jest pozytywna to powinniśmy kontynuować
3. Instrukcją RunCommand z parametrem acCmdUndo nale\y wycofać zmiany dokonane w
tym polu (na razie nie ma zmian, czyli wprowadzonej wartości nie mo\na zatwierdzić bo
nie ma jej na liście)
4. Wyświetlić formularz przeznaczony do wprowadzania danych do tabeli (w naszym
przypadku formularz WYKONAWCA)
5. Do tego formularza powinny zostać przepisane dane z pola edycji (argument procedury
NoweDane)
6. Dalej następuje praca z formularzem (nie ma instrukcji)
7. Nadanie zmiennej Odpowiedz wartości acDataErrContinue w celu zablokowania
komunikatów o błędach
ĆWICZENIE 39
1. Oto treść procedury obsługującej zdarzenia  Przy wartości spoza listy
2. Proszę umo\liwić wpisywanie do pola listy nowych wykonawców i ich rejestrowanie
(formularz PLYTY)
Sub numer_wykonawcy_NotInList(NoweDane As String, Odpowiedz As Integer)
Dim odp As Integer
odp = MsgBox("Czy chcesz dodać nowego wykonawcę?", 4 + 32)
If odp = 6 Then
DoCmd.RunCommand acCmdUndo
DoCmd.RunCommand acCmdUndo
DoCmd.OpenForm "WYKONAWCA", acNormal, , , acFormAdd
Forms![wykonawca]![Nazwa_Wykonawcy] = NoweDane
Odpowiedz = acDataErrContinue
End If
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
66
MS Access 2000  zaawansowane techniki
programowania baz danych
Po utworzeniu tej procedury pozostała nam jeszcze jedna czynność do zaprogramowania.
Otó\ wartości z nowego rekordu nie zostaną automatycznie wpisane do naszego wyjściowego
pola edycji (usunęliśmy je stamtąd akcją RunCommand). Aby się ponownie pojawiły
musimy kolejno:
1. Wybrać formularz PLYTY,
2. Ponowić zapytanie pola edycji z listą wyboru
3. Ustawić wartość pola edycji na numer wykonawcy z formularza WYKONAWCY
4. Po wykonaniu tych czynności formularz WYKONAWCY mo\e zostać zamknięty
Operacje podane w punktach 1, 2, 3 i 4 powinniśmy wykonać dla zdarzenia  Przy
zwolnieniu formularza WYKONAWCA ale tylko wtedy jeśli otwarty jest formularz
PLYTY. Poni\ej podana jest szczegółowa procedura
UWAGA: Działanie to ma sens tylko wtedy jeśli wywołaliśmy formularz WYKONAWCA
opisany w poprzedniej procedurze sposób. Jeśli formularz WYKONAWCA otwarty jest
niezale\nie i takie sytuacje mogą się powtarzać (nie powinny zgodnie z koncepcją bazy) to
powinniśmy przy programowaniu przewidzieć taką sytuację wyświetlając na przykład
odpowiednie pytanie.
UWAGA Jeśli wcześniej nie przypisano zdarzeń do przycisków na formularzu
WYKONAWCA, to nale\y to zrobić teraz albo samodzielnie , albo wykorzystując gotowe
makro a nazwie PRZYCISKI.
Procedura w formularzu WYKONAWCA:
Sub Form_Unload(Cancel As Integer)
Dim numer As Long
numer = Me![numer_wykonawcy]
If zaladowany("PLYTY") Then
DoCmd.SelectObject acForm, "PLYTY"
Forms![Plyty]![numer_wykonawcy].Requery
Forms![Plyty]![numer_wykonawcy] = numer
End If
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
67
MS Access 2000  zaawansowane techniki
programowania baz danych
Wykorzystanie języka SQL- przykład
SELECT
Składnia
SELECT [predicate] { * | table.* | [table.]field1 [, [table.]field2.[, ...]]}
[AS alias1 [, alias2 [, ...]]]
FROM tableexpression [, ...] [IN externaldatabase]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]
Instrukcja SELECT wykorzystuje następujące argumenty:
Argument Opis
Predicate Jedno ze słów kluczowych: ALL, DISTINCT, DISTINCTROW, or TOP.
Wykorzystujemy do ograniczenia liczby rekordów otrzymanych w
wyniku.
Table Nazwa tabeli z której wybieramy rekordy.
field1, field2 Nazwy pól z których pobieramy dane. If you include more than one field,
they will be retrieved in the order listed.
alias1, alias2 Nazwy kolumn u\ywane do wyświetlania uzyskanych danych w widoku
Arkusza danych.
Tableexpression Nazwa tabeli lub tabel z których chcemy pobrać dane.
Externaldatabase Nazwa bazy danych zawierającej tabele podane w tableexpression, jeśli
nie znajdują się w bie\ącej bazie danych.
Minimalna składnia instrukcji SELECT wygląda następująco:
SELECT fields FROM table
Mo\na korzystać ze znaku (*) aby wybrać wszystkie pola. Na przykład z tabeli Employees:
SELECT Employees.* FROM Employees;
Nazwę pola mo\na poprzedzić nazwą tabeli i kropką.
SELECT Employees.Department, SupvName
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
68
MS Access 2000  zaawansowane techniki
programowania baz danych
FROM Supervisors, Employees
WHERE Employees.Department = Supervisors.Department;
Słowo kluczowe As słu\y do określania nowych nazw pól w widoku Arkusza danych
SELECT [Birth Date] AS Birth
FROM Employees;
Instrukcja SELECT lub SELECT...INTO wybierają wszystkie rekordy. Jeśli chcemy wybrać
tylko niektóre, spełniające zało\one kryteria nale\y skorzystać z klauzuli WHERE. Mo\na
u\ywać tak\e predykatów ALL, DISTINCT, DISTINCTROW, or TOP. Jeśli u\yty jest jeden
z predykatów DISTINCT, DISTINCTROW, or TOP, zapytanie jest filtrowane ju\ po
wszystkich innych klauzulach instrukcji SQL
Składnia
SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM sourcetable
ALL
Domyślnie, jeśli nie wybierzemy inaczej u\ywane jest ALL. Poni\sze dwa przykład są
równoznaczne:
SELECT ALL *
FROM Employees
ORDER BY [Employee ID];
SELECT *
FROM Employees
ORDER BY [Employee ID];
DISTINCT
DISTINCT u\ywa się wtedy, gdy nie chcemy włączać do zestawu wyników rekordów, które
zawierają zdublowane dane w wybranych polach.
SELECT DISTINCT [Last Name]
FROM Employees
DISTINCT jest równowa\ny ustawieniu we właściwościach kwerendy opcji Wartości
Unikatowe na Tak
DISTINCTROW
DISTINCTROW u\ywa się wtedy aby zapytanie nie wyświetlało identycznych rekordów, a
nie jak poprzednio tylko rekordów z takimi samymi wartościami w wybranych polach.
Poni\szy kod SQL pokazuje zastosowanie DISTINCTROW do wyświetlenia tylko tych firm
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
69
MS Access 2000  zaawansowane techniki
programowania baz danych
które zło\yły przynajmniej jedno zamówienie, nie wyświetlając równocześnie szczegółów
zamówień:
SELECT DISTINCTROW [Company Name]
FROM Customers INNER JOIN Orders
ON Customers.[Customer ID] = Orders.[Customer ID]
ORDER BY [Company Name];
Jeśli nie będzie DISTINCTROW, ka\da firma pojawi się tyle razy na liście, ile zamówień
zło\yła
DISTINCTROW jest ignorowany jeśli zapytanie dotyczy tylko jednaj tabeli.
DISTINCTROW jest równowa\ny ustawieniu we właściwościach kwerendy opcji Rekordy
Unikatowe na Tak (wartość domyślna).
TOP
Wybiera tylko pierwsze rekordy w podanej ilości:
SELECT TOP 25 [First Name], [Last Name]
FROM Students
WHERE [Graduation Year] = 1994
ORDER BY [Grade Point Average] DESC
SELECT TOP 10 PERCENT [First Name], [Last Name]
FROM Students
WHERE [Graduation Year] = 1994
ORDER BY [Grade Point Average] DESC
klauzula WHERE
Za pomocą klauzuli WHERE mo\na filtrować rekordy, czyli decydować o tym, które rekordy
zostaną włączone do wyniku zapytania.
Składnia
SELECT fieldlist
FROM tableexpression
WHERE criteria
Polecenie SELECT z klauzulą WHERE wykorzystuje następujące argumenty.
Argument Description
fieldlist nazwy pól wraz z aliasami i predykatami selekcji (ALL, DISTINCT,
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
70
MS Access 2000  zaawansowane techniki
programowania baz danych
DISTINCTROW, or TOP), lub inne opcje instrukcji SELECT
tableexpression Nazwa tabeli lub tabel
criteria Wyra\enie, które musi być prawdziwe aby rekord pojawił się w
wyniku zapytania (został wybrany)
WHERE jest opcjonalne lecz jeśli zostanie dołączone, umieszczane jest po FROM. Na
przykład wybór wszystkich pracowników z jednego departamentu lub w podanym zakresie
wiekowym
WHERE Dept = 'Sales'
lub
WHERE Age Between 18 And 30
Do klauzuli WHERE jest bardzo podobna klauzula HAVING. WHERE określa które rekordy
zostaną wybrane a HAVING które rekordy będą wyświetlane ju\ po agregowaniu przez
GROUP BY.
Przykłady wyra\eń dla klauzuli WHERE
SELECT [Last Name], Salary
FROM Employees
WHERE Salary > 21000;
Klauzula WHERE mo\e składać się z 40 wyra\eń połączonych operatorami logicznymi And i
Or.
SELECT [Product ID], [Units In Stock]
FROM Products
WHERE [Units In Stock] <= [Reorder Level];
Literały typu data muszą być podane w formacie U.S., nawet jeśli u\ywa się innej wersji
programu Access. Na przykład Maj 10, 1994, powinien być wprowadzony jako 5/10/94, na
przykład:
SELECT *
FROM Orders
WHERE [Shipped Date] = #5/10/94#
Klauzula FROM
W klauzuli FROM do łączenia danych z ró\nych tabel mo\na u\ywać operatorów połączeń
LEFT JOIN and RIGHT JOIN.
Składnia
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 = table2.field2
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
71
MS Access 2000  zaawansowane techniki
programowania baz danych
Argumenty LEFT JOIN i RIGHT JOIN.
Argument Description
table1, table2 nazwy tabel
field1, field2 Nazwy pól łączących.
LEFT JOIN wyświetla wszystkie rekordy z tabeli po lewej stronie i tylko odpowiadające z
tabeli po prawej
RIGHT JOIN odwrotnie.
Przykład:
SELECT [Category Name], [Product Name]
FROM Categories LEFT JOIN Products
ON Categories.[Category ID] = Products.[Category ID];
Do połączeń wewnętrznych (połączone pola równe) słu\y operator INNER JOIN.
Połączenia INNER, RIGHT i LEFT mo\na zagnie\d\ać ze sobą.
SELECT [Department Name], [First Name] & " " & [Last Wyświetla wszystkie wydziały,
Name] AS Name nawet jeśli nie ma w nich
pracowników
FROM Departments LEFT JOIN Employees
ON Departments.[Department ID] =
Employees.[Department ID]
ORDER BY [Department Name];
SELECT [Last Name] & ", " & [First Name] AS Name, Wyświetla wszystkich
[Department Name] pracowników nawet
jeśli nie są przypisani
FROM Departments RIGHT JOIN Employees
do wydziałów
ON Departments.[Department ID] = Employees.[Department ID]
ORDER BY [Last Name] & ", " & [First Name];
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
72
MS Access 2000  zaawansowane techniki
programowania baz danych
Filtrowanie przez formularz
ĆWICZENIE 40
1. Proszę wczytać bazę danych, która znajduje się w pliku muzyka2000_6.mdb
2. Nale\y wykonać filtrowanie przez formularz dla tabeli KLIENCI.
W bazie danych muzyka2000_6.mdb zostały dodane następujące obiekty:
" Z bazy danych Northwind.mdb została zaimportowana tabela PRODUKTY. Będziemy
filtrować produkty przez pola cena jednostkowa i nazwa produktu.
" Utworzono formularz zespolony o następującej budowie:
- formularz główny (niezwiązany) o nazwie PRODUKTY zawierający trzy pola
niezwiązane: wsp, kryteria, kryteria1 oraz przyciski słu\ące do filtrowania:
- formularz wyświetlający dane z listy produktów w widoku Arkusza danych, o
nazwie PRODUKTY_PF - jest to podformularz do formularza PRODUKTY.
3. Tworzenie mechanizmu filtrowania zaczniemy od obsługi przycisku Filtruj a konkretnie od
procedury obsługi zdarzenia  Przy kliknięciu . Ta procedura powinna wykonywać
następujące działania:
" Na podstawie danych wprowadzonych do pól nazwa wsp, kryteria, kryteria1,
powinna tworzyć kryterium dla klauzuli WHERE instrukcji SELECT. Kryterium jest
postaci ciągu znaków
" W tym celu wprowadzimy dwie zmienne:
Kod_sql - zmienna znakowa zawierająca treść instrukcji SELECT
Kryteria - zmienna znakowa zawierająca treść klauzuli WHERE bez słowa
kluczowego WHERE
" Zmienną kod_sql zainicjujemy w postaci ciągu znaków instrukcji
 SELECT(...)WHERE . Na końcu koniecznie musi stać znak spacji!
" Teraz musimy zamienić wartości z pól wsp, kryteria i kryteria1 na ciągi znaków,
utworzyć poprawny ciąg znaków będący kryterium i dołączyć go do instrukcji
SELECT
" Kolejna czynność to zmiana zródła rekordów dla podformularza na utworzoną
przez nas instrukcję SELECT
" Następna czynność to ponowienie kwerendy dla podformularza
4. Poni\ej znajduje się treść procedur do filtrowania tylko po nazwie oraz po nazwie i cenie
jednocześnie.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
73
MS Access 2000  zaawansowane techniki
programowania baz danych
Sub Polecenie5_Click()
Dim kod_sql As String, kryteria As String, zrodlo As String
' Utworzenie klauzuli WHERE wykorzystującej kryteria wprowadzone
' przez u\ytkownika i ustawienie właściwości "yródło rekordów" formularza "Produkty_pf".
' Chr(39) to apostrof
' Chr(42) to gwiazdka
kod_sql = "SELECT DISTINCTROW Produkty.[Id produktu],Produkty.[Cena jednostkowa],
Produkty.[Nazwa produktu], Produkty.[id kategorii] FROM Produkty WHERE "
kryteria = "(Produkty.[Nazwa produktu]) Like " & Chr(39) & Chr(42) & Me!kryteria &
Chr(42) & Chr(39)
zzrodlo = kod_sql & kryteria
Me![Produkty_pf].Form.RecordSource = zrodlo
Me![Produkty_pf].Requery
End Sub
Sub Polecenie6_Click()
Dim kod_sql As String, kryteria As String, zrodlo As String, kryteria2 As String
kod_sql = "SELECT DISTINCTROW Produkty.[Id produktu],Produkty.[Cena jednostkowa],
Produkty.[Nazwa produktu], Produkty.[id kategorii] FROM Produkty WHERE "
kryteria = "(Produkty.[Nazwa produktu]) Like " & Chr(39) & Chr(42) & Me!kryteria &
Chr(42) & Chr(39)
kryteria2 = "(Produkty.[cena jednostkowa])>=" & Me!kryteria1
zrodlo = kod_sql & kryteria & " and " & kryteria2
Me![Produkty_pf].Form.RecordSource = zrodlo
Me![Produkty_pf].Requery
End Sub
ĆWICZENIE 41
Jako samodzielne ćwiczenie proszę napisać procedurę obsługi zdarzenia  Przy kliknięciu
dla przyciksu Poka\ wszystko.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
74
MS Access 2000  zaawansowane techniki
programowania baz danych
Podłączanie danych z zewnętrznych zródeł
Proces podłączania tabel ze zródeł zewnętrznych przebiega w następujących krokach:
1. Za pomocą metody CreateTableDef dla bie\ącej bazy danych (jeśli tabela ma być
przyłączona w bie\ącej bazie danych) nale\y utworzyć obiekt TableDef.
2. Następnie nale\y określić właściwości Connect i SourceTableName obiektu TabelDef.
3. Za pomocą metody Append kolekcji TableDefs nale\y obiekt utworzony w punkcie
pierwszym, o właściwościach określonych w punkcie drugim dołączyć do kolekcji
TableDefs.
ĆWICZENIE 42
Proszę utworzyć nowy niezwiązany formularz o nazwie DOLACZ i stworzyć w nim trzy
przyciski poleceń. Nale\y oprogramować pierwsze dwa przyciski - podłącz tabelę xls i
podłącz tabelę dbf Patrz uwaga pod ćwiczeniem 43.
Sub Polecenie1_Click()
Dim def_tab As TableDef
Set def_tab = CurrentDb.CreateTableDef("z_excela")
def_tab.Connect = "Excel 5.0;DATABASE=C:\e.xls"
def_tab.SourceTableName = "lampa$"
CurrentDb.TableDefs.Append def_tab
End Sub
Sub Polecenie2_Click()
Dim def_tab As TableDef
Set def_tab = CurrentDb.CreateTableDef("z_dbf")
def_tab.Connect = "dBASE III;DATABASE=C:\"
def_tab.SourceTableName = "e#dbf"
CurrentDb.TableDefs.Append def_tab
End Sub
ĆWICZENIE 43
Proszę napisać procedurę zdarzenia dla odłączania obu tabel.
Sub Polecenie3_Click()
CurrentDb.TableDefs.Delete "z_excela"
CurrentDb.TableDefs.Delete "z_dbf"
End Sub
UWAGA dla powy\szych procedur muszą istnieć poni\sze pliki:
c:\e.xls z arkuszem o nazwie lampa, oraz plik c:\e.dbf
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
75
MS Access 2000  zaawansowane techniki
programowania baz danych
Obsługa błędów wykonania
Visual Basic posiada dosyć prosty mechanizm obsługi błędów wykonania. W poprzednich
ćwiczeniach podczas próby dołączenia plików z excela, czy z dbf mogły zaistnieć ró\ne błędy
wykonania  na przykład nie mo\na znalezć dołączanego pliku lub istnieje ju\ tabela o takiej
samej nazwie  mo\na wzbogacić nasz kod o obsługę tych błędów:
Sub Polecenie1_Click()
On Error GoTo byk
Dim def_tab As TableDef
Set def_tab = CurrentDb.CreateTableDef("z_excela")
def_tab.Connect = "Excel 5.0;DATABASE=C:\e.xls"
def_tab.SourceTableName = "lampa$"
CurrentDb.TableDefs.Append def_tab
' \eby procedura nie weszła do obsługi błędu
 gdy jest prawidłowo wykonywana nale\y zastosować exit sub
Exit Sub
byk:
Select Case Err.Number  sprawdzam numer błędu
Case 3012 ' obiekt o podanej nazwie ("z_excela") ju\ istnieje
' DECYZJA : usuwamy istniejący obiekt
i próbujemy ponowić linię w której błąd powstał
CurrentDb.TableDefs.Delete "z_excela"
Resume
Case 3125 ' w przypadku pliku dołączanego z excela podano błędną
' nazwę arkusza (nie istnieje arkusz o nazwie "lampa"
' znak dolara jest tylko symbolicznym oznaczeniem arkusza
' DECYZJA:
' wyswietlamy odpowiedni komunikat i przerywamy procedurę
MsgBox "Podano nieprawidłową nazwę arkusza" + vbCr + _
" spodziewana nazwa to "
Case 3011 ' nieprawidłowa ście\ka dostępu do arkusza "lampa"
' na przykład nie istnieje plik c:\e.xls
' DECYZJA:
' wyświetlamy odpowiedni komunikat i przerywamy procedurę
MsgBox " Nie mo\na odnalezć pliku c:\e.xls" + vbCr + _
" lub arkusza o nazwie lampa"
Case Else
MsgBox " numer błędu : " + Str(Err.Number) + vbCr + _
" opis błędu : " + Err.Description + vbCr + _
" plik pomocy : " + Err.HelpFile + vbCr
End Select
End Sub
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
76
MS Access 2000  zaawansowane techniki
programowania baz danych
Opis:
W powy\szej procedurze instrukcja On Error GoTo byk powoduje włączenie obsługi błędów.
W przypadku wystąpienia błędu nastąpi skok z instrukcji, która spowodowała błąd do
instrukcji oznaczonej etykietą byk :
Instrukcja Resume powoduje kontynuację wykonywania programu od powtórzenia instrukcji
która błąd spowodowała
Uwaga.
Instrukcja Resume, w zale\ności od potrzeb mo\e wystąpić w trzech postaciach:
1. Resume - powoduje wznowienie wykonania programu od instrukcji w której wystąpił
błąd.
2. Resume Next - powoduje wznowienie wykonania programu od następnej instrukcji po
instrukcji w której wystąpił błąd.
3. Resume nr_wiersza (lub etykieta) - powoduje wznowienie wykonywania programu od
wiersza lub podanej etykiety.
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
77


Wyszukiwarka

Podobne podstrony:
MS Access 97 PL Zaawansowane techniki programowania
MATHCAD 2000 PL Przewodnik po programie
Zaawansowane techniki programowania 01 Składnia C
ms powerpoint 2000 pl kurs podstawowy
Zaawansowane techniki programowania 03 Szablony
Zaawansowane techniki programowania 04 Gniazda
MS Ofiice 2002 PL XP Ćwiczenia zaawansowane
Debugowanie NET Zaawansowane techniki diagnostyczne?bnet
Access 10 PL cwiczenia praktyczne cwac10
Ćwiczenie nr 14 – Zaawansowane możliwości programu
MS Access

więcej podobnych podstron