MS Access 97 PL Zaawansowane techniki programowania

background image

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

background image

background image

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

background image

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

background image

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).

background image

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.

background image

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

background image

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

background image

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.

background image

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ń.

background image

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.

background image

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.

background image

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

background image

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.

background image

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.

background image

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.

background image

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.

background image

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ę.

background image

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.

background image

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”

background image

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.

background image

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)

background image

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 .

background image

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ę.

Print

Drukuje w obiekcie typu Raport podany tekst bieżącą czcionką.

PSet

Ustawia kolor wybranego punktu w raporcie

Scale

Definiuje skalę użytkownika dla obiektu typu Raport (standardowa
skala to 1/1440 cala)

TextHeight

Zwraca wysokość podanego w metodzie tekstu, przy użyciu
bieżącej czcionki

TextWidth

Zwraca szerokość tekstu, przy użyciu bieżącej czcionki.

Właściwości obiektu Raport pominiemy

Obiekt typu formant - metody

ItemData

Zwraca dane z kolumny związanej dla podanego wiersza. Metoda
dotyczy tylko pól list i pól kombi

Requery

Aktualizuje dane przez ponowne wykonanie kwerendy, lub kodu
SQL

SetFocus

Przenosi fokus do podanego elementu sterującego.

background image

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.

background image

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).

background image

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.

background image

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.

background image

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.

background image

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

background image

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 #

background image

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

background image

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

ż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

background image

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

background image

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.

background image

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")

background image

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ę:

background image

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

background image

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.

background image

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

background image

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ę:

background image

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

background image

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

background image

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.

background image

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.

background image

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

background image

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

background image

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.

background image

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.

background image

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()

background image

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.

background image

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

background image

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.

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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.

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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.

background image

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.

background image

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

background image

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.

background image

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.

background image

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

background image

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

background image

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.


Wyszukiwarka

Podobne podstrony:
MS Ofiice 2002 PL XP Ćwiczenia zaawansowane
P.Dyp- MS Access PL, kolosy pollub i pwsz chełm
MS Ofiice 2002 PL XP Ćwiczenia zaawansowane
program ms access podstawowy
Lab10 integracja z ms access
adobe premiere 6 biblia zaawansowane techniki montażu (helion) fake OCYCGOTBVADD5AIZJNVFVB7K5LDHKD3V
Algorytmy, struktury danych i techniki programowania wydanie 3
MS Access
Debugowanie NET Zaawansowane techniki diagnostyczne debnet
zajecia techniczne program GM
Access 2010 PL cwiczenia praktyczne cwac10
Hubert Bielacki Sprawozdanie.2, ElektronikaITelekomunikacjaWAT, Semestr 1, Metodyka i technika progr

więcej podobnych podstron