Spis treści
Wprowadzenie
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:
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.
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.
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).
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:
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
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.
3. Pięć formularzy:
LOGO - formularz będzie automatycznie wyświetlany po otwarciu bazy danych. Znajdują się na nim dwie etykiety z informacjami o aplikacji. Po upływie zadanego czasu
(np. 5 sekund), lub po kliknięciu myszką w dowolnym miejscu formularza, formularz ten będzie zamykany, a po jego zamknięciu automatycznie będzie otwierany formularz PANEL STEROWANIA
PANEL STEROWANIA - centralny formularz całej aplikacji. Jego zadaniem będzie udostępnienie użytkownikowi, za pośrednictwem poleceń i przycisków, wszystkich akcji niezbędnych do poprawnej pracy aplikacji.
Poszczególne elementy sterujące zostały zaznaczone na rysunku i zostaną poniżej omówione.
Rys. 2 Okno dialogowe - Panel sterowania aplikacją
Etykieta, informuje jaka grupa poleceń wyświetlana jest w polu listy poniżej.
Grupa opcji, składająca się z czterech przycisków (wartości przekazywane przez tę grupę to odpowiednio 1, 2, 3 i 4 dla kolejnych przycisków od góry). Zadaniem trzech pierwszych przycisków jest wyświetlenie w polu listy poleceń (z odpowiedniego zapytania) oraz zmianę tytułu etykiety .
Przycisk polecenia otwiera formularz obsługi wypożyczalni. (Formularz pojawi się w jednym z kolejnych etapów szkolenia)
Pole listy, w którym po kliknięciu odpowiedniego przycisku z grupy opcji pojawi się lista poleceń z odpowiedniego zapytania. Dwukrotne kliknięcie polecenia wyświetlonego w tym polu ma spowodować wykonanie odpowiedniej akcji.
Etykieta - dwukrotne kliknięcie tej etykiety powoduje wyświetlanie komunikatu z informacją o autorze.
Przycisk polecenia - przycisk kończący pracę z aplikacją i programem Access.
Płyty - Formularz zespolony przeznaczony do wyświetlania i edycji informacji o płytach. (W formularzu Płyty umieszczony jest podformularz Płyty podformularz w którym wyświetlane są tytuły nagrań).
Rys. 3 Okno dialogowe formularza PŁYTY
Elementy sterujące na formularzu Płyty
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)
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.
Pole kombi - pole związane z polem Numer kategorii w tabeli Płyty. Źródłem wiersza dla tego pola jest tabela Kategorie.
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
Otwórz bazę danych, która znajduje się w pliku m97_1.mdb
Proszę zapoznać się z relacjami, indeksami i właściwościami pól poszczególnych tabel.
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 (Resize) |
Podczas zmiany rozmiaru lecz także podczas pierwszego 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 |
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 |
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:
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:
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
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,
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).
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
Proszę utworzyć i podłączyć do odpowiednich zdarzeń makro grupowe o nazwie Przyciski płyt.
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).
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?
Ustawianie sposobu uruchamiania bazy danych
W poprzednich wersjach programu Access do automatycznego wykonywania pewnych działań przy uruchamianiu bazy danych służyło makro o nazwie AutoExec. W wersji Access 97 można ustawić właściwości startowe bazy danych za pomocą polecenia Autostart z menu Narzędzia. Do wyboru są między innymi następujące opcje:
Ustawienie tytułu aplikacji
Przyporządkowanie ikony do aplikacji
Ustawienie domyślnego paska menu
Ustawienie formularza startowego.
Ukrycie okna bazy danych i paska stanu.
ćwiczenie 7
Proszę ustawić właściwości startowe bazy danych w taki sposób aby po uruchomieniu wyświetlany był formularz LOGO i ukrywane było okno bazy danych.
Lista wybranych akcji
W poniższej tabeli znajduje się skrótowe omówienie wszystkich akcji, które można uruchomić za pomocą makr.
Uwaga: Wszystkie akcje można również uruchomić z poziomu kodu języka Access Basic z tą tylko różnicą, że w języku tym nazwy akcji oraz ich argumenty są angielskie. Z tego też powodu obok nazw polskich w tabeli pozostawione zostały nazwy angielskie.
Akcja |
Opis |
DodajMenu (AddMenu) |
Dodaje menu do własnego paska menu. Argumenty akcji: Nazwa menu, Nazwa makra menu, Tekst paska stanu |
ZastosujFiltr (ApplyFilter) |
Stosuje filtr, zapytanie lub klauzulę WHERE języka SQL do tabeli, formularza lub raportu. W przypadku raportów akcję tę można zastosować tylko dla we właściwości zdarzenia „PrzyOtwarciu” Nazwa filtru - Nazwa filtru lub zapytanie który ograniczające ilość rekordów, lub zmieniające sposób sortowania. Można wprowadzić nazwę istniejącego zapytania lub filtru który został zachowany jako zapytanie. Warunek WHERE - Poprawna klauzula WHERE języka SQL (bez słowa kluczowego WHERE) lub wyrażenie. Uwaga. W warunku WHERE lewa strona wyrażenia zawiera zwykle nazwę z tabeli podstawowej lub zapytania formularza lub raportu. Jeśli występuje odwołanie do elementów sterujących to nazwa elementu powinna występować w pełnej składni: Formularz![nazwa formularza]![element sterujący] Jeśli podane są dwa argumenty Microsoft Access zastosuje klauzulę WHERE do filtrowania. |
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 (GoToPage) |
Akcja przenosi fokus do pierwszego elementu sterującego na podanej stronie aktywnego formularza. |
IdźDoRekordu (GoToRecord) |
Akcja ustawia podany rekord jako rekord bieżący 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 |
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 (Print) |
Drukuje aktywny obiekt bazy danych. Można wybrać zakres wydruku, numery stron, jakość i sortowane kopii. |
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 (SetWarnings) |
Włącza lub wyłącza wyświetlanie komunikatów systemowych. Powoduje zablokowanie wyświetlania komunikatów modalnych w czasie wykonywania makra. Nie blokuje jednak wyświetlania 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. |
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:
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.
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. |
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: 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ę |
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.
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 |
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żą:
Select Case:
Składnia
Select Case wyrażenie
Case wartość1
instrukcje
Case wartość2
instrukcje
Case wartość3
instrukcje
Case else
instrukcje
End Select
Jeśli wyrażenie ma wartość jedną z podanych w instrukcjach Case to wykonywane są instrukcje od tej instrukcji Case do następnej. Jeśli żadna z podanych wartości nie odpowiada wartości wyrażenia to wykonywane są instrukcje po słowie Case else
If
Składnia
If wyrażenie Then
instrukcje1
Else
instrukcje2
End If
Jeśli wyrażenie jest prawdziwe to wykonywana jest pierwsza grupa instrukcji, jeśli wyrażenie jest fałszywe to druga grupa instrukcji.
Pętla For
Składnia
For licznik = wart_początkowa To wartość_końcowa
....
instrukcje
.....
Next
Instrukcje znajdujące się w pętli wykonywane są do czasu aż licznik osiągnie wartość końcową.
Pętla Do ... Loop
Składnia 1
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 znaków |
Chr |
Ciąg znaków na wartość ANSI |
Asc |
Liczba na ciąg znaków |
Format, Str |
Ciąg znaków na liczbę |
Val |
Zmiana jednego typu liczbowego na inny |
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 |
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 |
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 |
Znak liczby |
Sygn. |
Generowanie liczb pseudolosowych |
Randomize, Rnd |
Różne
Opis |
Funkcja |
Uruchomienie innej aplikacji |
AppActivate, Shell |
Wyświetlenie okna dialogu |
InputBox, MsgBox |
Symulacja klawiatury |
SendKeys |
Pobranie argumentów z linii poleceń |
Command |
Wyszukiwanie zmiennych środowiskowych |
Environ |
Nazwa bieżącego użytkownika |
CurrentUser |
Dźwięk z głośniczka |
Beep |
Wykonanie akcji Microsoft Access |
DoCmd |
SQL
Opis |
Funkcja |
Funkcje agregujące SQL |
Avg, Count, First, Last, Min, Max, StDev, StDevP, Sum, Var, 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). 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
Proszę utworzyć nowy moduł o nazwie Funkcje i utworzyć w tym module nową funkcję o nazwie zaladowany. Treść funkcji zamieszczona została poniżej.
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.
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:
komunikat - ciąg znaków lub zmienna znakowa będąca komunikatem wyświetlanym w oknie
typ - suma wartości numerycznych określających postać okna komunikatu
wartość Znaczenie |
Ilość i rodzaje przycisków |
0 Tylko przycisk OK. |
1 Przyciski OK i Cancel. |
2 Przyciski Abort, Retry, i Ignore. |
3 Przyciski Yes, No, i Cancel buttons. |
4 Przyciski Yes i No. |
5 Przyciski Retry i Cancel. |
Typ ikony |
0 Brak ikony. |
16 Ikona STOP - komunikat krytyczny. |
32 Ostrzeżenie ze znakiem zapytania. |
48 Ostrzeżenie z wykrzyknikiem. |
64 Informacja. |
Przycisk domyślny |
0 Pierwszy przycisk jako domyślny. |
256 Drugi przycisk jako domyślny. |
512 Trzeci przycisk jako domyślny. |
tytuł - ciąg znaków lub zmienna znakowa, która będzie tytułem okna.
Funkcja MsgBox zwraca jedną z następujących wartości:
Wartość |
znaczenie - naciśnięty przycisk |
1 |
OK. |
2 |
Cancel |
3 |
Abort |
4 |
Retry |
5 |
Ignore |
6 |
Yes |
7 |
No |
ĆWICZENIE 9
Proszę zaprogramować działanie przycisków grupy opcji z formularza Panel sterowania. Zadaniem pierwszych trzech przycisków będzie zmiana etykiety znajdującej 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:
Wyświetlić formularz PANEL STEROWANIA w widoku projekt
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.
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ń"
ćwiczenie 11
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.
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.
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ę.
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
Należy zaprogramować reakcję przycisku zamykającego aplikację
Jedyną nową akcją będzie tutaj akcja Quit z argumentem A_PROMPT, wywoływana przez instrukcję DoCmd i zamykająca aplikację.
Oprócz tej akcji wykorzystamy jeszcze bezparametrową metodę SetFocus. Metoda ta ustawia fokus na danym elemencie sterującym.
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ń.
Rys. 4 Okno dialogowe Formularz: PRZEGLĄD PŁYT
Formularz PrzegląD płyt składa się z pięciu elementów sterujących:
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.
Pola listy. Pole to wyświetla (obecnie) listę wszystkich płyt, które znajdują się w katalogu.
Przycisku Zamknij formularz (przycisk został założony w standardowy sposób za pomocą Kreatora)
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ń.)
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:
Pola listy, w którym będą wyświetlane tytuły nagrań na płycie zaznaczonej w formularzu lista płyt
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.
Wyświetl arkusz właściwości pola listy Lista tytułów
Kliknij w polu właściwości Źródło wiersza
Uruchom generator i po wyświetleniu siatki projektowania zapytania, w wierszu Kryteria w kolumnie Numer kategorii wstaw jako kryterium wartość pola lista kategorii:
Formularze![przegląd płyt]![lista kategorii]
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?
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.
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.
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.
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.
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
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.
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ć?
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.
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?
Wpisz następującą procedurę:
Sub Form_Close ()
If zaladowany(„tytuły nagrań”) Then
DoCmd.Close ACFORM, „tytuły nagrań”
End If
End Sub
ć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
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?
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.
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
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:
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.
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
Po wypożyczeniu płyty lista płyt wypożyczonych przez klienta musi zostać odnowiona
Zwrot płyty przebiega w podobny sposób:
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.
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.
Ć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.
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).
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.
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).
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:
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.
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.
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.
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:
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 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 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, LastUpdated |
Data utworzenia tabeli i data ostatniej zmiany projektu tabeli. |
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ę.
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ę.
Jeśli płyta nie jest wypożyczona, to po znalezieniu rekordu, otwieramy go do edycji, wpisujemy numer klienta, zatwierdzamy zmianę i opuszczamy procedurę
Wpisz następującą procedurę:
Sub wypo_ycz_Click ()
Dim Baza As Database
Dim Plyty As Recordset
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)
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:
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
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
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
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:
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:
Uzupełnienie procedury wypożyczania o wypełnianie pól „czy zapłacone” i „nr wpłaty” w tabeli wypożyczenia.
Utworzenie relacji w bazie z udziałem nowej tabeli
Podpięcie formularza rozliczenie do przycisku Rozliczenie na formularzu rozliczenia
Zaprojektowaniu procedury rozliczającej i wyświetlającej odpowiednie dane na formularzu rozliczenia
Zaprogramowanie przycisku Rejestruj wpłatę na formularzu :Rozliczenia
ćwiczenie 34
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].
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:
Wynik ćwiczenia
ćwiczenie 36
Proszę zaprogramować działanie przycisku Rozliczanie na formularzu wypożyczalnia według następującego opisu:
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.
Opisane w poprzednich trzech punktach operacje nie wymagają wprowadzania zmian do danych.
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.
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
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
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,
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”.
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
' 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
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:
Metoda BeginTrans - służy do rozpoczęcia nowej transakcji.
Metoda CommitTrans do zatwierdzenia wszystkich zmian wprowadzonych od ostatniej metody BeginTrans
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
ćwiczenie 38
Proszę zmienić poprzednią procedurę na transakcyjną.
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:
Wyświetlać pytanie, czy użytkownik na pewno chce wprowadzić nową wartość (może nastąpił błąd podczas wpisywania ?)
Jeśli odpowiedź poprawna to powinniśmy kontynuować
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)
Wyświetlić formularz przeznaczony do wprowadzania danych do tabeli (w naszym przypadku formularz Nowy wykonawca)
Do tego formularza powinny zostać przepisane dane z pola edycji (argument procedury NoweDane)
Dalej następuje praca z formularzem (nie ma instrukcji)
Nadanie zmiennej Odpowiedz wartości DATA_ERRCONTINUE w celu zablokowania komunikatów o błędach
ćwiczenie 39
Oto treść procedury obsługującej zdarzenia „Przy wartości spoza listy”
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.
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
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
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.
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.
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.
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
Proszę wczytać bazę danych, która znajduje się w pliku muzyka6.mdb
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
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
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.
' 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:
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.
Następnie należy określić właściwości Connect i SourceTableName obiektu TabelDef.
Za pomocą metody Append kolekcji TableDefs należy obiekt utworzony w punkcie pierwszym, o właściwościach określonych w punkcie drugim dołączyć do kolekcji TableDefs.
Ćwiczenie 42
Proszę otworzyć bazę danych cwicz2.mdb i otworzyć formularz podłącz. Należy oprogramować dwa przyciski - podłącz tabelę xls i podłącz tabelę dbf.
Tekst procedury dla przycisku podłącz tabelę dbf:
Private Sub Polecenie8_Click()
Dim tab_klienci As TableDef
Set tab_klienci = CurrentDb.CreateTableDef("klienci z dbf")
tab_klienci.Connect = "dBase III;DATABASE=" & Me!katalog
tab_klienci.SourceTableName = Me!plik
CurrentDb.TableDefs.Append tab_klienci
End Sub
Tekst procedury dla przycisku podłącz tabelę xls
Private Sub Polecenie10_Click()
Dim tab_klienci As TableDef
Set tab_klienci = CurrentDb.CreateTableDef("klienci z xls")
tab_klienci.Connect = "excel 5.0;DATABASE=" & Me!katalog & "\" & Me!plik
tab_klienci.SourceTableName = "Firmy"
CurrentDb.TableDefs.Append tab_klienci
End Sub
Ćwiczenie 43
Proszę napisać procedurę zdarzenia dla przycisku Odłącz tabele.
Tekst procedury:
Private Sub Polecenie13_Click()
CurrentDb.TableDefs.Delete "klienci z xls"
CurrentDb.TableDefs.Delete "klienci z dbf"
End Sub
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:
Resume - powoduje wznowienie wykonania programu od instrukcji w której wystąpił błąd.
Resume Next - powoduje wznowienie wykonania programu od następnej instrukcji po instrukcji w której wystąpił błąd.
Resume nr_wiersza (lub etykieta) - powoduje wznowienie wykonywania programu od wiersza lub podanej etykiety.
72
73
Grupa opcji
Przycisk polecenia
Etykieta
Pole listy
Przycisk polecenia
Etykieta
2
1
3
14
5
10
11
13
12
9
8
7
6
4