Access zaawansowane projektowanie baz (2)

background image

1

SPIS TREŚCI

WPROWADZENIE ...............................................................................................................................................2

OMÓWIENIE BAZY DANYCH..........................................................................................................................3

ZDARZENIA - ICH ROLA W TWORZENIU APLIKACJI ............................................................................6

U

STAWIANIE SPOSOBU URUCHAMIANIA BAZY DANYCH

.....................................................................................13

L

ISTA WYBRANYCH AKCJI

..................................................................................................................................13

OBIEKTY MICROSOFT ACCESS - ICH WŁAŚCIWOŚCI I METODY....................................................18

W

YBRANE METODY I WŁAŚCIWOŚCI NIEKTÓRYCH OBIEKTÓW

. ..........................................................................20

WSTĘP DO JĘZYKA ACCESS BASIC............................................................................................................22

PODSTAWOWE INSTRUKCJE I FUNKCJE JĘZYKA ACCESS BASIC..................................................24

I

NSTRUKCJE

.......................................................................................................................................................24

F

UNKCJE

............................................................................................................................................................26

P

ROGRAMOWANIE ZA POMOCĄ OBIEKTÓW DOSTĘPU DO DANYCH

......................................................................42

P

RZETWARZANIE TRANSAKCYJNE

......................................................................................................................59

ZAGADNIENIA DODATKOWE.......................................................................................................................61

W

YKORZYSTANIE JĘZYKA

SQL-

PRZYKŁAD

......................................................................................................63

F

ILTROWANIE PRZEZ FORMULARZ

......................................................................................................................67

P

ODŁĄCZANIE DANYCH Z ZEWNĘTRZNYCH ŹRÓDEŁ

...........................................................................................70

O

BSŁUGA BŁĘDÓW WYKONANIA

........................................................................................................................72

background image

2

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

Microsoft Access. Przestawione 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ści, metody i sposoby
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

3

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

• PŁYTY

• 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 zapytania.

• trzy z nich (KATALOG, WYDRUKI, KLIENCI) wybierają z tabeli MENU polecenia z

odpowiedniej grupy,

• czwarte - LISTA PŁYT - wyświetla listę płyt zarejestrowanych w bazie.

background image

4

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 STEROWANIA - 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 jaka 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 odpowiedniego
zapytania) 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.

PŁYTY - Formularz zespolony przeznaczony do wyświetlania i edycji informacji o

płytach. (W formularzu PŁYTY umieszczony jest podformularz Płyty podformularz w
którym wyświetlane są tytuły nagrań).



Etykieta

1

Grupa opcji

Przycisk
polecenia

3

Pole listy

Etykieta

Przycisk
polecenia

2

background image

5



Rys. 3 Okno dialogowe formularza PŁYTY

Elementy sterujące na formularzu PŁYTY
1) Związane pole tekstowe zawierają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 PŁYTY. 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 PŁYTY. Źródłem

wiersza dla tego pola jest tabela KATEGORIE.

4) Pole tekstowe związane z polem Tytuł tabeli PŁYTY.
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
14) Podformularz Płyty podformularz wyświetlający informacje o nagraniach

znajdujących się na płycie (z tabeli NAGRANIA).

PŁYTY PODFORMULARZ - formularz będący częścią składową formularza

zespolonego PŁYTY

NOWY WYKONAWCA - formularz do edycji i wprowadzania danych o wykonawcach.

Ć

WICZENIE 1

4

6

7

5

14

8

10

13

9

12

11

background image

6

1.

Otwórz bazę danych, która znajduje się w pliku m97_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 Access Basic. O ile przy programowaniu obsługi zdarzeń przy pomocy makr
nazwy zdarzeń są polskie, o tyle w języku Access Basic występują nazwy angielskie.

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łdaowaniu (Load) Zdarzenie Load występuje, gdy formularz zostaje otwarty i

wyświetlane są jego rekordy

Przy zmianie rozmiaru

Podczas zmiany rozmiaru lecz także podczas pierwszego

background image

7

(Resize)

wyświetlania.

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

Kiedy formularz lub raport staje się aktywny

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 wyjściu (Exit)

Zanim element sterujący straci fokus

Przy utracie fokusu (LostFocus)

Kiedy element sterujący straci fokus

Przy dezaktywacji (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ń.


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
zachowaniem rekordu w bazie

Po wstawieniu (AfterInstert)

Zachodzi po zachowaniu nowego rekordu

Przed aktualizacją (BeforeUpdate)

Zachodzi przed aktualizacją danych w
rekordzie

Po aktualizacji (AfterUdate)

Zachodzi gdy dane zostają zachowane

Przy usunięciu (Delete)

Zachodzi po naciśnięciu klawisza Delete, lub
uruchomieniu polecenia, lecz przed
usunięciem rekordu

background image

8

Przed potwierdzeniem usunięcia
(BeforeDelConfirm)

Po usunięciu jednego lub kilku rekordów lecz
przed wyświetleniem prze Accessa
komunikatu

Po potwierdzeniu usunięcia
(AfterDelConfirm)

Zachodzi gdy użytkownik potwierdził
usunięcie i rekordy są usuwane lub operacja
anulowana.

Przy zmianie (Change)

Po zmianie zawartości pola tekstowego lub
pola edycji z listą wyboru (po wpisaniu przez
użytkownika pierwszego znaku)

Przy bieżącym (Current)

Zachodzi gdy rekord uzyskuje fokus lub
stając 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 edycji z listą wyboru wartość, której nie
ma na liście

Po aktualizacji (Updated)

Po aktualizacji danych obiektu OLE


background image

9

Zdarzenia myszy - w czasie wykonywania operacji myszą

Zdarzenie

Opis

Przy kliknięciu (Click)

Po kliknięciu lewym przyciskiem myszy

Przy kliknięciu dwukrotnym (DblClick)

Po dwukrotnym kliknięciu lewym
przyciskiem myszy

Przy naciśnięciu myszy (MouseDown)

Po naciśnięciu lewego przyciksu myszy

Przy zwolnieniu myszy (MouseUp)

Po zwolnieniu naciśniętego przycisku 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

Zdarzenie

Opis

Przy naciśniętym klawiszu (KeyDown)

Po naciśnięciu klawisza, gdy element
sterujący lub formularz ma fokus

Przy naciśnięciu klawisza (KeyPressed)

Po naciśnięciu i zwolnieniu klawisza

Przy zwolnieniu klawisza (KeyUp)

Po zwolnieniu dowolnego klawisza


Zdarzenia drukowania
-występują gdy raport jest drukowany lub formatowany

Zdarzenie

Opis

Formatowanie (Format)

Po określeniu jakie dane będą w sekcji lecz
przed sformatowaniem sekcji

Drukowanie (Print)

Kiedy dane w sekcji są już sformatowane lecz
nie zostały jeszcze wydrukowane

Powrót (Retreat)

Kiedy podczas formatowania Access wraca
do poprzednich sekcji

Brak 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 wydruku pustego
raportu.

Strona (Page )

Po sformatowaniu strony do drukowania, lecz
przed wydrukowaniem strony.


Zdarzenie dodatkowe
- „Timer”- kiedy upływa przedział czasu określony we właściwości
„TimerInterval”
Przy programowaniu zdarzeń trzeba zwracać uwagę na dwa istotne czynniki:

background image

10

• Trzeba pamiętać, że niektóre zdarzenia automatycznie pociągają za sobą wystąpienie

innych. Na przykład przed zdarzeniem „Dwukrotne kliknięcie (DblClick)” wystąpią
kolejno zdarzenia „Naciśnięcie myszy (MouseDown)”, „Zwolnienie myszy (MouseUp)”,
„Kliknięcie (Click)”.

• Ważna jest kolejność w jakiej zdarzenia występują po sobie. Szczegółowy opis

następowania zdarzeń znajduje się w pomocy programu Access. W tym miejscu
przytoczymy tylko kilka najczęściej spotykanych sytuacji:

Otwieranie formularza
Otwarcie (Open) >Załadowanie(Load) >Zmiania rozmiaru (Resize)
>Aktywacja(Active) > Bie
żący (Current)

Zamykanie formularza
Zwolnienie (Unload) > Dezaktywacja (Deactivate) > Zamknięcie (Close)

Wejście i wyjście do elementu sterującego
Wejście (Enter) > Uzyskanie fokusu (GotFocus) > Zakończenie (Exit) > Utrata fokusu
(LostFocus)

Zmiana tekstu w polu edycji lub w polu tekstowym
Naciśnięcie klawisza (KeyDown) >Naciśnięty klawisz (KeyPress) > Zmiana (Change)
> Zwolnienie klawisza (KeyUp)

Usunięcie rekordu
Przy usunięciu >Przy bieżącym > Przed potwierdzeniem usunięcia > Po
potwierdzeniu usuni
ęcia

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 instrukcji.
Można anulować następujące zdarzenia (akcją AnulujZdarzenie - CancelEvent):

Przed potwierdzenie usunięcia (BeforeDelConfirm)

Przed Wstawieniem (BeforeInsert)

Przed Aktualizacją (BeforeUpdate)

Przy kliknięciu dwukrotnym (DblClick)

Przy usunięciu (Delete)

Przy wyjściu (Exit)

Format (Format)

Przy Naciśnięciu klawisza (tylko w makro) (KeyDown)

Przy naciśnięciu myszy (tylko w makro) (MouseDown)

Przy otwarciu (Load)

Przy drukowaniu (Print)

Przy zwolnieniu (Unload)

Schemat programowania obsługi zdarzeń wygląda następująco:

background image

11

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
i 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 STEROWANIA. Działanie PANELU
STEROWANIA b
ędziemy programować już w języku Visual Basic. W tej części ćwiczeń
zaprogramujemy jeszcze za pomoc
ą makr reakcję przycisków na formularzu PŁYTY .

W ćwiczeniach tych wystąpią akcje: OtwórzFormularz, Zamknij, OknoKomunikatu,
Id
źDoRekordu, UruchomPolecenie, IdźDoFormantu.

Ć

WICZENIE 3

Proszę w oknie makro utworzyć makro o nazwie Zamknij logo. Zadaniem tego makra będzie
wykonanie dwóch akcji:

zamknięcie formularza LOGO (Akcja Zamknij)

otwarcie formularza PANEL STEROWANIA (Akcja OtwórzFormularz)

Ć

WICZENIE 4

1.

Proszę podłączyć makro Zamknij 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.

Ć

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)

Ć

WICZENIE 6

background image

12

1.

Proszę utworzyć i podłączyć do odpowiednich zdarzeń makro grupowe o nazwie Przyciski

płyt

.

2.

Makro ma obsługiwać siedem przycisków znajdujących się na formularzu PŁYTY,

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 IdźDoPiwerwszegoRekordu)

poprzedni

(akcja UruchomPolecenie,

polecenie IdźDoPoprzedniegoRekordu)

następny

(akcja UruchomPolecenie,

polecenie IdźDoNastępnegoRekordu)

ostatni

(akcja UruchomPolecenie,

polecenie IdźDoOstatniegoRekordu)

usuń płytę

(akcja UruchomPolecenie,

polecenie UsuńRekord)

zamknij formularz

(akcja Zamknij)

nowa płyta

(akcja IdźDoRekordu)

3. Proszę zaobserwować działanie przycisków „Poprzedni”, ”Następny”, „Nowa płyta”.
Z czym jest kłopot?

background image

13

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 i ukrywane było okno bazy danych.

Lista wybranych akcji

W poniższej tabeli znajduje się skrótowe omówienie wszystkich akcji, które można
uruchomić za pomocą makr.
UWAGA: Wszystkie akcje można również uruchomić z poziomu kodu języka Access Basic z
tą tylko różnicą, że w języku tym nazwy akcji oraz ich argumenty są angielskie. Z tego też
powodu obok nazw polskich w tabeli pozostawione zostały nazwy angielskie.

Akcja

Opis

DodajMenu
(AddMenu)

Dodaje menu do własnego paska menu.
Argumenty akcji: Nazwa menu, Nazwa makra menu, Tekst paska stanu

ZastosujFiltr
(ApplyFilter)

Stosuje filtr, zapytanie lub klauzulę WHERE języka SQL do tabeli,
formularza lub raportu. W przypadku raportów akcję tę można
zastosować tylko dla we właściwości zdarzenia „PrzyOtwarciu”
Nazwa filtru - Nazwa filtru lub zapytanie który ograniczające ilość
rekordów, lub zmieniające sposób sortowania. Można wprowadzić
nazwę istniejącego zapytania lub filtru który został zachowany jako
zapytanie.
Warunek WHERE - Poprawna klauzula WHERE języka SQL (bez
słowa kluczowego WHERE) lub wyrażenie.
Uwaga. W warunku WHERE lewa strona wyrażenia zawiera zwykle
nazwę z tabeli podstawowej lub zapytania 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]
Jeśli podane są dwa argumenty Microsoft Access zastosuje klauzulę
WHERE do filtrowania.

background image

14

Akcja

Opis

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 kilka stron
wcześniej.

Zamknij
(Close)

zamyka okno otwartego obiektu określonego podanymi argumentami.
Jeśli nie zostaną podane żadne argumenty, Access zamyka aktywne
okno.
Opis argumentów
TypObiektu - typ obiektu, którego okno chcemy zamknąć.
NazwaObiektu - Nazwa obiektu, którego okno chcemy zamknąć.
Nazwę można wybrać z listy rozwijanej. Na liście będą wszystkie
znajdujące się w bazie danych obiekty typu wybranego w pierwszym
argumentem.

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

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”.
Argumenty akcji
Pasek menu - wybór z listy wszystkich widoków MS Access.
Nazwa menu
Polecenie
Polecenie podrzędne - jeśli jest .
Uwaga. Instrukcja opisana w sposób bardziej szczegółowy na końcu
po tabeli

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.

ZnajdźRekord
(FindRecord)

Wyszukuje rekord spełniający warunki określone argumentami.
Argumenty są takie same jak argumenty w polu dialogu po
wyświetlanego z menu poleceniem Znajdź

IdźDoFormantu
(GoToControl)

Akcja przenosząca fokus do elementu sterującego na tym samym
formularzu. Jako argument należy podać nazwę elementu (bez pełnej
składni). Można przenieść fokus tylko do tych elementów które mogą
go mieć.

IdźDoStrony

Akcja przenosi fokus do pierwszego elementu sterującego na podanej

background image

15

(GoToPage)

stronie aktywnego formularza.

IdźDoRekordu
(GoToRecord)

Akcja ustawia podany rekord jako rekord bieżący arkusza danych lub
formularza
Argumenty: Typ obiektu, nazwa obiektu, rekord, skok.
Jeśli jako argument rekord wybrana została wartość Poprzedni lub
następny to argument Skok precyzuje o ile rekordów zostanie
ustawiony nowy bieżący rekord od aktualnego. Jeśli argument Rekord
równy 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

PełnyEkran
(

Maximize)

Powiększa aktywne okno na cały ekran

DoIkony
(Minimize)

Zwija aktywne okno do ikony

RuchRozmiar
(MoveSize)

Przesuwa lub zmienia rozmiary aktywnego okna.
Argumenty: Prawy - odległość w poziomie lewego górnego rogu
okna od lewej krawędzi okna zewnętrznego, Dolny - odległość
lewego górnego rogu od górnej krawędzi okna, Szerokość, wysokość

OknoKomunikatu
(MsgBox)

Wyświetla okno z komunikatem Użytkownik może wybrać typ
komunikatu, tekst komunikatu, tytuł okna i zdecydować czy będzie
sygnał dźwiękowy

OtwórzFormularz
(OpenForm)

Otwiera podany formularz w jednym z trybów i rodzajów okna. Za
pomocą argumentów można ustawić filtr dla formularza lub klauzulę
WHERE. Klauzulę wpisujemy bez użycia słowa kluczowego
WHERE.
Tryby otwarcia formularza to: Dodawanie, Edycja, Tylko do odczytu

OtwórzModuł
(OpenModule)

Otwiera wybrany moduł w widoku projekt podanej procedury

OtwórzZapytanie
(OpenQuery)

Uruchamia podane zapytanie w jednym z trzech widoków (projekt,
arkusz danych, podgląd wydruku).

OtwórzRaport
(OpenReport)

Otwiera wybrany raport w widoku Projekt lub PodglądWydruku lub
wysyła do wydruku (widok Wydruk). Dla raportu można określić filtr
lub klauzulę WHERE.

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, plik w formacie arkusza Excela lub plik
RTF

Drukuj

Drukuje aktywny obiekt bazy danych. Można wybrać zakres wydruku,
numery stron, jakość i sortowane kopii.

background image

16

(Print)

Koniec
(Quit)

Kończy pracę programu MS Access. Możliwe są trzy ustawienia
argumentu „Opcje”: Zachowaj wszystko, Potwierdzaj i Koniec. Ta
ostatnia opcja powoduje zakończenie pracy bez zachowywania zmian.

ZmieńNazwę
(Rename)

Zmienia nazwę wybranego obiektu

OdświeżObiekt
(RepaintObject)

Kończy rozpoczęte aktualizacje ekranu i przeliczenia elementów
sterujących na aktywnym formularzu

PonówZapytanie
(Requery)

Aktualizuje dane źródłowe elementu lub jeśli aktywny jest formularz
to formularza przez ponowne wykonanie zapytania. Używane do
aktualizacji zawartości pola list, pól edycji z listą wyboru 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 Access Basic

UruchomMakro
(RunMacro)

Podajemy nazwę makra. Można jako argumenty podać także 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ą zapytaniem funkcjonalnym (czyli
modyfikującym dane)

WybierzObiekt
(SelectObject)

Wybiera obiekt. Jeśli obiekt nie jest otwarty trzeba trzeci argument (Z
okna bazy danych) ustawić na TAK.
Jeśli nie wybierzemy obiektu i argument „W oknie bazy danych”
ustawimy na TAK to zostanie wyświetlone okno bazy danych.
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

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 Access Basic

UstawOstrzeżenie

Włącza lub wyłącza wyświetlanie komunikatów systemowych.
Powoduje zablokowanie wyświetlania komunikatów modalnych w

background image

17

(SetWarnings)

czasie wykonywania makra. Nie blokuje jednak wyświetlania
komunikatu o błędach wykonania oraz pól dialogu (jeśli wymaga tego
makro).

PokażWszystkieRekordy
(ShowAllRecords)

Usuwa filtr ustawiony dla tabeli, formularza i wyświetla wszystkie
rekordy

PokażMenu
(ShowToolbar)

Wyświetla lub ukrywa wbudowany pasek menu lub dostosowany
pasek menu użytkownika.

ZatrzymajWszystkieMakra
(StopAllMacros)

Zatrzymuje działanie wszystkich wykonywanych bieżąco makr.

ZatrzymajMakro
(StopMacro)

Zatrzymuje działające makro

TransportBazyDanych
(TransferDatabase)

Importuje, eksportuje lub załącza obiekty z i do innych baz danych

TransportArkusza
(TransferSpreadsheet)

Importuje lub eksportuje dane z lub do arkusza kalkulacyjnego

TransportTekstu
(TransferText)

Importuje lub eksportuje dane do plików tekstowych.

background image

18

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 (Data Access Object).
W tej części szkolenia będziemy się zajmować obiektami Microsoft Access. Do obiektów tej
grupy należą: obiekt Application (aplikacja), obiekty typu formularz, raport, formant,
obiekt Screen, obiekt Moduł i obiekt DoCmd.
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 generatorze 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ówZapytanie). Metoda ta powoduje ponowne wykonanie zapytania
ź

ródła rekordów formularza.

Otwarte obiekty typu formularz tworzą razem kolekcję formularzy, która sama w sobie jest
obiektem, podobnie otwarte obiekty typu raport tworzą kolekcję raportów, która także jest
obiektem. Ponieważ kolekcja formularzy i kolekcja raportów same w sobie również są
obiektami mają więc swoje właściwości.
Obiekty z kolekcji formularzy lub z kolekcji raportów numerowane są od 0 zgodnie z
kolejnością otwarcia.
Hierarchia obiektów wygląda następująco:

• Na szczycie hierarchii znajduje się obiekt Application (Aplikacja). Obiekt Aplikacja

określa całą aplikację Microsoft Access. Obiektu tego używamy jeśli chcemy zastosować
metodę do całej aplikacji lub ustawić właściwości całej aplikacji. Na przykład za pomocą
właściwości MenuBar można ustawić dostosowany pasek menu dla całej aplikacji.
Używając do całej aplikacji metody SetOption można ustawić parametry aplikacji z okna
dialogowego Opcje

• Obiekt Application zawiera w sobie kolekcję Forms obiektów typu formularz, kolekcję

Reports obiektów typu Raport, Kolekcję Modules (Moduły) obiekt Screen i obiekt
DoCmd.

• W skład obiektów typu Report i Form wchodzą kolekcje Controls obiektów typu Formant.
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 na formularzach odwołujemy się w następujący sposób:

background image

19

Forms![nazwa formularza]![nazwa elementu sterującego]

Do właściwości obiektów odwołujemy się w następujący sposób:

Forms![nazwa formularza].właściwość

Forms![nazwa formularza]![nazwa elementu sterującego].właściwość

Podobnie dla raportów.
Metody obiektów wywołujemy w następujący sposób (przykład)

Forms![nazwa formularza].metoda argument1, argument2 itd...

Forms![nazwa formularza]![nazwa elementu sterującego].metoda argument1,
argument2

Podobnie dla raportów
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

Forms![Nawa formularza]![nazwa elementu sterującego].właściwość =
nowa_warto
ść

na przykład:

Forms![mój formularz]![przycisk rejestruj].Visible = False

Szczegółowy opis wszystkich metod i właściwości poszczególnych obiektów znajduje się w
pomocy w tematach Objects i Properties.

background image

20

Wybrane metody i właściwości niektórych obiektów.

Obiekt Aplikacja – wybrane metody

Echo

Składnia - Apliacja.Echo echoon, [tekst_paska_stanu]
Włącza (echoon = True) lub wyłącza (echoon = False)
odświeżanie ekranu.

GetOption, SetOption

Składnia
Aplikacja.GetOption(nazwa_opcji)
Aplikiacja.SetOption nazwa_opcji, ustawienie
Uwaga. 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:
Ogólne, Klawiatura, drukowanie, Projektowanie formularz i
raportów, Arkusz danych, Projekt makra, Projekt modułu,
Projekt zapytania, Wielodostęp/ODBC

Quit

Aplikacja.Quit [argument]
Akcja kończy pracę z programem Access. Jako argument
mogą wystąpić następujące stałe predefiniowane:
acPrompt - Access pyta o zachowanie wszystkich nie
zachowanych obiektów
acSave - zachowuje wszystkie nie zachowane obiekty bez
zadawania pytań
acExit - kończy pracę bez zachowywania obiektów.

Obiekt Aplikacja - właściwości

CurrentObjectName

Nazwa aktywnego obiektu

CurrentObjectType

Typ aktywnego obiektu

MenuBar

Nazwa makra paska poleceń

Obiekt Formularz - metody

GoToPage

Przenosi fokus do pierwszego elementu
sterującego na podanej stronie formularza.

Recalc

Natychmiast aktualizuje wszystkie obliczane
elementu 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.

background image

21

Reprint

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, X As Integer
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 typu ciąg
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:

background image

22

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 .

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 system współrzędnych dla obiektu typu Raport.

TextHeight Zwraca wysokość podanego w metodzie tekstu

TextWidth Zwraca szerokość tekstu

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 edycji z listą wyboru

Requery

Aktualizuje dane przez ponowne wykonanie zapytania

SetFocus Przenosi fokus do podanego elementu sterującego.

Wstęp do języka Access Basic


W programie Microsoft Access 97 język Access Basic, używany w wersjach 1.x i 2.0
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.

background image

23

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 raportrem,
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.
Jakie są zalety programowania obsługi zdarzeń w języku Access Basic w stosunku do
programowania za pomocą makr:

• Język Visual Basic jest o wiele bardziej elastyczny od makr a kod bardziej czytelny.

• Ponieważ procedury obsługi zdarzeń przechowywane są z formularzami, usuwając

formularz - usuwamy wszystkie niepotrzebne procedury, w przypadku makr musimy usuwać
kolejno wszystkie makra.
W zasadzie można powiedzieć, że tworzenie poważniejszych aplikacji bez programowania w
języku Visual Basic nie bardzo ma sens.
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 tablic.
Poniżej w tabeli przedstawiamy odpowiedniki typów między Accessem a językiem Visual
Basic:
Odpowiedniki typów danych Access <=> Access Basic

typ pól programu Access

typ Visual Basic

Autonumeracja

Long

Waluta

Currency

Data/godzina

Double

Memo

String

Liczba (bajt)

Integer

Liczba (całkowita)

Integer

Liczba (całkowita długa)

Long

background image

24

Liczba (pojedyncza
precyzja

Single

Liczba (podwójna
precyzja)

Double

Obiekt OLE

String

Tekst

String

Tak/Nie

boolean

Oprócz typów podanych w tablicy, w języku Visual Basic występuje typ zmiennej 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.
Wartość Null mogą mieć tylko zmienne typu Variant.
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 typ

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 By Val.

Podstawowe instrukcje i funkcje języka Access
Basic

Instrukcje

Do użyteczniejszych instrukcji strukturalnych należą:

background image

25

Select Case:

Składnia

Select Case wyrażenie

Case wartość1

instrukcje

Case wartość2

instrukcje

Case wartość3

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.

Pętla

For

Składnia

For licznik = wart_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

background image

26

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.

Funkcje

Oprócz instrukcji w kodzie języka Access Basic mogą wystąpić wywołania funkcji. Mogą to
być funkcja 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

Podejmowanie decyzji Choose, If...Then...Else, If, Select Case

Konwersja

Opis

Funkcja lub instrukcja

Zamiana wartości ANSI na ciąg Chr

background image

27

znaków

Ciąg znaków na wartość ANSI

Asc

Liczba na ciąg znaków

Format, Str

Ciąg znaków na liczbę

Val

Zmiana jednego typu liczbowego
na inny

CCur, CDbl, CInt, CLng, CSng, CStr, CVar, CVDate

Zamiana liczb dziesiętnych na inny
format

Hex, Oct

Zamiana daty na liczbę

DateSerial, DateValue

Zamiana liczby na datę

Day, Month, Weekday, Year

Zamiana czasu na liczbę

TimeSerial, TimeValue

Zamiana liczby na format czasu

Hour, Minute, Now, Second

background image

28

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 Access Basic jako klienta DDE

DDEExecute, DDEInitiate

Wysłanie danych z Access Basica do serwera
DDE

DDEPoke, DDESend

Użycie Access Basic 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

Error Function

Symulacja wystąpienia błędu czasu
wykonania

Error Statement

background image

29

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 #

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

background image

30

Znak liczby

Sygn.

Generowanie liczb pseudolosowych

Randomize, Rnd

ż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,
VarP

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 wielkich 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

Oprócz instrukcji w kodzie procedur i funkcji języka 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 Access Basic rozpoczniemy od utworzenia nowego modułu o nazwie
FUNKCJE i utworzenie w tym module funkcji o nazwie załadowany(nazwaFormularza).

background image

31

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


Do następnego ćwiczenia potrzebna będzie znajomość funkcji MsgBox i obiektu DoCmd.
Obiekt DoCmd służy do wykonywania w języku Access Basic akcji, które można wykonać
za pomocą makr. Lista akcji podana została w części poświęconej makrom na początku.
Proszę pamiętać, że należy podawać angielskie nazwy akcji.
Składnia:

DoCmd.Akcja 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ł)

Argumenty:

background image

32

komunikat - ciąg znaków lub zmienna znakowa będąca komunikatem wyświetlanym
w oknie
typ - suma wartości numerycznych określających postać okna komunikatu

wartość

Znaczenie

Ilość i rodzaje przycisków

0

Tylko przycisk OK.

1

Przyciski OK i Cancel.

2

Przyciski Abort, Retry, i Ignore.

3

Przyciski Yes, No, i Cancel buttons.

4

Przyciski Yes i No.

5

Przyciski Retry i Cancel.

Typ ikony

0

Brak ikony.

16

Ikona STOP - komunikat krytyczny.

32

Ostrzeżenie ze znakiem zapytania.

48

Ostrzeżenie z wykrzyknikiem.

64

Informacja.

Przycisk domyślny

0

Pierwszy przycisk jako domyślny.

256

Drugi przycisk jako domyślny.

512

Trzeci przycisk jako domyślny.

tytuł - ciąg znaków lub zmienna znakowa, która będzie tytułem okna.

Funkcja MsgBox zwraca jedną z następujących wartości:

Wartość

znaczenie - naciśnięty przycisk

1

OK.

2

Cancel

3

Abort

4

Retry

5

Ignore

6

Yes

7

No

Ć

WICZENIE 9

Proszę zaprogramować działanie przycisków grupy opcji z formularza PANEL
STEROWANIA. Zadaniem pierwszych trzech przycisków b
ędzie zmiana etykiety znajdującej

background image

33

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 STEROWANIA w widoku projekt

2.

Zaznaczyć grupę opcji „Wybór” (klikając ramkę grupy) i dla właściwości zdarzenia „przy

kliknięciu” wybrać Procedura zdarzenia i uruchomić generator kodu.

3.

Następnie należy wpisać poniższy kod:

Sub Wybór_Click ()

Dim odp As Integer

Select Case [Wybór]

Case 1

Me![etykietka poleceń].Caption = "Katalog"

Me![Lista poleceń].RowSource = "Katalog"

Case 2

Me![etykietka poleceń].Caption = "Wydruki"

Me![Lista poleceń].RowSource = "Wydruki"

Case 3

Me![etykietka poleceń].Caption = "Klienci"

Me![Lista poleceń].RowSource = "Klienci"

Case 4

odp = MsgBox("czy zamknąć panel sterowania", 4 + 32 + 256, "Pytanie")

If odp = 6 Then

DoCmd.Close ACFORM, „PANEL STEROWANIA”

DoCmd.SelectObject A_TABLE, , True

Else

Me![Wybór] = 1

Me![etykietka poleceń].Caption = "Katalog"

Me![Lista poleceń].RowSource = "Katalog"

End If

End Select

End Sub

4. Po wykonaniu tego ćwiczenia proszę otworzyć formularz PANEL STEROWANIA i

sprawdzić czy działa poprawnie. Co dzieje się po otwarciu panelu, czy tak powinien się
zachowywa
ć?

Ć

WICZENIE 10

Aby poprawić działanie PANELU STEROWANIA proszę ustawić właściwość "Tytuł"
formantu "etykietka polece
ń" oraz właściwość ŻródłoWiersza formantu "Lista
polece
ń

"

background image

34

Ć

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

Sub lista_poleceń_Click ()

If IsNull([lista poleceń]) Then

MsgBox ("Nie wybrano żadnego polecenia")

Exit Sub

End If

Select Case [lista poleceń]

Case 101

DoCmd.OpenForm "Płyty", , , , acAdd

Case 102

DoCmd.OpenForm "Płyty"

Case 106

DoCmd.OpenForm "Wykonawcy"

Case 107

DoCmd.OpenQuery "Lista płyt"

End Select

End Sub

UWAGA: Do tej procedury będziemy wracać podczas dalszych ćwiczeń i wprowadzimy
pozostałe akcje w miarę tworzenia aplikacji.

Ć

WICZENIE 12

background image

35

Należy zaprogramować reakcję przycisku zamykającego aplikację

1.

Jedyną nową akcją będzie tutaj akcja Quit z argumentem A_PROMPT, wywoływana przez

instrukcję DoCmd i zamykająca aplikację.

2.

Oprócz tej akcji wykorzystamy jeszcze bezparametrową metodę SetFocus. Metoda ta

ustawia fokus na danym elemencie sterującym.

3.

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 A_PROMPT
Else
Me![Wybór].SetFocus
End If

End Sub

W dalszej części ćwiczeń zaprogramujemy synchronizację dwóch formularzy. W pliku
muzyka3.mdb (który należy otworzyć) znajdują się dwa nowe formularze: formularz
PRZEGLĄD PŁYT i formularz TYTUŁY NAGRAŃ.

background image

36

Rys. 4 Okno dialogowe Formularz: PRZEGLĄD PŁYT

Formularz PRZEGLĄD PŁYT składa się z pięciu elementów sterujących:

1. Z pola edycji z listą wyboru, w którym wyświetlane są nazwy kategorii

muzycznych. Źródłem wiersza dla tego pola jest tabela KATEGORIE.

Pole to będzie służyć do wybierania kategorii muzycznej z listy kategorii.
2. Pola listy. Pole to wyświetla (obecnie) listę wszystkich płyt, które znajdują się w

katalogu.

3. Przycisku Zamknij formularz (przycisk został założony w standardowy sposób za

pomocą Kreatora)

4. Przycisku Wypożycz - przycisk ten jest widoczny tylko wtedy jeśli formularz

wyświetlany jest z formularza WYPOŻYCZALNIA i służy wtedy do
zarejestrowania 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.

Formularz TYTUŁY NAGRAŃ składa się z dwóch formantów:

1. Pola listy, w którym będą wyświetlane tytuły nagrań na płycie zaznaczonej w

formularzu LISTA PŁYT

2. Przycisku Zamknij formularz

Celem pierwszej grupy ćwiczeń będzie zsynchronizowanie działania obu pól na formularzu
LISTA TYTUŁÓW 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
TYTUŁÓW i TYTUŁY NAGRAŃ w taki sposób aby:

• Po kliknięciu przycisku Tytuły nagrań wyświetlany był formularz z listą nagrań a

jednocześnie tekst na etykiecie tego przycisku zmieniał się na „ukryj nagrania”.

• Jeśli wyświetlony jest formularz TYTUŁY NAGRAŃ to po kliknięciu przycisku

„ukryj nagrania” ma być zamykany ten formularz a tekst na przyciksu Tytuły
nagra
ń

powinien pojawić się ponownie.

• Jeśli wyświetlone są obydwa formularze to kliknięcie dowolnego tytułu płyty

automatycznie wyświetla nagrania z tej płyty. Podobnie działa zmiana kategorii

• Jeśli otwarte są oba formularze to zamknięcie formularza LISTA PŁYT

automatycznie zamyka formularz TYTUŁY NAGRAŃ

Ć

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 generator i po wyświetleniu siatki projektowania zapytania, w wierszu Kryteria

w kolumnie Numer kategorii wstaw jako kryterium wartość pola lista kategorii:

background image

37

Formularze![przegląd płyt]![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 tytułów
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

. Procedura powinna ponawiać zapytanie źródła wiersza pola listy Lista

tytułów.

2.

Proszę utworzyć tą procedurę.

Sub lista_kategorii_AfterUpdate ()

Me![lista tytułów].Requery

End Sub

Ć

WICZENIE 15

Następnym etapem tworzenia aplikacji będzie wyświetlanie za pomocą przycisku Tytuły
nagra
ń

z formularza LISTA TYTUŁÓW formularza TYTUŁY NAGRAŃ z nagraniami z

zaznaczonej płyty, i zmianę etykiety tego przycisku na etykietę „ukryj nagrania”. Zdarzeniem
b
ędzie kliknięcie.

1.

Proszę wpisać następującą procedurę:

Sub tytu_y_nagrań_Click ()

DoCmd.OpenForm „TYTUŁY NAGRAŃ

Me![tytuły nagrań].Caption = "ukryj nagrania"

End Sub

Ć

WICZENIE 16

Jak łatwo zauważyć, synchronizacja nie jest doskonała. Po wyświetleniu formularza, w polu
listy wy
świetlane są nagrania z wszystkich płyt zarejestrowanych w bazie.

1.

Za pomocą metody, którą wykorzystaliśmy poprzednio do filtrowania listy tytułów, proszę

przefiltrować listę nagrań w taki sposób aby na liście pojawiały się tylko nagrania z płyty
zaznaczonej w poprzednim formularzu.

2.

W źródle rekordów pola listy Tytuły nagrań należy ustawić kryterium w kolumnie „numer

płyty” na:

[Formularze]![przegląd płyt]![lista tytułów]

3. Sprawdź czy formularz TYTUŁY NAGRAŃ jest wyskakujący?

Ć

WICZENIE 17

1.

Co zrobić aby po kliknięciu tytułu lista nagrań była aktualizowana? Należy sprawdzić

funkcją zaladowany(tytuły nagrań) czy formularz TYTUŁY NAGRAŃ jest otwarty.

Jeśli nie jest, nie powinna być wykonywana żadna akcja.

Jeśli jest otwarty to po kliknięciu tytułu, lista nagrań na formularzu powinna być

zaktualizowana, czyli powinniśmy ponowić zapytanie pola listy.

background image

38

2.

Wpisz następującą procedurę:

Sub lista_tytu_ów_Click ()

If zaladowany(„TYTUŁY NAGRAŃ”) Then

Forms![tytuły nagrań]![lista nagrań].Requery

End If

End Sub

Ć

WICZENIE 18

Po zamknięciu formularza TYTUŁY NAGRAŃ etykieta na przycisku nie zmienia się. W jaki
sposób to poprawi
ć?

1.

Należy dla zdarzenia przy zamknięciu utworzyć procedurę, która sprawdza czy formularz

LISTA NAGRAŃ jest zaladowany i jeśli jest to przywrócić tekst na etykiecie.

2.

Wpisz i uruchom następującą procedurę:

Sub Form_Close ()

If zaladowany(„PRZEGLĄD PŁYT”) Then

Forms![ przegląd płyt]![tytuły nagrań].Caption = TYTUŁY NAGRAŃ

End If

End Sub

3. Pytanie: Dlaczego po otwarciu formularza TYTUŁY NAGRAŃ bezpośrednio z okna bazy

danych wyświetlana jest prośba o podanie parametru i czy jest to błąd?

Ć

WICZENIE 19

Co zrobić aby po zamknięciu formularza PRZEGLĄD PŁYT zamykany był równocześnie
formularz NOWY - TYTUŁY NAGRA
Ń jeśli jest otwarty?

1.

Wpisz następującą procedurę:

Sub Form_Close ()

If zaladowany(„TYTUŁY NAGRAŃ”) Then

DoCmd.Close ACFORM, „TYTUŁY NAGRAŃ

End If

End Sub

background image

39

Ć

WICZENIE 20

Proszę zmienić działanie przycisku Tytuły nagrań na formularzu PRZEGLĄD PŁYT w taki
sposób aby w sytuacji gdy jest wy
świetlony formularz TYTUŁY NAGRAŃ formularz ten był
zamykany i przywracana poprzednia etykieta na przycisku

1.

Zmodyfikuj następującą procedurę (procedura jest już wpisana)

Sub tytu_y_nagrań_Click ()

If zaladowany(„TYTUŁY NAGRAŃ”) Then

Me![tytuły nagrań].Caption = "tytuły nagrań "

DoCmd.Close AcForm, " tytuły nagrań"

Else

DoCmd.OpenForm " tytuły nagrań"

Me![tytuły nagrań].Caption = "ukryj tytuły"

End If

End Sub

Ć

WICZENIE 21

Pytanie: Jeśli w polu listy z tytułami płyt nie jest zaznaczona żadna płyta to i tak kliknięcie
przycisku TYTUŁY NAGRA
Ń powoduje otwarcie formularza z tytułami. Co zrobić aby
formularz nie był w takiej sytuacji otwierany?

1.

Zmodyfikuj następującą procedurę (procedura jest już wpisana)

Sub tytu_y_nagrań_Click ()

If IsNull(Me![lista tytułów]) Then

MsgBox ("nie wybrałeś płyty - nie mogę wyświetlić listy tytułów")

Exit Sub

End If

If zaladowany(„TYTUŁY NAGRAŃ”) Then

Me![tytuły nagrań].Caption = "tytuły nagrań "

DoCmd.Close AcForm, " tytuły nagrań"

Else

DoCmd.OpenForm " tytuły nagrań"

Me![tytuły nagrań].Caption = "ukryj tytuły"

End If

End Sub

Ć

WICZENIE 22

Proszę podłączyć formularz LISTA TYTUŁÓW do PANELU STEROWANIA do polecenia
przeszukiwanie katalogu i sprawdzi
ć działanie.

background image

40

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 muzyka4.mdb.
W pliku znajdują się dodatkowe obiekty:
1. Tabela KLIENCI - LISTA o polach: nr_klienta, imię, nazwisko, adres. Zadaniem tabeli
będzie przechowywanie informacji o klientach.
2. Tabela PŁYTY została uzupełniona o dodatkowe pole nr_klienta: typ danych - liczba
całkowita długa. W polu tym będziemy rejestrować fakt wypożyczenia płyty.
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. Utworzona została relacji między tabelami. (przedstawiona na rysunku poniżej)

Rys. 5 Relacje pomiędzy tabelami

4. Formularz WYPOŻYCZALNIA, w którym znajdują się następujące elementy sterujące:

pole edycji z listą wyboru - pole to będzie służyło do wybierania klienta z listy

zarejestrowanych w wypożyczalni klientów.

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

background image

41

Rys. 6 Okno dialogowe Formularza WYPOŻYCZALNIA

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 Object).
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 LISTY PŁYT, 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 w rekordzie opisującym zaznaczoną płytę w tabeli PŁYTY 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 numer klienta wpisać numer klienta
przekazywany przez pole listy klientów na formularzu WYPOŻYCZALNIA

3. Po wypożyczeniu płyty lista płyt wypożyczonych przez klienta musi zostać

odnowiona

Zwrot płyty przebiega w podobny sposób:

1. Po zaznaczeniu płyty na liście wypożyczonych tytułów na formularzu

WYPOŻYCZALNIA i kliknięciu przycisku Zwrot, odpowiednia procedura
zdarzenia ma usuwać numer klienta z odpowiedniego rekordu z tabeli płyty.

2. Po wykonaniu tej operacji ma być odświeżana 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

42

Ć

WICZENIE 23

Należy wpisać procedurę, która będzie synchronizowała zawartości pola edycji z listą wyboru
z zawarto
ścią pola listy.

Sub Klient_AfterUpdate ()

DoCmd.Requery "Lista wypożyczonych płyt"

DoCmd.GoToControl "Klient"

End Sub

Ć

WICZENIE 24

Proszę do przycisku Lista płyt - wypożyczanie podłączyć formularz LISTA PŁYT 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 Lista_p_yt___wypo_yc_Click ()

If IsNull(Me![Klient]) Then

MsgBox (" Przed uruchomieniem tego polecenia musisz wybrać klienta ")

Me![Klient].SetFocus

Else

DoCmd.OpenForm „PRZEGLĄD PŁYT”

End If

End Sub

Ć

WICZENIE 25

Proszę do przycisku Wypożyczalnia na formularzu PANEL STEROWANIA podłączyć
formularz WYPO
ŻYCZALNIA.

Ć

WICZENIE 26

Proszę o ustawienie właściwości zdarzeń w taki sposób aby przycisk polecenia Wypożycz na
formularzu LISTA PŁYT był wy
świetlany tylko wtedy, gdy otwarty jest formularz
WYPO
ŻYCZALNIA. W przeciwnym razie przycisk nie powinien być widoczny (tak jak jest
teraz).

1.

Wpisz następującą procedurę:

Sub Form_Activate ()

If zaladowany("wypożyczalnia") Then

Me![wypożycz].Visible = True

End If

End Sub

Programowanie za pomocą obiektów dostępu do danych

Podstawą programowania w Visual Basic jest wykorzystanie obiektów dostępu do danych.

background image

43

Obiekty dostępu do danych tworzą strukturę hierarchiczną składającą się z obiektów
następującego typu:

Aparat bazy danych Microsoft Jet

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.

Containers

W obiekcie kontener znajdują się informacje o bazie danych i o
wszystkich zachowanych w bazie tabelach, zapytaniach, relacjach,
formularzach, raportach, makrach, modułach.
Nazwy kontenerów: Databases, Tables, Relationships, Forms, Reports,
Scripts
Uwaga. 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. Obiekt dokument ma
między innymi następujące właściwości: (w większości tylko do
odczytu)
Container

- nazwa obiektu kontener, 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ę zapytania.

TableDefs
(kolekcja
domyślna)

Obiekty TableDef zawierają definicje tabel i tabel załą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).

background image

44

W następnej części wykonane zostaną ćwiczenia prezentujące operacje na zestawach
rekordów.
W tym celu bardziej szczegółowo omówimy obiekt typu recordset.
W programie Access dostępnych jest pięć typów obiektów recordset:
1. Zestaw rekordów w postaci tabeli (table). Może odnosić się tylko do tabeli z bazy danych.

Niektóre operacje na rekordach możliwe są tylko na tego typu zestawie rekordów.

2. Dynamiczny zestaw wyników (dynaset). Jest to wynik kwerendy. Pozwala uzyskiwać i

aktualizować dane z jednej lub kilku połączonych tabel i może zawierać aktualizowalne
rekordy. Obiekt Recordset typu zestaw dynamiczny jest dynamicznym zestawem
rekordów, który można stosować do dodawania, zmiany lub usuwania rekordów z
określonej tabeli lub tabel bazy danych.

3. Utrwalony zestaw wyników (snapshot). Utrwalone kopie danych istniejących w bazie w

momencie tworzenia zestawu nie można modyfikować. Przydatny na przykład do
generowania raportów, wyszukiwania wartości.

4. Zestaw typu progresywnego — jest to typ podobny do typu utrwalonego, z wyjątkiem

tego, że nie jest udostępniany żaden kursor. Rekordy można przewijać tylko w przód.
Efektem jest lepsza wydajność w sytuacji, gdy potrzebne jest tylko jedno przejście po
rekordach zestawu wynikowego.

5. Zestaw typu dynamicznego — jest to zestaw wyników kwerendy pochodzących z jednej

lub więcej tabel bazowych, w którym można dodawać, zmieniać lub usuwać rekordy z
kwerendy zwracającej wiersze. Ponadto, rekordy w tabelach bazowych dodawane,
usuwane lub poddawane edycji przez innych użytkowników również pojawiają się w
danym obiekcie Recordset.

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.
Typy danych DAO (równoznaczne z możliwością utworzenia zmiennej obiektowej):
Container, Database, Document, Field, Index, Property, QueryDef, Recordset, TableDef

Tworzenie zmiennych obiektowych (Przykład):

Dim MojaBaza As Database

Dim MojObszarRoboczy As Workspace

i przypisywanie zmiennym wartości

Set MojObszarRoboczy = DBEngine.Workspaces(0)

Set MojaBaza = MojObszarRoboczy.Databases(0)

albo jednym poleceniem:

Set MojaBaza = DBEngine.Workspaces(0).Databases(0)

W jaki sposób otworzyć zestaw rekordów ?

Zestawy rekordów tworzy metoda OpenRecordset. Metoda ta jest dostępna dla obiektów
typu: Database, TableDef, QueryDef i Recordset. W pierwszych trzech przypadkach składnia
jest inna niż dla ostatniego:

background image

45

Składnia dla obiektu typu Database:

Set zmienna = baza_danych.OpenRecordset(źródło,typ[,opcje])

typ - jedna z pięciu stałych predefiniowanych:

dbOpenTable

Otwiera obiekt Recordset typu tabela

dbOpenDynamic Otwiera obiekt Recordset typu dynamicznego, podobny do

kursora dynamicznego ODBC (tylko obszary robocze ODBCDirect).

dbOpenDynaset Otwiera obiekt Recordset typu zestaw dynamiczny, który jest

podobny do kursora kluczowego ODBC.

dbOpenSnapshot

Otwiera obiekt Recordset typu utrwalonego

dbOpenForwardOnly Otwiera obiekt Recordset typu progresywnego.

ź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 zapytania lub instrukcja SQL wybierająca rekordy.
Przykład tworzenia zestawu rekordów (dla tabeli klienci)

Dim zestaw As Recordset

Dim baza As Database

Set baza = DBEngine.Workspaces(0).Databases(0)

Set zestaw = baza.OpenRecordset(„Klienci”,DbOpenTable)

W tym momencie zmienna zestaw reprezentuje zestaw rekordów w postaci tabeli.

Wybrane metody dla obiektu Recordset

metoda

Składnia

działanie

AddNew

Zestaw.AddNew

Dodaje nowy rekord do zestawu. Pola przyjmują wartość
Null. 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, przed zamknięciem należy
wykonać metodę update w celu zatwierdzenia
wprowadzonych zmian. Nie można zamknąć bazy
danych metodą Close jeśli jest otwarty zestaw
rekordów. zamykanie zamkniętego obiektu powoduje
wygenerowanie błędu.

Delete

Zestaw.Delete

Usunięcie bieżącego rekordu. Aby usunąć rekord musi
być bieżący rekord. Jeśli goi 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

background image

46

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ść

NoMatch

określa

czy

operacja

wyszukiwania się nie powiodła. True lub False. Na
przykład:
kryteria = "Title = 'Sales Representative'"
Do Until MySet.NoMatch

MySet.Edit

MySet!Title = "Account Executive"

MySet.Update

MySet.FindNext kryteria

Loop

Move

Zestaw.Move
ile_wierszy[,
start]

Przesuwa rekord o podaną ilość wierszy.
Ile_wierszy (o 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 Tworzenie

recordset

na

podstawie obiektu
recordset

Requery

zestaw.Requery

Aktualizacja zestawu rekordów przez ponowne
wykonanie zapytania

Seek

zestaw.Seek
porównanie,
klucz1, klucz2 ...

1. Można stosować tylko do zestawów typu tabela i
indeksowanych.
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

Właściwości

Nazwa

Opis

BOF, EOF

Wskazuje czy bieżący rekord jest przed pierwszym lub po ostatnim
rekordzie

background image

47

przykład zastosowania:

Do Until MyTable.EOF

MyTable.MoveNext

...

Loop

MyTable.MoveLast

Do Until MyTable.BOF

MyTable.MovePrevious

...

Loop

MyTable.Close

tylko do odczytu

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

......

Endif

Filter

(dynaset i snapshot - read/write).

Set MySet = MyDB.OpenRecordset("Orders", DB_OPEN_DYNASET)

MySet.Filter = "[Ship Country] = 'UK'"

Set FilteredSet = MySet.OpenRecordset()

Uwaga. Po ustawieniu filtru trzeba ponownie otworzyć ten sam zestaw
rekordów jako inny.
Set MySet = MyDB.OpenRecordset("SELECT * FROM Orders WHERE
[Ship Country] = ‘UK’;”)

Index

Ustawia dla zestawu typu table bieżący indeks (read/write). Musi to być
nazwa istniejącego obiektu indeks.

LastModified

dynaset i table, ustawia Bookmark na ostatnim modyfikowanym lub
dodanym rekordzie.

DataCreated,

Data utworzenia tabeli i data ostatniej zmiany projektu tabeli.

background image

48

LastUpdated

Name

Nazwa obiektu

RecordCount

Ilość rekordów w zestawie do których uzyskano dostęp. Usunięcie
rekordu zmniejsza licznik.

Restartable

Określa czy można ponowić zapytanie dla danego zestawu rekordów
metodą Requery

Sort

Sortowanie
Set MySet = MyDB.OpenRecordset("Orders", DB_OPEN_DYNASET)
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

Ć

WICZENIE 27

Proszę zaprogramować procedurę wypożyczającą płytę.

1.

Należy utworzyć zestaw rekordów dla tabeli "Płyty", ustawić właściwość Index, na 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, zatwierdzamy zmianę i opuszczamy procedurę

3.

Wpisz następującą procedurę:

Sub wypo_ycz_Click ()

Dim Baza As Database

Dim Plyty As Recordset

background image

49

Set Baza = CurrentDb

Set Plyty = Baza.OpenRecordset("płyty", DB_OPEN_TABLE)

Plyty.Index = "numer płyty"

Plyty.Seek "=", [lista tytułów]

If Plyty.NoMatch Then

MsgBox ("Nie mogę odszukać - może nie zaznaczyłeś płyty ?")

Else

If IsNull(plyty("nr_klienta")) then

Plyty.Edit

Plyty("nr_klienta") = Forms![wypożyczalnia]![klient]

Plyty.Update

Else

MsgBox("Niestety płyta jest wypożyczona")

Exit Sub

Endif

End If

End Sub

Ć

WICZENIE 28

Należy wpisać procedurę, która zadba o odświeżenie listy płyt pożyczonych przez klienta. Jest
uruchamiana przy aktywowaniu formularza wypo
życzalnia.

Sub Form_Activate ()

DoCmd.GoToControl "lista wypożyczonych płyt"

DoCmd.Requery "lista wypożyczonych płyt"

End Sub

Ć

WICZENIE 29

Należy wpisać procedurę zapisująca zwrot pożyczonej płyty

Sub Zwrot_p_yty_Click ()

Dim MojZb As Recordset

Dim MojaBaza As Database

Set MojaBaza = CurrentDb

If IsNull([lista wypożyczonych płyt]) Then

MsgBox ("Zaznacz płytę !")

Else

Set MojZb = MojaBaza.OpenRecordset("płyty", DB_OPEN_TABLE)

background image

50

MojZb.Index = "numer płyty"

MojZb.Seek "=", [lista wypożyczonych płyt]

If MojZb.NoMatch Then

MsgBox ("Mam kłopoty z odszukaniem")

Else

MojZb.Edit

MojZb("nr_klienta") = Null

MojZb.Update

DoCmd.Requery "lista wypożyczonych płyt"

[lista wypożyczonych płyt] = Null

MsgBox ("Zwrot został zapisany")

End If

End If

End Sub


W dalszej części ćwiczeń będziemy rejestrować w tabeli WYPOŻYCZENIA 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ę WYPOŻYCZENIA o polach:

Nazwa pola

typ danych

[nr_kolejny]

Autonumeracja

[nr_płyty]

Liczba całkowita długa

[data wypożyczenia]

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:

background image

51

Wynik ćwiczenia

Ć

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 PŁYTY, w tabeli WYPOŻYCZENIA
tworzony był nowy rekord, a w nim były rejestrowane nast
ępujące dane: numer kolejny,
numer płyty, numer wypo
życzającego, datę wypożyczenia

1.

Przeanalizuj zmodyfikowaną wersję procedury i uzupełnij (modyfikacje zostały

podkreślone)

Sub wypo_ycz_Click ()

Dim Baza As Database

Dim plyty As Recordset, wypozyczenia As Recordset

Set Baza = DbEngine.Workspaces(0).Databases(0)

Set plyty = Baza.OpenRecordset("płyty", DB_OPEN_TABLE)

Set wypozyczenia = Baza.OpenRecordset("wypożyczenia", DB_OPEN_TABLE)

plyty.Index = "numer płyty"

plyty.Seek "=", [lista tytułów]

If plyty.NoMatch Then

MsgBox ("Nie mogę odszukać - może nie zaznaczyłeś płyty ?")

Else

background image

52

If IsNull(plyty("nr_klienta")) then

plyty.Edit

plyty("nr_klienta") = Formularze![wypożyczalnia]![pole0]

plyty.Update

'druga część rejestrująca wypożyczenia

wypozyczenia.AddNew

wypozyczenia("nr_klienta") = Forms![wypożyczalnia]![pole0]

wypozyczenia("data wypożyczenia") = Date

wypozyczenia("nr_płyty") = Forms![nowy - przegląd płyt]![lista
tytułów]

wypozyczenia.Update

plyty.Close

wypozyczenia.Close

else

MsgBox("plyta jest wypożyczona ')

Exit Sub

Endif

End If

End Sub

Ć

WICZENIE 33

Zmodyfikuj procedurę zdarzenia dla przycisku Zwrot płyty w taki sposób aby procedura
zapisywała w tabeli WYPO
ŻYCZENIA datę zwrotu płyty. Poniżej zamieszczona jest
zmodyfikowana wersja procedury.

Sub Zwrot_p_yty_Click ()

Dim MojZb As Recordset, wypozyczenia As Recordset

Dim MojaBaza As Database

Dim NrStr As String

Set MojaBaza = DbEngine.Workspaces(0).Databases(0)

If IsNull([lista wypożyczonych płyt]) Then

MsgBox ("Zaznacz płytę !")

Else

Set MojZb = MojaBaza.OpenRecordset("płyty", DB_OPEN_TABLE)

‘ UWAGA. Następna instrukcja otwiera zestaw dynamiczny, aby można było
skorzysta
ć z instrukcji

‘ Find

background image

53

Set

wypozyczenia

=

MojaBaza.OpenRecordset("wypożyczenia",

DB_OPEN_DYNASET)

MojZb.Index = "numer płyty"

MojZb.Seek "=", [lista wypożyczonych płyt]

If MojZb.NoMatch Then

MsgBox ("Mam kłopoty z odszukaniem")

Else

MojZb.Edit

MojZb("nr_klienta") = Null

MojZb.Update

'fragment kodu wpisujący datę - musimy znaleźć w tabeli wypożyczenia

'wypożyczenie z odpowiednim numerem płyty

NrStr = Str([lista wypożyczonych płyt])

wypozyczenia.FindFirst "[nr_płyty] = " & NrStr & " and IsNull([data
zwrotu])"

If wypozyczenia.NoMatch Then

MsgBox ("Nie mogę odszukać rekordu w tabeli wypożyczenia")

Else

wypozyczenia.Edit

wypozyczenia("data zwrotu") = Date

wypozyczenia.Update

wypozyczenia.Close

End If

DoCmd.Requery "[lista wypożyczonych płyt]"

‘to polecenie i następne
zostało tylko ‘przeniesione

[lista wypożyczonych płyt] = Null

‘z innego miejsca

MojZb.Close

MsgBox ("Zwrot został zapisany")

End If

End If

End Sub

Do dalszych ćwiczeń należy wczytać bazę, która znajduje się w pliku muzyka5.mdb
Wczytana baza została uzupełniona w następujący sposób:

background image

54

• Uzupełniono tabelę WYPOŻYCZENIA o dwa pola: [czy zapłacone] (Tak/Nie) i [nr

wpłaty] (Liczba całkowita długa)

• Utworzono tabelę WPŁATY o następujących polach: [nr wpłaty] (licznik), [kwota]

(waluta), [data wpłaty] (Data/Godzina), [nr klienta] (liczba - całkowita długa)

• Utworzono formularz ROZLICZENIE, na którym znajdują się trzy pola tekstowe

wyświetlające 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 zapłacone] (wstawić

wartość Nie dla nowego rekordu) i [nr wpłaty] [wstawić wartość Null].

2.

W tym celu w procedurze obsługi zdarzenia „Przy kliknięciu” dla przycisku Wypożycz na

formularzu PRZEGLĄD PŁYT należy dodać instrukcje:

wypozyczenia("czy zaplacone") = 0

‘0 - Nie, -1 Tak

wypozyczenia("nr wpłaty") = Null

‘brak numeru wpłaty

Ć

WICZENIE 35

Proszę utworzyć odpowiednie relacje zgodnie z poniższym rysunkiem:

background image

55

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

4.

Za wyświetlenie formularza i umieszczenie na nim informacji odpowiedzialna jest

następująca procedura: (komentarze wewnątrz procedury)

(pola na formularzu: [ilość płyt], [ilość nierozliczona], [do zapłacenia])

Sub rozliczenie_Click ()

Dim ilosc1 As Integer, ilosc2 As Integer, kwota As Integer

If IsNull([klient]) Then

background image

56

MsgBox ("Wybierz klienta do rozliczenia")

Else

DoCmd.OpenForm "rozliczenie"

'wyliczenie ilości pożyczonych płyt, ilości płyt nierozliczonych i kwoty do zapłaty

'numer klienta wynosi Forms![wypożyczalnia]![pole0]

ilosc1 = 0

ilosc2 = 0

kwota = 0

liczymy płyty dla danego klienta, które nie mają daty zwrotu

ilosc1 = DCount("[nr_płyty]", "wypożyczenia", "[nr_klienta] =

Formularze![wypożyczalnia]![[klient] And IsNull([data zwrotu])")

Formularze![rozliczenie]![ilość płyt] = ilosc1

liczymy płyty dla klienta, które mają datę zwrotu i nie są zapłacone

ilosc2 = DCount("[nr_płyty]", "wypożyczenia", "[nr_klienta] =

Formularze![wypożyczalnia]![klient] And Not IsNull([data zwrotu]) And
Not [czy zapłacone]")

Formularze![rozliczenie]![ilość nierozliczona] = ilosc2

sumujemy wyrażenie - ilość dni pomnożona przez 2 (stawka za dzień) plus 1

opłaty stałej

dla wybranego klienta dla tych płyt które mają datę zwrotu i nie są zapłacone

kwota = Nz(DSum("1 + ([data zwrotu] - [data wypożyczenia])*2",

"wypożyczenia", "[nr_klienta] = Formularze![wypożyczalnia]![klient]
And Not IsNull([data zwrotu]) And Not [czy zapłacone]"),0)

Formularze![rozliczenie]![do zapłacenia] = kwota

End If

End Sub

Ć

WICZENIE 37

Należy przeanalizować rejestrację wpłaty za pomocą przycisku Rejestruj wpłatę na
formularzu ROZLICZENIA

1.

Jakie operacje powinna wykonać procedura rejestrująca wpłatę ?

• powinna utworzyć w tabeli WPŁATY nowy rekord i wpisać tam numer klienta,

datę, i kwotę

powinna przeszukać tabelę WYPOŻYCZENIA,

background image

57

-

wyszukać 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_wp_atę_Click ()

Dim zestaw As Recordset, zestaw1 As Recordset, baza As Database

Dim numer As Long

Dim war1 As Integer, war2 As Integer, war3 As Integer

Dim klient As Integer

Const Tak = -1

If (Me![do zapłacenia] = 0) Or IsNull(Me![do zapłacenia]) Then

MsgBox ("Nie ma kwoty do zapisania")

Exit Sub

End If

Set baza = DBEngine.Workspaces(0).Databases(0)

Set zestaw = baza.OpenRecordset("wpłaty", DB_OPEN_DYNASET)

Set zestaw1 = baza.OpenRecordset("wypożyczenia", DB_OPEN_DYNASET)

klient = Forms![wypożyczalnia]![Pole0]

' instrukcje wpisujące nowy rekord z wpłatą w tabeli wpłaty

zestaw.AddNew

zestaw("kwota") = Me![do zapłacenia]

zestaw("data wpłaty") = Date

zestaw("nr klienta") = Formularze![wypożyczalnia]![Pole0]

zestaw.Update

' instrukcje aktualizujące tabelę płyty

' w tabeli wypożyczenia dla odpowiednich rekordów zmiana

' pola [czy zapłacone] na Tak i pola [nr wpłaty] na numer wpłaty

' Pytanie jak znaleźć numer wpłaty ?

' Otóż nowy rekord nie staje się rekordem bieżącym. Rekordem bieżącym

background image

58

' pozostaje rekord który był bieżącym przed użyciem metody AddNew.

' Aby uczynić nowy rekord bieżącym należy użyć metody Move do zakładki
(bookmark)

' określonej przez ustawienie właściwości LastModified.

zestaw.Move 0, zestaw.LastModified

numer = zestaw("nr wpłaty")

' teraz czas na zmiany w tabeli wypożyczenia

' zrobimy pętlę z warunkiem

' przeszukujemy tabelę wypożyczenia, wyszukujemy wszystkie rekordy

' dla danego numeru klienta [nr_klienta], które mają w polu [data zwrotu] wartość
inn
ą

' niż Null i w polu [czy zapłacone] wartość Nie.

' i wpisujemy numer wpłaty do pola [nr wpłaty] a do pola

' [czy zapłacone] wstawiamy wartość Tak.

zestaw1.MoveFirst

Do Until zestaw1.EOF

war1 = False

If klient = zestaw1("nr_klienta") Then

war1 = True

End If

war2 = Not IsNull(zestaw1("data zwrotu"))

war3 = False

If zestaw1("czy zapłacone") = 0 Then

war3 = True

End If

If war1 And war2 And war3 Then

zestaw1.Edit

zestaw1("nr wpłaty") = numer

zestaw1("czy zapłacone") = Tak

background image

59

zestaw1.Update

End If

zestaw1.MoveNext

Loop

zestaw1.Close

zestaw.Close

DoCmd.Close ACFORM, "rozliczenie"

MsgBox (" Wpłata została zarejestrowana pod numerem: " & Str(numer))

End Sub

Przetwarzanie transakcyjne

Aby wymusić integralność danych, na przykład w poprzedniej procedurze zadbać o to aby
dane zapisane były zarówno w tabeli WPŁATY jak i w tabeli WYPOŻYCZENIA, 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) = 6 then

Obszar.Commit

‘zatwierdzenie transakcji (zmian)

Else

Obszar.Rollback

‘wycofanie transakcji (cofnięcie zmian)

Endif

background image

60

Ć

WICZENIE 38

Proszę zmienić poprzednią procedurę na transakcyjną.

background image

61

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 „Dla 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ź poprawna to powinniśmy kontynuować
3. Instrukcją DoMenuItem z parametrem A_UNDOFIELD należy wycofać zmiany

dokonane w tym polu (na razie nie ma zmian, czyli wprowadzonej wartości nie można
zatwierdzić bo nie majej na liście)

4. Wyświetlić formularz przeznaczony do wprowadzania danych do tabeli (w naszym

przypadku formularz NOWY 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 DATA_ERRCONTINUE 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 PŁYTY)

Sub numer_wykonawcy_NotInList (NoweDane As String, Odpowiedz As Integer)

Dim odp As Integer

' Wyświetlanie pola komunikatu, z pytaniem czy użytkownik chce

' dodać nowego wykonawcę.

odp = MsgBox("Czy chcesz dodać nowego wykonawcę?", 4 + 32)

If odp = 6 Then

' Usunięcie nowej nazwy z pola edycji z listą wyboru

' aby można było powtórzyć zapytanie po powrocie do formularza.

' Powtórzyć zapytanie można tylko wtedy jeśli pole zostało zachowane

' lub zostały wycofane zmiany. Ponieważ wartości zachować nie można, trzeba
wycofa
ć zmiany.

background image

62

DoCmd.RunCommand acCmdUndo

DoCmd.RunCommand acCmdUndo

DoCmd.OpenForm "Nowy wykonawca", A_NORMAL, , , A_ADD

Forms![Nowy wykonawca]![wykonawca] = NoweDane

' Kontynuacja bez wyświetlania domyślnego komunikatu błędu.

Odpowiedz = DATA_ERRCONTINUE

End If

End Sub

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 PŁYTY,
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 NOWY WYKONAWCA ale tylko wtedy jeśli otwarty jest formularz
PŁYTY. Poniżej podana jest szczegółowa procedura
UWAGA: Działanie to ma sens tylko wtedy jeśli wywołaliśmy formularz NOWY
WYKONAWCA opisany w poprzedniej procedurze sposób. Jeśli formularz NOWY
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 pytanie.
Procedura:

Sub Form_Unload (Cancel As Integer)

Dim numer As Long

numer = Me![numer wykonawcy]

If zaladowany("Płyty") Then

DoCmd.SelectObject ACFORM, "Płyty"

Forms![Płyty]![numer wykonawcy].Requery

Forms![Płyty]![numer wykonawcy] = numer

End If

End Sub

background image

63

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

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

background image

64

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 włączać do zestawu wyników rekordy, które zawierają
zdublowane dane w wybranych polach.

SELECT DISTINCT [Last Name]

FROM Employees

DISTINCT jest równoważne właściwości zapytania Wartości unikatowe.

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
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 ignorowane jeśli zapytanie dotyczy tylko jednaj tabeli.

background image

65

DISTINCTROW jest równoważna ustawieniu właściwości zapytania Unikatowe rekordy na
Tak (wartość domyślna) w arkuszu właściwości zapytania.

TOP

Wybiera tylko pierwsze rekordy w podanej ilości:

SELECT TOP 25 [First Name], [Last Name]

FROM Students

WHERE [Graduation Year] = 1994

ORDER BY [Grade Point Average] DESC

SELECT TOP 10 PERCENT [First Name], [Last Name]

FROM Students

WHERE [Graduation Year] = 1994

ORDER BY [Grade Point Average] DESC

klauzula WHERE

Za pomocą klauzuli WHERE można filtrować rekordy, czyli decydować o tym, które rekordy
zostaną włączone do wyniku zapytania.
Składnia

SELECT fieldlist

FROM tableexpression

WHERE criteria

Polecenie SELECT z klauzulą WHERE wykorzystuje następujące argumenty.

Argument

Description

fieldlist

nazwy pól wraz z aliasami i predykatami selekcji (ALL, DISTINCT,
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.

background image

66

Przykłady wyrażeń dla klauzuli WHERE

SELECT [Last Name], Salary

FROM Employees

WHERE Salary > 21000;

Klauzula WHERE może składać się z 40 wyrażeń połączonych operatorami logicznymi And i
Or.

SELECT [Product ID], [Units In Stock]

FROM Products

WHERE [Units In Stock] <= [Reorder Level];

Literały typu data muszą być podane w formacie U.S., nawet jeśli używa się innej wersji
programu Access. Na przykład Maj 10, 1994, powinien być wprowadzony jako 5/10/94, na
przykład:

SELECT *

FROM Orders

WHERE [Shipped Date] = #5/10/94#

Klauzula FROM

W klauzuli FROM do łączenia danych z różnych tabel można używać operatorów połączeń
LEFT JOIN and RIGHT JOIN.
Składnia

FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 = table2.field2

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.

background image

67

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

Filtrowanie przez formularz

Ć

WICZENIE 40

1.

Proszę wczytać bazę danych, która znajduje się w pliku muzyka6.mdb

2.

Należy wykonać filtrowanie przez formularz dla tabeli KLIENCI.

W bazie danych muzyka6.mdb zostały dodane następujące obiekty:

Z bazy Nwind została zaimportowana tabela KLIENCI, zmieniono nazwę na KLIENCI

BIS

. Będziemy filtrować listę klientów przez pola Firma, miasto, kraj.

Utworzono formularz zespolony o następującej budowie:

-

formularz główny (niezwiązany) o nazwie KLIENCI - BIS zawierający trzy pola
niezwi
ązane: nazwa firmy, miasto, kraj oraz przyciski: Filtruj i Pokaż wszystko.

-

formularz wyświetlający wszystkie dane z listy produktów w widoku Arkusza
danych, o nazwie KLIENCI - BIS PODFORMULARZ - jest to podformularz do
formularza KLIENCI BIS

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 firmy, miasto, kraj powinna

tworzyć kryterium dla klauzuli WHERE instrukcji SELECT. Kryterium jest postaci
ci
ągu znaków

Jednocześnie, jeśli w polach są puste wartości to powinny być wyświetlane

wszystkie rekordy

W tym celu wprowadzimy dwie zmienne:

MojSQL

- zmienna znakowa zawierająca treść instrukcji SELECT

MojeKryterium

- zmienna znakowa zawierająca treść klauzuli WHERE bez

słowa kluczowego WHERE

background image

68

Aby wyświetlane były wszystkie rekordy jeśli nie są wprowadzone wartości do pól,

zmienną MojSQL zainicjujemy w postaci ciągu znaków „SELECT * FROM Klienci
WHERE ”. Prosz
ę pamiętać o spacji kończącej ten ciąg znaków.

Teraz musimy zamienić wartości z pól nazwa firmy, miasto, kraj 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 zapytania dla podformularza

4. Poniżej znajduje się treść procedury

background image

69

Sub Przycisk8_Click ()

' Utworzenie klauzuli WHERE wykorzystującej kryteria wprowadzone

' przez użytkownika i ustawienie właściwości "Źródło rekordów"

' formularza "Podformularz Znajdź klientów".

Dim MojSQL As String, MojeKryteria As String, MojeZrodloRek As String

Dim MojFormularz As Form

' Inicjacja instrukcji SELECT.

MojSQL = "SELECT * FROM [Klienci - bis] WHERE "

MojeKryteria = ""

' Chr(39) to apostrof

' Chr(42) to gwiazdka

If Me![nazwa firmy] <> "" Then

MojeKryteria = ‘’ [nazwa firmy]" & " Like " & Chr(39) & Me![nazwa firmy] &
Chr(42) & Chr(39)

End If

If Me![Miasto] <> "" Then

' Dodanie operatora "and", jeśli jest już inne kryterium.

If MojeKryteria <> ‘’” Then

MojeKryteria = MojeKryteria & " and "

End If

MojeKryteria = MojeKryteria & " Miasto" & " Like " & Chr(39) & Me!Miasto &
Chr(42) & Chr(39)

End If

If Me![kraj] <> "" Then

' Dodanie operatora "and", jeśli jest już inne kryterium.

If MojeKryteria <> ‘’” Then

MojeKryteria = MojeKryteria & " and "

End If

MojeKryteria = (MojeKryteria & " Kraj" & " Like " & Chr(39) & Me![kraj] & Chr(42)
& Chr(39))

End If

' Użycie wartości wprowadzonych w polach tekstowych nagłówka do utworzenia

' klauzuli WHERE.

background image

70

' Jeśli nie ma określonego kryterium zwrócić wszystkie rekordy.

If MojeKryteria = "" Then

MojeKryteria = "True"

End If

' Utworzenie instrukcji SELECT.

MojeZrodloRek = MojSQL & MojeKryteria

' Ustawienie właściwości "Źródło rekordów" formularza

' "Podformularz Znajdź klientów"

Me!opis.Caption = MojeKryteria

Me![Klienci bis - podformularz].Formularz.RecordSource = MojeZrodloRek

Me![Klienci bis - podformularz].Requery

' Jeśli nie ma rekordów spełniających kryteria, wyświetlenie komunikatu.

' Przesunięcie fokusu do przycisku "Pokaż wszystko".

If Me![Klienci bis - podformularz].Form.RecordsetClone.RecordCount = 0 Then

MsgBox "Brak rekordów spełniających podane kryteria.", 48, "Nie znaleziono
rekordów"

Me![Pokaż wszystko].SetFocus

End If

End Sub

Ć

WICZENIE 41

Jako samodzielne ćwiczenie proszę napisać procedurę obsługi zdarzenia „Przy kliknięciu
dla przyciksu Poka
ż wszystko.

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.

background image

71

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ę otworzyć bazę danych cwicz2.mdb i otworzyć formularz podłącz. Należy
oprogramowa
ć dwa przyciski - podłącz tabelę xls i podłącz tabelę dbf.

Tekst procedury dla przycisku podłącz tabelę dbf:

Private Sub Polecenie8_Click()

Dim tab_klienci As TableDef

Set tab_klienci = CurrentDb.CreateTableDef("klienci z dbf")

tab_klienci.Connect = "dBase III;DATABASE=" & Me!katalog

tab_klienci.SourceTableName = Me!plik

CurrentDb.TableDefs.Append tab_klienci

End Sub

Tekst procedury dla przycisku podłącz tabelę xls

Private Sub Polecenie10_Click()

Dim tab_klienci As TableDef

Set tab_klienci = CurrentDb.CreateTableDef("klienci z xls")

tab_klienci.Connect = "excel 5.0;DATABASE=" & Me!katalog & "\" & Me!plik

tab_klienci.SourceTableName = "Firmy"

CurrentDb.TableDefs.Append tab_klienci

End Sub

Ć

WICZENIE 43

Proszę napisać procedurę zdarzenia dla przycisku Odłącz tabele.

Tekst procedury:

Private Sub Polecenie13_Click()

CurrentDb.TableDefs.Delete "klienci z xls"

CurrentDb.TableDefs.Delete "klienci z dbf"

End Su

b

background image

72

Obsługa błędów wykonania

Schemat obsługi błędu wykonania w kodzie Visual Basic:

Sub Polecenie1_Click()

On Error GoTo Err_Polecenie1_Click

Dim stDocName As String

Dim stLinkCriteria As String

stDocName = "wzor"

DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Polecenie1_Click:

Exit Sub

Err_Polecenie1_Click:

MsgBox Err.Description

Resume Exit_Polecenie1_Click

End Sub

Opis:
W powyższej procedurze instrukcja On Error GoTo Err_Polecenie1_Click 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
insttrrukcji oznaczonej etykietą Err_polecenie1_Click.
Instrukcja Resume Exit_Polecenie1_Click powoduje kontynuację wykoonywania programu
od etykiety Exit_polecenie1_Click.

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.

background image

73


Wyszukiwarka

Podobne podstrony:
access zaawansowane projektowanie baz danych, SPIS TREŚCI
access zaawansowane projektowanie baz danych, SPIS TREŚCI
Access 2002 Projektowanie baz danych Ksiega eksperta ac22ke
Access 2002 Projektowanie baz danych Ksiega eksperta ac22ke
Access 2002 Projektowanie baz danych Ksiega eksperta ac22ke
Access 2002 Projektowanie baz danych Ksiega eksperta ac22ke
Access 2002 Projektowanie baz danych Ksiega eksperta ac22ke
Access 2002 Projektowanie baz danych Ksiega eksperta ac22ke
Access 2002 Projektowanie baz danych Ksiega eksperta 2
Access 2002 Projektowanie baz danych Ksiega eksperta ac22ke
Access 2002 Projektowanie baz danych Ksiega eksperta ac22ke
Access 2002 Projektowanie baz danych Ksiega eksperta ac22ke
Access 2002 Projektowanie baz danych Ksiega eksperta ac22ke
Access 2002 Projektowanie baz danych Ksiega eksperta
Access 2002 Projektowanie baz danych Ksiega eksperta
Projektowanie baz danych
Projektowanie baz danych Wykłady Sem 5, pbd 2006.01.07 wykład03, Podstawy projektowania
Projektowanie baz danych

więcej podobnych podstron