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.