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
M
S
A
cc
es
s
9
7
P
L
za
w
a
n
so
w
a
n
e
te
ch
n
ik
i
p
ro
g
ra
m
o
w
a
n
ia
b
a
z
d
a
n
y
ch
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23
i
MS Access 97 – zaawansowane techniki
programowania baz danych
SPIS TREŚCI
WPROWADZENIE ...............................................................................................................................................1
OMÓWIENIE BAZY DANYCH..........................................................................................................................2
ZDARZENIA - ICH ROLA W TWORZENIU APLIKACJI ............................................................................5
U
STAWIANIE SPOSOBU URUCHAMIANIA BAZY DANYCH
.....................................................................................11
L
ISTA WYBRANYCH AKCJI
..................................................................................................................................12
OBIEKTY MICROSOFT ACCESS - ICH WŁAŚCIWOŚCI I METODY....................................................16
W
YBRANE METODY I WŁAŚCIWOŚCI NIEKTÓRYCH OBIEKTÓW
. ..........................................................................18
WSTĘP DO JĘZYKA VISUAL BASIC ............................................................................................................21
PODSTAWOWE INSTRUKCJE I FUNKCJE JĘZYKA VISUAL BASIC...................................................24
I
NSTRUKCJE
.......................................................................................................................................................24
F
UNKCJE
............................................................................................................................................................26
P
ROGRAMOWANIE ZA POMOCĄ OBIEKTÓW DOSTĘPU DO DANYCH
(D
AO
)...........................................................44
P
RZETWARZANIE TRANSAKCYJNE
......................................................................................................................61
ZAGADNIENIA DODATKOWE.......................................................................................................................63
W
YKORZYSTANIE JĘZYKA
SQL-
PRZYKŁAD
......................................................................................................65
F
ILTROWANIE PRZEZ FORMULARZ
......................................................................................................................70
P
ODŁĄCZANIE DANYCH Z ZEWNĘTRZNYCH ŹRÓDEŁ
...........................................................................................72
O
BSŁUGA BŁĘDÓW WYKONANIA
........................................................................................................................73
W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23
ii
MS Access 97 – 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
1
MS Access 97 – 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
2
MS Access 97 – 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
3
MS Access 97 – 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.
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ń).
Etykieta
Grupa opcji
Przycisk
polecenia
Pole listy
Etykieta
Przycisk
polecenia
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 97 – zaawansowane techniki
programowania baz danych
Rys. 3 Okno dialogowe formularza PŁYTY
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. Źródłem
wiersza dla tego pola jest tabela WYKONAWCY.
3) Pole kombi - pole związane z polem Numer_kategorii w tabeli PLYTY. Źró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
1
4
3
6
7
5
2
14
8
10
13
9
12
11
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 97 – 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 muzyka97_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
6
MS Access 97 – 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
(Resize)
Podczas zmiany rozmiaru, lecz takŜe podczas otwarcia
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
7
MS Access 97 – 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
jest anulowana.
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 źró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
8
MS Access 97 – 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
9
MS Access 97 – 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) >Zmiana 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
10
MS Access 97 – 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 ĆWICZEŃ:
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
11
MS Access 97 – 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óźniejszym czasie).
3. Makra:
Pierwszy (akcja UruchomPolecenie, polecenie PrzejdźDoPierwszegoRekordu)
Poprzedni (akcja UruchomPolecenie, polecenie PrzejdźDoPoprzedniegoRekordu)
Następny (akcja UruchomPolecenie, polecenie PrzejdźDoNastępnegoRekordu)
Ostatni (akcja UruchomPolecenie, polecenie PrzejdźDoOstatniegoRekordu)
Usuń płytę (akcja UruchomPolecenie, polecenie UsuńRekord)
Zamknij formularz (akcja Zamknij bez Ŝadnych argumentów)
Nowa płyta (akcja UruchomPolecenie, polecenie PrzejdźDoNowegoRekordu)
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
12
MS Access 97 – 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
(ApplyFilter)
Uruchamia filtr w postaci nazwanego filtru, kwerendy lub klauzuli
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ł
(Beep)
Sygnał dźwiękowy z komputerowego głośnika.
AnulujZdarzenie
(CancelEvent)
Anuluje zdarzenie, które spowodowało uruchomienie makra. Lista
zdarzeń, które moŜna anulować została przedstawiona wcześniej.
Zamknij
(Close)
Zamyka
okno
otwartego
obiektu
określonego
podanymi
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
(
CopyObject
)
Kopiuje wybrany obiekt do innej bazy Microsoft Access lub do tej
samej bazy pod inną nazwą.
UsuńObiekt
(DeleteObject)
Usuwa wybrany obiekt z bazy danych.
UruchomPolecenie
(RunCommand)
Wykonuje wybrane polecenie menu. Polecenie musi mieć sens dla
obiektu. Na przykład nie moŜna wykonać poleceń z menu Rekordy,
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
(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
akcją Klepsydra.
ZnajdźNastępny
(FindNext)
Znajduje następny rekord spełniający warunki określone w
ostatnim wywołaniu akcji ZnajdźRekord.
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 97 – zaawansowane techniki
programowania baz danych
Akcja
Opis
ZnajdźRekord
(FindRecord)
Wyszukuje rekord spełniający warunki określone argumentami.
Argumenty są takie same, jak argumenty w polu dialogu
wyświetlanego z menu poleceniem Edycja > Znajdź
IdźDoFormantu
(GoToControl)
Akcja przenosząca fokus do elementu sterującego aktywnym
formularzu. Jako argument naleŜy podać nazwę elementu. MoŜna
przenieść fokus tylko do tych elementów, które mogą go mieć.
Akcja dotyczy równieŜ pól w tabeli, czy kwerendzie.
IdźDoStrony
(GoToPage)
Akcja przenosi fokus do pierwszego elementu sterującego na
podanej stronie aktywnego formularza.
IdźDoRekordu
(GoToRecord)
Akcja ustawia podany rekord jako rekord bieŜący tabeli,
formularza lub kwerendy. Jeśli jako argument rekord wybrana
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 IdźDo to rekordem
bieŜącym będzie rekord o numerze podanym w argumencie Skok.
Klepsydra
(Hourglass)
Zmienia wskaźnik myszy na klepsydrę podczas wykonywania
makra. Akcja wykorzystywana zwykle w połączeniu akcją Echo
Maksymalizuj
(Maximize
)
Powiększa aktywne okno na cały ekran
Minimalizuj
(Minimize)
Zwija aktywne okno do ikony
RuchRozmiar
(MoveSize)
Przesuwa lub zmienia rozmiary aktywnego okna.
OknoKomunikatu
(MsgBox)
Wyświetla okno z komunikatem lub ostrzeŜeniem. UŜytkownik
moŜe wybrać typ komunikatu, tekst komunikatu, tytuł okna i
zdecydować czy będzie sygnał dźwiękowy
OtwórzFormularz
(OpenForm)
Otwiera formularz w widoku formularz, arkusz danych, podgląd
wydruku lub projekt. Za pomocą argumentów akcji moŜna ustawić
filtr dla formularza lub klauzulę. Tryby otwarcia formularza to:
Dodawanie, Edycja, Tylko do odczytu.
OtwórzModuł
(OpenModule)
Otwiera wybrany moduł w widoku projekt podanej procedury
OtwórzKwerendę
(OpenQuery)
Uruchamia kwerendę w jednym z trzech widoków (projekt, arkusz
danych, podgląd wydruku).
OtwórzRaport
(OpenReport)
Otwiera wybrany raport w widoku projekt lub podgląd wydruku,
albo wysyła raport do wydruku (widok wydruk). Dla raportu
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
14
MS Access 97 – zaawansowane techniki
programowania baz danych
Akcja
Opis
OtwórzTabelę
(OpenTable)
Otwiera wybraną tabelę w jednym z trzech widoków (projekt,
arkusz danych, podgląd wydruku)
WyprowadźDo
(OutputTo)
Wysyła dane z wybranego obiektu bazy danych do osobnego pliku.
MoŜe to być plik tekstowy txt, plik w formacie arkusza Excela xls,
plik formatu rich-text rtf, plik formatu html, plik Internet
Information Serwera idc lub htx, albo plik Active Serwera asp.
Wydruk
(PrintOut)
Drukuje aktywny obiekt bazy danych. MoŜna wybrać zakres
wydruku, numery stron, jakość i sortowane kopii.
Zakończ
(Quit)
Kończy pracę programu MS Access. MoŜliwe są trzy ustawienia
argumentu Opcje: Zapisz wszystkie, Potwierdzaj i Zakończ. Ta
ostatnia opcja powoduje zakończenie pracy bez zachowywania
zmian.
ZmieńNazwę
(Rename)
Zmienia nazwę wybranego obiektu. Obiekt musi być zamknięty.
OdświeŜObiekt
(RepaintObject)
Wymusza natychmiastowe zakończenie rozpoczętych aktualizacji
ekranu i przeliczania elementów sterujących na aktywnym
formularzu
PonówKwerendę
(Requery)
Aktualizuje dane źródłowe formantu lub, jeśli aktywny jest
formularz to formularza przez ponowne wykonanie kwerendy.
UŜywane do aktualizacji zawartości pól list, pól kombi i
formularzy.
Przywróć
(Restore)
Przywraca poprzednie rozmiary okna zwiniętego do ikony lub
rozwiniętego na cały ekran. Akcja bez parametrów, działa na
aktywnym oknie.
UruchomAplikację
(RunApp)
Uruchamia aplikację (naleŜy podać nazwę pliku wykonywalnego
wraz ze ścieŜką dostępu), po uruchomieniu aplikacji aplikacja
działa na pierwszym planie, a makro kontynuuje działanie.
Uruchom kod
(RunCode)
Wywołuje funkcję języka Visual Basic
UruchomMakro
(RunMacro)
Podajemy nazwę makra. MoŜna jako argumenty podać liczbę
powtórzeń oraz wyraŜenie, które gdy stanie się fałszywe, zatrzyma
działanie makra.
UruchomSQL
(RunSQL)
Uruchamia instrukcję SQL będącą kwerendą funkcjonalną, czyli
modyfikującą dane, lub kwerendą definiującą dane. MoŜna
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
15
MS Access 97 – zaawansowane techniki
programowania baz danych
Akcja
Opis
WybierzObiekt
(SelectObject)
Jeśli trzeci argument „w oknie bazy danych” ustawiony jest na
NIE, wybiera otwarty obiekt o podanej nazwie i typie. Jeśli trzeci
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
(SendKeys)
Wysyła podane jako argument klawisze (symulacja pracy na
klawiaturze)
WyślijObiekt
(SendObject)
Dołącza arkusz, formularz, raport lub moduł do listu poczty
elektronicznej.
Argument
Czekaj=Tak
wstrzymuje
dalsze
instrukcje makra do zakończenia symulacji.
UstawWartość
(SetValue)
UstawWartość bardzo często wykorzystywana akcja za pomocą
której moŜna zmienić wartość samego elementu sterującego lub
wartość wybranej właściwości tego elementu. Z akcji tej będziemy
bardzo często korzystać w języku Visual Basic.
UstawOstrzeŜenie
(SetWarnings)
Włącza lub wyłącza wyświetlanie komunikatów systemowych.
Powoduje zablokowanie wyświetlania komunikatów modalnych w
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
(ShowAllRecords)
Usuwa filtr ustawiony dla tabeli formularza, lub kwerendy i
wyświetla wszystkie rekordy
PokaŜPasekNarzędzi
(ShowToolbar)
Wyświetla
lub
ukrywa
wbudowane
paski
narzędzi
lub
niestandardowe paski narzędzi utworzone przez uŜytkownika.
ZatrzymajWszystkie
Makra
(StopAllMacros)
Zatrzymuje działanie wszystkich aktualnie działających makr.
ZatrzymajMakro
(StopMacro)
Zatrzymuje działające makro.
TransportBazyDanych
(TransferDatabase)
Importuje, eksportuje lub dołącza obiekty z i do innych baz danych.
TransportArkusza
(TransferSpreadsheet)
Importuje lub eksportuje dane z lub do arkusza kalkulacyjnego
Excela, lub Lotusa.
TransportTekstu
(TransferText)
Importuje lub eksportuje dane do plików tekstowych.
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 97 – zaawansowane techniki
programowania baz danych
Akcja
Opis
Zapisz
(Save)
Akcji Zapisz moŜna uŜyć do zapisania określonego obiektu
programu Microsoft Access lub obiektu aktywnego, jeśli Ŝaden
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
(SetMenuItem
Akcji UstawElementMenu moŜna uŜyć do ustawienia stanu
elementów menu (włączone lub wyłączone, zaznaczone lub nie
zaznaczone) na niestandardowym pasku menu lub globalnym
pasku menu aktywnego okna.
Obiekty Microsoft Access - ich wła
ś
ciwo
ś
ci i metody
Baza danych składa się z dwóch 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). 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
ź
ródła rekordów formularza.
Otwarte obiekty typu formularz tworzą razem Kolekcję Formularzy (Forms), 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ł, oraz obiekty: Screen, DoCmd i inne dostępne w pomocy
pod hasłem „Microsoft Access Objects”
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 97 – zaawansowane techniki
programowania baz danych
•
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)
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ść
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
18
MS Access 97 – 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 źró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
19
MS Access 97 – 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 źró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 źró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
RecordSource
Określa tabelę, zapytanie lub instrukcję SQL, będącą źródłem
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
20
MS Access 97 – zaawansowane techniki
programowania baz danych
Obiekt Raport - metody
Circle
Rysuje w obiekcie typu Raport, okrąg, elipsę lub łuk.
Line
Rysuje linię.
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
21
MS Access 97 – 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ę 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.
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 97 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
22
MS Access 97 – 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
Memo
String
Liczba (bajt)
Byte
Liczba (całkowita)
Integer
Liczba (całkowita długa)
Long
Liczba (pojedyncza precyzja
Single
Liczba (podwójna precyzja)
Double
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
23
MS Access 97 – 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_typ_danych
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
24
MS Access 97 – 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
25
MS Access 97 – 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
26
MS Access 97 – 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
zatrzymanie programu
End, Stop
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
znaków
Chr
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
na inny
Cbool, Cbyte, CCur, Cdate, CDbl, CDec, CInt, CLng,
CSng, CStr, CVar,
Zamiana liczb dziesiętnych na inny
format
Hex, Oct
Zamiana daty na liczbę
Day, Month, Weekday, Year
Zamiana czasu na liczbę
Hour, Minute, Now, Second
Zamiana serii liczb na datę lub
godzinę
DateSerial, TimeSerial
Zamiana ciągu znaków na datę lub
godzinę
DataValue, TimeValue
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 97 – 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
procedury
On Error, Resume
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
28
MS Access 97 – zaawansowane techniki
programowania baz danych
Sterowanie formatem danych
wyjściowych
Spc, Tab, Width #
Czytanie z pliku
Get, Input, Input #, Line Input #
Pobranie informacji o pliku
EOF, FileAttr, FreeFile, Loc, LOF, Seek
Ustawienie lub określenie pozycji
w pliku dla operacji typu
odczyt/zapis
Seek
Zarządzanie napędami
dyskowymi i katalogami
ChDir, ChDrive, CurDir, MkDir, RmDir
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
zmiennej typu Variant
VarType
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
29
MS Access 97 – 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
Dźwię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
znaków
Option Compare
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 97 – 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 ĆWICZEŃ
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 Muzyka97_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
31
MS Access 97 – 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.
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.
tytuł - ciąg znaków lub zmienna znakowa, która będzie tytułem okna.
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 97 – zaawansowane techniki
programowania baz danych
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 źró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
odp = MsgBox("czy zamknąć panel sterowania", 4 + 32 + 256, "Pytanie")
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 97 – zaawansowane techniki
programowania baz danych
UWAGA :PowyŜszą linijkę moŜna teŜ zapisać wykorzystując liczby prezentowane w
powyŜszych tabelach
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ę.
4. Proszę przeanalizować, wpisać i uruchomić poniŜszą procedurę:
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 97 – zaawansowane techniki
programowania baz danych
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
35
MS Access 97 – zaawansowane techniki
programowania baz danych
W dalszej części ćwiczeń zaprogramujemy synchronizację dwóch formularzy. W pliku
muzyka97_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. Źró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óźniejszych ć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
36
MS Access 97 – zaawansowane techniki
programowania baz danych
Formularz TYTUŁY NAGRAŃ 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ść źró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 Źró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
37
MS Access 97 – 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ć źródło rekordów pola listy Tytuly_nagran w oparciu o tabelę Nagrania i
ustawić kryterium w kolumnie „nr_plyty”. Proszę uzupełnić źró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. Sprawdź 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
38
MS Access 97 – 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
39
MS Access 97 – 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
40
MS Access 97 – 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 muzyka97_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
41
MS Access 97 – 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
42
MS Access 97 – 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
ź
ró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 źró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
43
MS Access 97 – 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
44
MS Access 97 – 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 w wersji Accessa 97 model obiektów słuŜący do operacji na obiektach
przechowywanych przez aparat bazodanowy. Model ten to DAO (Data Access 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, formularzy,
raportów, 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.
DAO (Data Access Objects)
Obiekt DBEngine słuŜy do pobierania danych, oraz sprawdzania lub tworzenia nowych
obiektów danych. Jest modelem obiektów dostępu do danych stworzonym specjalnie do
współpracy z Accessem i aparatem JET DBEngine
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.
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.
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 97 – zaawansowane techniki
programowania baz danych
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
domyślna)
Obiekty TableDef zawierają definicje tabel i tabel dołączonych.
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).
Na początku szczegółowo omówimy obiekt typu recordset.
W programie Access97 dostępnych jest pięć typów obiektów recordset dla programowania w
DAO (w tym jeden tylko przy uŜyciu ODBC)
1. Tabelowy zestaw rekordów DAO (table). MoŜe odnosić się tylko do lokalnej tabeli.
Ź
ró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). Źró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 rekordsetu.
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.
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 97 – zaawansowane techniki
programowania baz danych
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.
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 jaki sposób otworzy
ć
zestaw rekordów ?
Zestawy rekordów tworzy metoda OpenRecordset (DAO). 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(źródło,typ[,opcje])
źródło - ciąg znaków określający źró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.
•
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.
•
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()
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 97 – zaawansowane techniki
programowania baz danych
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
48
MS Access 97 – 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,
FindLast,
FindNext,
FindPrevious
Zestaw.FindFirst
kryteria
Znajduje odpowiednie rekordy.
Kryteria – wyraŜenie typu ciąg znaków (klauzula
WHERE bez słowa kluczowego WHERE, na przykład:
kryteria = "Title = 'Sales Representative'"
Właściwość Zestaw.NoMatch = True określa, Ŝe
operacja wyszukiwania się nie powiodła..
Move
Zestaw.Move
ile_wierszy[, start]
Przesuwa rekord o podaną ilość wierszy.
Ile_wierszy (dodatnia liczba do przodu, ujemna do
tyłu)
start – ciąg znaków identyfikujący zakładkę.
MoveFirst
MoveLast
MoveNext
MovePrevious
Zestaw.MoveFirst
kryteria
Poruszanie się w zestawie rekordów.
OpenRecordSet Zestaw.OpenReco
rdset
([typ],[opcje])
Tworzenie recordsetu na podstawie juŜ istniejącego
Set
nowyzestaw
=
zestaw.
OpenRecordSet
([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
49
MS Access 97 – zaawansowane techniki
programowania baz danych
Seek
Zestaw.Seek
″
porównanie
″
,
klucz1, klucz2 ...
1. MoŜna stosować tylko w indeksowanych zestawach
typu tabela.
2. porównanie - jeden z operatorów >,>=,<,<=,=
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. Wskaźniki 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
50
MS Access 97 – 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,
LastUpdated
Data utworzenia tabeli i data ostatniej zmiany projektu tabeli.
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
51
MS Access 97 – 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
52
MS Access 97 – 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 znaleźć 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 – sprawdź 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
53
MS Access 97 – 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]
Autonumer
[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
54
MS Access 97 – 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
55
MS Access 97 – 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 znaleźć 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
56
MS Access 97 – zaawansowane techniki
programowania baz danych
Do dalszych ćwiczeń naleŜy wczytać bazę, która znajduje się w pliku muzyka97_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 Wypozycz 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
57
MS Access 97 – 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
58
MS Access 97 – 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 – sprawdź 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
59
MS Access 97 – 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,
-
znaleźć 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 znaleźć 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
60
MS Access 97 – 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
61
MS Access 97 – 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
62
MS Access 97 – 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
63
MS Access 97 – zaawansowane techniki
programowania baz danych
Zagadnienia dodatkowe
Sposób dopisywania rekordów do tabeli b
ę
d
ą
cej
ź
ró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 odpowiedź 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
64
MS Access 97 – 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
65
MS Access 97 – 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
66
MS Access 97 – 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
67
MS Access 97 – 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.
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 97 – zaawansowane techniki
programowania baz danych
Argument
Description
fieldlist
nazwy pól wraz z aliasami i predykatami selekcji (ALL, DISTINCT,
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.
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 97 – zaawansowane techniki
programowania baz danych
Składnia
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 = table2.field2
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
Name] AS Name
FROM Departments LEFT JOIN Employees
ON Departments.[Department ID] =
Employees.[Department ID]
ORDER BY [Department Name];
Wyświetla wszystkie wydziały,
nawet jeśli nie ma w nich
pracowników
SELECT [Last Name] & ", " & [First Name] AS Name,
[Department Name]
FROM Departments RIGHT JOIN Employees
ON Departments.[Department ID] = Employees.[Department ID]
ORDER BY [Last Name] & ", " & [First Name];
Wyświetla wszystkich
pracowników nawet
jeśli nie są przypisani
do wydziałów
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 97 – zaawansowane techniki
programowania baz danych
Filtrowanie przez formularz
Ć
WICZENIE 40
1. Proszę wczytać bazę danych, która znajduje się w pliku muzyka97_6.mdb
2. NaleŜy wykonać filtrowanie przez formularz dla tabeli KLIENCI.
W bazie danych muzyka97_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 źró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
71
MS Access 97 – 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 "Źró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
72
MS Access 97 – zaawansowane techniki
programowania baz danych
Podł
ą
czanie danych z zewn
ę
trznych
ź
ródeł
Proces podłączania tabel ze źró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
73
MS Access 97 – 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 znaleźć 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 <lampa>"
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 odnaleźć 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
74
MS Access 97 – 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.