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 
którym wyświetlane są tytuły nagrań).  

 
 
 

Etykieta

 

Grupa opcji

 

Przycisk 
polecenia 

Pole listy 

Etykieta

 

Przycisk 
polecenia

 

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 

14 

10 

13 

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ć 

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

 

instrukcje 

Case wartość

 

instrukcje 

Case wartość

 

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 

 

Tylko przycisk OK. 

 

Przyciski OK i Cancel. 

 

Przyciski Abort, Retry, i Ignore. 

 

Przyciski Yes, No, i Cancel buttons. 

 

Przyciski Yes i No. 

 

Przyciski Retry i Cancel. 

Typ ikony 

 

Brak ikony. 

16 

 

Ikona STOP - komunikat krytyczny. 

32 

 

Ostrzeżenie ze znakiem zapytania. 

48 

 

Ostrzeżenie z wykrzyknikiem. 

64 

 

Informacja. 

Przycisk domyślny 

 

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 

OK. 

Cancel 

Abort 

Retry 

Ignore 

Yes 

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