MS Access 97 PL Zaawansowane techniki programowania
CENTRUM EDUKACYJNE EDUSOFT ul. Ogrodowa 46/48 00-876 Warszawa tel. (0-22) 654 55 22 fax (0-22) 654 55 23 e-mail: centrum@edusoft.pl http://www.edusoft.pl MS Access 97 PL zawansowane techniki programowania baz danych MS Access 97 zaawansowane techniki programowania baz danych SPIS TREŚCI WPROWADZENIE ...............................................................................................................................................1 OMÓWIENIE BAZY DANYCH..........................................................................................................................2 ZDARZENIA - ICH ROLA W TWORZENIU APLIKACJI ............................................................................5 USTAWIANIE SPOSOBU URUCHAMIANIA BAZY DANYCH .....................................................................................11 LISTA WYBRANYCH AKCJI..................................................................................................................................12 OBIEKTY MICROSOFT ACCESS - ICH WAAŚCIWOŚCI I METODY....................................................16 WYBRANE METODY I WAAŚCIWOŚCI NIEKTÓRYCH OBIEKTÓW. ..........................................................................18 WSTP DO JZYKA VISUAL BASIC ............................................................................................................21 PODSTAWOWE INSTRUKCJE I FUNKCJE JZYKA VISUAL BASIC...................................................24 INSTRUKCJE .......................................................................................................................................................24 FUNKCJE ............................................................................................................................................................26 PROGRAMOWANIE ZA POMOC OBIEKTÓW DOSTPU DO DANYCH (DAO)...........................................................44 PRZETWARZANIE TRANSAKCYJNE......................................................................................................................61 ZAGADNIENIA DODATKOWE.......................................................................................................................63 WYKORZYSTANIE JZYKA SQL- PRZYKAAD ......................................................................................................65 FILTROWANIE PRZEZ FORMULARZ......................................................................................................................70 PODACZANIE DANYCH Z ZEWNTRZNYCH yRÓDEA...........................................................................................72 OBSAUGA BADÓW WYKONANIA........................................................................................................................73 W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 i MS Access 97 zaawansowane techniki programowania baz danych W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 ii MS Access 97 zaawansowane techniki programowania baz danych Wprowadzenie Tematem tego szkolenia jest wprowadzenie do tworzenia aplikacji obsługujących bazy danych z wykorzystaniem języka programowania Visual Basic. W ciągu pięciu dni szkolenia uczestnicy mają za zadanie zbudować z przygotowanych obiektów (tabel, formularzy i raportów), pod kierunkiem prowadzącego zajęcia, działającą aplikację. Aplikacją tą jest Program obsługi wypo\yczalni płyt. Program ma umo\liwiać prowadzenie ewidencji płyt, listy klientów, rejestrowanie wypo\yczeń i zwrotów oraz rozliczanie klientów i księgowanie wpłat. Oprócz tego, na oddzielnych przykładach zostaną zademonstrowane zagadnienia programowania, które nie zostały ujęte w przykładowej aplikacji. Program szkolenia trwa 5 dni i wygląda następująco: 1. Pierwszy dzień obejmuje przedstawienie elementów składowych i zapoznanie z projektem aplikacji w podstawowej wersji, przedstawienie koncepcji zdarzeń i omówienie sposobów sterowania działaniem aplikacji za pomocą obsługi tych zdarzeń (procedury zdarzeń). Przedstawione zostaną typowe zdarzenia występujące w aplikacjach. Zadaniem uczestników będzie wykonanie pod kierunkiem prowadzącego ćwiczeń znajdujących się w materiałach szkoleniowych. 2. Następne dwa dni poświęcone są podstawom programowania za pomocą obiektów programu Microsoft Access. Przedstawione zostaną podstawowe instrukcje i elementy języka Visual Basic, zasady programowania oraz obiekty Microsoft Access - ich właściwości i metody. Poznawanie tych obiektów będzie przebiegało równolegle z rozbudową aplikacji zgodnie z przygotowanymi ćwiczeniami. 3. Ostatnie dwa dni przeznaczone są na przedstawienie najwa\niejszych obiektów dostępu do danych (Data Access Objects) wraz z ich strukturą, ich właściwościami, metodami i sposobami korzystania z nich. Omówione zostanie tak\e wykorzystanie języka SQL, zarządzanie dostępem do obiektów z poziomu języka, metody śledzenia i wykonywania programów. Po wykonaniu ćwiczeń z tego zakresu powstanie w pełni działająca aplikacja. UWAGA: Kurs jest podzielony na etapy. Na początku ka\dego etapu uczestnicy muszą skopiować na dysk lokalny z dysku sieciowego, z katalogu podanego przez prowadzącego, wersję bazy danych z poprzedniego dnia uzupełnioną o elementy potrzebne na ćwiczenia w danym dniu (z zało\enia uczestnicy nie tworzą formularzy, raportów, zapytań i tabel gdy\ nie jest to celem szkolenia). W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 1 MS Access 97 zaawansowane techniki programowania baz danych Omówienie bazy danych Proces tworzenia aplikacji zaczniemy od utworzenia podstawowej wersji bazy danych, której zadaniem będzie na początku przechowywanie informacji tylko o kategoriach muzycznych, wykonawcach, płytach i nagraniach na poszczególnych płytach. W skład bazy wchodzą następujące elementy: 1. Cztery tabele dotyczące informacji o płytach: " KATEGORIE_MUZYCZNE " WYKONAWCY " PLYTY " NAGRANIA " Dodatkowa tabela nie związana merytorycznie z muzyką - tabela MENU. W tej tabeli znajdują się oznaczone liczbami nazwy poleceń. Tabela ta zostanie wykorzystana do sterowania aplikacją. Polecenia podzielone zostały na trzy grupy: - KATALOG (są to polecenia oznaczone numerami od 100 do 199), - WYDRUKI (200-299) - KLIENCI (300 -399). Relacje (związki) między tabelami przedstawione zostały na poni\szym rysunku. Rys. 1 Relacje między tabelami 2. Cztery kwerendy. " Trzy z nich (KATALOG, WYDRUKI, KLIENCI) wybierają z tabeli MENU polecenia z odpowiedniej grupy, " Czwarta LISTA_PLYT - wyświetla listę płyt zarejestrowanych w bazie. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 2 MS Access 97 zaawansowane techniki programowania baz danych 3. Pięć formularzy: " LOGO - formularz będzie automatycznie wyświetlany po otwarciu bazy danych. Znajdują się na nim dwie etykiety z informacjami o aplikacji. Po upływie zadanego czasu (np. 5 sekund), lub po kliknięciu myszką w dowolnym miejscu formularza, formularz ten będzie zamykany, a po jego zamknięciu automatycznie będzie otwierany formularz PANEL STEROWANIA " PANEL - centralny formularz całej aplikacji. Jego zadaniem będzie udostępnienie u\ytkownikowi, za pośrednictwem poleceń i przycisków, wszystkich akcji niezbędnych do poprawnej pracy aplikacji. Poszczególne elementy sterujące zostały zaznaczone na rysunku i zostaną poni\ej omówione. Etykieta Grupa opcji Pole listy Etykieta Przycisk Przycisk polecenia polecenia Rys. 2 Okno dialogowe - Panel sterowania aplikacją Etykieta informuje, która grupa poleceń wyświetlana jest w polu listy poni\ej. Grupa opcji, składająca się z czterech przycisków (wartości przekazywane przez tę grupę to odpowiednio 1, 2, 3 i 4 dla kolejnych przycisków od góry). Zadaniem trzech pierwszych przycisków jest wyświetlenie w polu listy poleceń (z odpowiedniej kwerendy) oraz zmianę tytułu etykiety.. Przycisk polecenia otwiera formularz obsługi wypo\yczalni. (Formularz pojawi się w jednym z kolejnych etapów szkolenia) Pole listy, w którym po kliknięciu odpowiedniego przycisku z grupy opcji pojawi się lista poleceń z odpowiedniego zapytania. Dwukrotne kliknięcie polecenia wyświetlonego w tym polu ma spowodować wykonanie odpowiedniej akcji. Etykieta - dwukrotne kliknięcie tej etykiety powoduje wyświetlanie komunikatu z informacją o autorze. Przycisk polecenia - przycisk kończący pracę z aplikacją i programem Access. " PLYTY - Formularz zespolony przeznaczony do wyświetlania i edycji informacji o płytach. (W formularzu PLYTY umieszczony jest podformularz PLYTY_PF, w którym wyświetlane są tytuły nagrań). W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 3 MS Access 97 zaawansowane techniki programowania baz danych 2 1 3 4 6 5 7 14 8 12 13 11 10 9 Rys. 3 Okno dialogowe formularza PAYTY Elementy sterujące na formularzu PLYTY 1) Związane pole tekstowe wyświetlające numer płyty (przy dodawaniu nowego rekordu, Access powinien automatycznie proponować kolejny numer - proszę pamiętać, \e nie jest to pole typu licznik) 2) Pole kombi - pole związane z polem Numer_wykonawcy w tabeli PLYTY. W programie umo\liwimy dopisywania do listy nowych wykonawców. yródłem wiersza dla tego pola jest tabela WYKONAWCY. 3) Pole kombi - pole związane z polem Numer_kategorii w tabeli PLYTY. yródłem wiersza dla tego pola jest tabela KATEGORIE. 4) Pole tekstowe związane z polem Tytul tabeli PLYTY. 5) 6) 7) - Niezwiązane pola tekstowe, w których wyświetlane są informacje zgodnie z opisem na etykietach. 8) Grupa przycisków poleceń słu\ących do przechodzenia po rekordach. 9) Przycisk polecenia usuwający płytę z katalogu 10) Przycisk polecenia dodający nową płytę do katalogu. 11) 12) Przyciski poleceń ustawiające filtrowanie płyt na wybranego wykonawcę i wybraną kategorię muzyki. 13) Przycisk polecenia zamykający formularz W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 4 MS Access 97 zaawansowane techniki programowania baz danych 14) Podformularz Plyty_pf wyświetlający informacje o nagraniach znajdujących się na płycie (z tabeli NAGRANIA). " PLYTY PF - formularz będący częścią składową formularza zespolonego PLYTY " WYKONAWCA - formularz do edycji i wprowadzania danych o wykonawcach. ĆWICZENIE 1 1. Otwórz bazę danych, która znajduje się w pliku muzyka97_1.mdb 2. Proszę zapoznać się z relacjami, indeksami i właściwościami pól poszczególnych tabel. 3. Następnie krótko przedyskutować wady i zalety projektu a w szczególności wymuszania mechanizmów kaskadowych oraz ustawienie właściwości, wymagane dla pól kluczy obcych na Tak . ĆWICZENIE 2 Jakie znaczenie mają właściwości połączeń, ustawione w sposób przedstawiony na rysunku 1 ilustrującym relacje w bazie danych, dla tej bazy (przy istniejących w bazie właściwościach pól)? Zdarzenia - ich rola w tworzeniu aplikacji Access jest aplikacją sterowaną zdarzeniami. Co to w praktyce oznacza? Podczas pracy aplikacji dzieją się ró\ne rzeczy, u\ytkownik naciska klawisze na klawiaturze, klika myszką, wpisuje nowe wartości do pól, w bazie danych do tabel dodawane są nowe rekordy, formularze są otwierane i zamykane, raporty są formatowane itd.. Na większość tego typu zdarzeń Access potrafi reagować. Zadaniem u\ytkownika- programisty jest zaprojektowanie aplikacji w taki sposób, aby większość operacji na bazie danych wykonywana była automatycznie w odpowiedzi na zachodzące w bazie zdarzenia. Do tego celu słu\ą makra i procedury języka Visual Basic, które podłączone do właściwości zdarzeń wybranych obiektów powodują w bazie po\ądane działania. Na przykład, jeśli chcemy by po kliknięciu myszą przycisku z napisem Poka\ klientów otwierany był automatycznie formularz z listą klientów, lub po kliknięciu przycisku Zestawienie kwartalne drukowany był raport z podsumowaniem sprzeda\y za kwartał musimy sami zaprogramować reakcję programu Access na zdarzenie przy kliknięciu dla danego przycisku. Reakcję taką mo\emy uzyskać tworząc odpowiednie makro i przypisując je właściwości wybranego zdarzenia dla wybranego obiektu (formantu) lub pisząc procedurę obsługi zdarzenia. W tej części szkolenia zajmować się będziemy tworzeniem makr i przypisywaniem ich odpowiednim zdarzeniom. Poni\ej przedstawiamy niektóre typy zdarzeń według kategorii zdarzeń. UWAGA: Zdarzenia mo\na obsługiwać za pomocą makr programu Access lub za pomocą procedur języka Visual Basic. O ile przy programowaniu obsługi zdarzeń przy pomocy makr nazwy zdarzeń są polskie, o tyle w języku Visual Basic występują nazwy angielskie. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 5 MS Access 97 zaawansowane techniki programowania baz danych Zdarzenia okien - gdy u\ytkownik otwiera, zamyka lub zmienia rozmiar formularza lub raportu. Zdarzenie Opis Przy otwarciu (Open) Po otwarciu, lecz przed wyświetleniem pierwszego rekordu. Dla raportów zdarzenie to występuje przed podglądem wydruku albo przed wydrukowaniem raportu. Przy załadowaniu (Load) Zdarzenie Load występuje, gdy formularz zostaje otwarty i wyświetlane są jego rekordy Przy zmianie rozmiaru Podczas zmiany rozmiaru, lecz tak\e podczas otwarcia (Resize) formularza, czy raportu. Przy zwolnieniu (Unload) Po zamknięciu formularza, lecz przed usunięciem go z ekranu. Przy zamknięciu (Close) Po zamknięciu i usunięciu z ekranu Zdarzenia fokusu - zwrot Dany element ma fokus oznacza, \e na dany element przyjmuje ewentualne znaki wprowadzane z klawiatury (reaguje na naciśnięcia klawiszy). Zdarzenia fokusu następują, gdy element sterujący uzyskuje lub traci fokus , na przykład po naciśnięciu klawisza ENTER lub po kliknięciu myszką innego elementu. Zdarzenie Opis Przy aktywowaniu (Activate) Kiedy formularz lub raport stają się aktywne. Przy wejściu (Enter) Po aktywacji, lecz przed uzyskaniem fokusu przez element sterujący. Przy uzyskaniu fokusu (GotFocus) Kiedy formularz lub element sterujący uzyskuje fokus. Przy zakończeniu (Exit) Zanim element sterujący straci fokus. Przy utracie fokusu (LostFocus) Kiedy element sterujący straci fokus. Przy dezaktywowaniu (Deactivate) Kiedy formularz lub raport jest zamykany, ale zanim inne okno stanie się aktywne. UWAGA. Zdarzenia Activate i Deactivate występują tylko w przypadku przenoszenia fokusu w ramach aplikacji. Przenoszenie fokusu na obiekt lub z obiektu w innej aplikacji nie wyzwala \adnego z tych zdarzeń. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 6 MS Access 97 zaawansowane techniki programowania baz danych Zdarzenia danych występują, gdy dane w formularzu lub elemencie sterującym są wprowadzane, usuwane lub zmieniane oraz gdy następuje przeniesienie fokusu z rekordu do innego rekordu. Zdarzenie Opis Przed wstawieniem (BeforeInsert) Zachodzi, gdy u\ytkownik wpisze pierwszy znak w nowym rekordzie, lecz jeszcze przed utworzeniem nowego rekordu w bazie Przed aktualizacją (BeforeUpdate) Zachodzi przed aktualizacją rekordu lub zmianą danych w elemencie sterującym Po aktualizacji (AfterUdate) Zachodzi po zmianie danych w elemencie sterującym lub po aktualizacji rekordu. Po wstawieniu (AfterInstert) Zachodzi po dodaniu nowego rekordu, ale przed jego aktualizacją. Przy usunięciu (Delete) Zachodzi po naciśnięciu klawisza Delete, lub uruchomieniu polecenia usunięcia rekordu, lecz przed jego usunięciem. Przed usunięciem (BeforeDelConfirm) Po usunięciu jednego lub kilku rekordów lecz przed wyświetleniem prze Accessa komunikatu o potwierdzeniu usunięcia. Po usunięciu (AfterDelConfirm) Zachodzi, gdy u\ytkownik potwierdził usunięcie i rekordy są usuwane lub operacja jest anulowana. Przy zmianie (Change) Po zmianie zawartości pola tekstowego lub pola kombi (po wpisaniu przez u\ytkownika pierwszego znaku) Przy bie\ącym (Current) Zachodzi, gdy rekord uzyskuje fokus lub staje się bie\ącym. Pojawia się równie\ po ponowieniu zapytania zródła rekordów formularza. Przy wartości spoza listy (NotInList) Pojawi się, gdy u\ytkownik wprowadzi do pola kombi wartość, której nie ma na liście Przy aktualizacji (Updated) Zdarzenie występuje, gdy dane obiektu OLE zostały zmodyfikowane od ostatniego zapisu. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 7 MS Access 97 zaawansowane techniki programowania baz danych Zdarzenia myszy - w czasie wykonywania operacji myszą Zdarzenie Opis Przy naciśniętej myszy (MouseDown) Po naciśnięciu dowolnego przycisku myszy Przy zwolnionej myszy (MouseUp) Po zwolnieniu naciśniętego przycisku myszy Przy kliknięciu (Click) Po kliknięciu lewym przyciskiem myszy Przy kliknięciu dwukrotnym (DblClick) Po dwukrotnym kliknięciu lewym przyciskiem myszy Przy ruchu myszy (MouseMove) Po poruszeniu myszką nad elementem sterującym Zdarzenia klawiatury - gdy u\ytkownik pisze na klawiaturze lub wysyła znaki za pomocą Akcji WyślijKlawisze lub instrukcji SendKeys, gdy element sterujący lub formularz ma fokus Zdarzenie Opis Przy naciśniętym klawiszu (KeyDown) Po naciśnięciu klawisza Przy naciśnięciu klawisza (KeyPressed) Po naciśnięciu i zwolnieniu klawisza Przy zmianie (Change) Po zmianie zawartości pola tekstowego lub pola kombi (po wpisaniu przez u\ytkownika pierwszego znaku) Przy zwolnieniu klawisza (KeyUp) Po zwolnieniu klawisza Zdarzenia drukowania występują, gdy raport jest drukowany lub formatowany Zdarzenie Opis Przy formatowaniu (Format) Po określeniu, jakie dane będą w sekcji, lecz przed sformatowaniem sekcji do wydruku lub podglądu wydruku. Przy wydruku (Print) Kiedy dane w sekcji są ju\ sformatowane, lecz nie zostały jeszcze wydrukowane Przy powrocie (Retreat) Kiedy podczas formatowania Access wraca do poprzednich sekcji Przy braku danych (NoData) Po sformatowaniu do drukowania raportu, w którym nie ma danych (raport jest związany z pustym zestawem rekordów), lecz przed wydrukowaniem raportu. Zdarzenie to mo\na wykorzystać do anulowania pustego raportu. Przy stronie (Page ) Po sformatowaniu strony do drukowania, lecz przed wydrukowaniem strony. Zdarzenie to mo\na wykorzystać np. do narysowania ramki wokół strony. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 8 MS Access 97 zaawansowane techniki programowania baz danych Zdarzenie dodatkowe - Timer - (Przy cyklu czasomierza) występuje w regularnych odstępach czasu określonych we właściwości TimerInterval (Okres czasomierza) Przy programowaniu zdarzeń trzeba zwracać uwagę na dwa istotne czynniki: " Trzeba pamiętać, \e niektóre zdarzenia automatycznie pociągają za sobą wystąpienie innych. Na przykład przed zdarzeniem Dwukrotne kliknięcie (DblClick) wystąpią kolejno zdarzenia Naciśnięcie myszy (MouseDown) , Zwolnienie myszy (MouseUp) , Kliknięcie (Click) . " Wa\na jest kolejność, w jakiej zdarzenia występują po sobie. Szczegółowy opis następowania zdarzeń znajduje się w pomocy programu Access. W tym miejscu przytoczymy tylko kilka najczęściej spotykanych sytuacji: Otwieranie formularza: Otwarcie (Open) >Załadowanie(Load) >Zmiana rozmiaru (Resize) >Aktywacja(Active) > Bie\ący (Current) Zamykanie formularza :Zwolnienie (Unload) > Dezaktywacja (Deactivate) > Zamknięcie (Close) Wejście i wyjście do elementu sterującego : Wejście (Enter) > Uzyskanie fokusu (GotFocus) > Zakończenie (Exit) > Utrata fokusu (LostFocus) Zmiana tekstu w polu edycji lub w polu tekstowym : Naciśnięcie klawisza (KeyDown) >Naciśnięty klawisz (KeyPress) > Zmiana (Change) > Zwolnienie klawisza (KeyUp) Usunięcie rekordu: Przy usunięciu (Delete) >Przy bie\ącym (Current) > Przed usunięciem (BeforeDelConfirm) > Po usunięciu (AfterDelConfirm) UWAGA: W niektórych przypadkach mo\e zachodzić potrzeba anulowania zdarzenia, które uruchomiło makro lub procedurę. Mo\na to zrobić za pomocą makra, w którym wystąpi akcja AnulujZdarzenie (CancelEvent), lub za pomocą procedury zdarzenia, nadając argumentowi Cancel takiej procedury wartość True. (Tylko dla tych procedur zdarzeń, dla których argument ten występuje). Procedury zdarzeń będą omawiane w dalszej części podręcznika. Akcją AnulujZdarzenie CancelEvent mo\na anulować następujące zdarzenia: Przy zastosowaniu filtru (ApplyFilter) Przy filtrowaniu (Filter) Przed usunięciem (BeforeDelConfirm) Przed wstawieniem (BeforeInsert) Przed aktualizacją (BeforeUpdate Przy kliknięciu dwukrotnym (DblClick) Przy usunięciu (Delete) Przy zakończeniu (Exit) Przy formatowaniu (Format) Przy otwarciu (Open) Przy wydruku (Print) Przy zwolnieniu (Unload) Przy buforowaniu (Dirty) Przy braku danych (NoData) Przy naciśniętym klawiszu (KeyPress) <- dostępne tylko w makrach Przy naciśnięciu klawisza (KeyDown) <- dostępne tylko w makrach Przy naciśniętej myszy (MouseDown) <- prawy przycisk myszy tylko makra W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 9 MS Access 97 zaawansowane techniki programowania baz danych Schemat programowania obsługi zdarzeń wygląda następująco: Jeśli wystąpienie zdarzenia dla jakiegoś elementu sterującego ma skutkować wykonaniem jakiegoś działania nale\y: " Wyświetlić element sterujący w widoku projekt (na przykład przycisk na formularzu, pole tekstowe). " Zaznaczyć go klikając myszą " Wyświetlić listę właściwości danego obiektu (wybierając polecenie Widok > Właściwości) " Wybrać kategorię właściwości: Zdarzenie " Po odszukaniu właściwości wybranego zdarzenia, jako wartość właściwości nale\y: - Wybrać makro z listy utworzonych wcześniej makr (lub uruchomić generator makr by je utworzyć) lub - W polu właściwości wybrać Procedura zdarzenia, wyświetlić generator kodu i wpisać treść procedury. ZALECENIA DO ĆWICZEC: Celem poni\szych ćwiczeń jest utworzenie makr, które będą obsługiwać fragment aplikacji. Makro AutoExec ma po otwarciu bazy danych ukrywać okno bazy danych i uruchamiać formularz LOGO. Po kliknięciu tego formularza (lub po upływie czasu) formularz LOGO ma być zamykany a otwierany formularz PANEL. Działanie formularza PANEL będziemy programować ju\ w języku Visual Basic. W tej części ćwiczeń zaprogramujemy jeszcze za pomocą makr reakcję przycisków na formularzu PLYTY.. W ćwiczeniach tych wystąpią akcje: OtwórzFormularz, Zamknij, OknoKomunikatu, UruchomPolecenie. ĆWICZENIE 3 Proszę w oknie makro utworzyć makro o nazwie Logo. Zadaniem tego makra będzie wykonanie dwóch akcji: " Zamknięcie formularza LOGO (Akcja Zamknij) " Otwarcie formularza PANEL (Akcja OtwórzFormularz) ĆWICZENIE 4 1. Proszę podłączyć makro Logo do właściwości Przy kliknięciu dla sekcji szczegółów oraz dwóch etykiet znajdujących się na formularzu LOGO, 2. Makro nale\y podłączyć równie\ do właściwości całego formularza Przy cyklu czasomierza i ustawić właściwość formularza Okres czasomierza na 3 sekundy (3000). 3. Proszę otworzyć formularz LOGO w widoku Formularz i sprawdzić czy reaguje na kliknięcie i na upływ czasu. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 10 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 5 Proszę samodzielnie utworzyć i podłączyć do etykiety Informacja o autorze makro o nazwie Info. Zadaniem makra będzie wyświetlenie komunikatu z informacją o autorze - akcja uruchamiana po dwukrotnym kliknięciu etykiety. (Akcja makra OknoKomunikatu).Do zawinięcia tekstu mo\na u\yć skrótu Ctrl+Enter. ĆWICZENIE 6 1. Proszę utworzyć i podłączyć do odpowiednich zdarzeń makro grupowe o nazwie Przyciski. 2. Makro ma obsługiwać siedem przycisków znajdujących się na formularzu PLYTY, oraz sześć z formularza WYKONAWCA reagując na kliknięcie ka\dego z przycisków (dla wszystkich przycisków poleceń za wyjątkiem przycisków Wykonawcy i Kategorie . Przyciski wykonawcy i kategorie zostaną podłączone w pózniejszym czasie). 3. Makra: Pierwszy (akcja UruchomPolecenie, polecenie PrzejdzDoPierwszegoRekordu) Poprzedni (akcja UruchomPolecenie, polecenie PrzejdzDoPoprzedniegoRekordu) Następny (akcja UruchomPolecenie, polecenie PrzejdzDoNastępnegoRekordu) Ostatni (akcja UruchomPolecenie, polecenie PrzejdzDoOstatniegoRekordu) Usuń płytę (akcja UruchomPolecenie, polecenie UsuńRekord) Zamknij formularz (akcja Zamknij bez \adnych argumentów) Nowa płyta (akcja UruchomPolecenie, polecenie PrzejdzDoNowegoRekordu) 4. Proszę zaobserwować działanie przycisków Poprzedni , Następny , Nowa płyta . Z czym jest kłopot? Ustawianie sposobu uruchamiania bazy danych W poprzednich wersjach programu Access do automatycznego wykonywania pewnych działań przy uruchamianiu bazy danych słu\yło makro o nazwie AutoExec. W wersji Access 97 mo\na ustawić właściwości startowe bazy danych za pomocą polecenia Autostart z menu Narzędzia. Do wyboru są między innymi następujące opcje: " Ustawienie tytułu aplikacji " Przyporządkowanie ikony do aplikacji " Ustawienie domyślnego paska menu " Ustawienie formularza startowego. " Ukrycie okna bazy danych i paska stanu. ĆWICZENIE 7 Proszę ustawić właściwości startowe bazy danych w taki sposób, aby po uruchomieniu wyświetlany był formularz LOGO, ukrywane było okno bazy danych. Proszę ustawić tytuł aplikacji na Wypo\yczalnia, oraz dobrać dowolną ikonę dostępną w komputerze. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 11 MS Access 97 zaawansowane techniki programowania baz danych Lista wybranych akcji W poni\szej tabeli znajduje się omówienie akcji, które mo\na uruchomić za pomocą makr. UWAGA: Akcje mo\na równie\ uruchomić z poziomu kodu języka Visual Basic, z tą tylko ró\nicą, \e w języku tym nazwy akcji oraz ich argumenty są angielskojęzyczne. Z tego te\ powodu obok nazw polskich w tabeli przedstawione zostały ich angielskie odpowiedniki. Akcja Opis DodajMenu (AddMenu) Dodaje menu do własnego paska menu. Argumenty akcji: Nazwa menu, Nazwa makra menu, Tekst paska stanu ZastosujFiltr Uruchamia filtr w postaci nazwanego filtru, kwerendy lub klauzuli (ApplyFilter) WHERE języka SQL (bez słowa kluczowego WHERE). Lewa strona wyra\enia WHERE zawiera zwykle nazwę pola z tabeli podstawowej, kwerendy, formularza lub raportu. Jeśli występuje odwołanie do elementów sterujących to nazwa elementu powinna występować w pełnej składni: Formularz! [Nazwa formularza]! [Element sterujący]. Maksymalna długość klauzuli WHERE to 256 znaków. Filtr stosuje się w celu ograniczenia informacji prezentowanych w tabel, formularza lub raporcie. Sygnał Sygnał dzwiękowy z komputerowego głośnika. (Beep) AnulujZdarzenie Anuluje zdarzenie, które spowodowało uruchomienie makra. Lista (CancelEvent) zdarzeń, które mo\na anulować została przedstawiona wcześniej. Zamknij Zamyka okno otwartego obiektu określonego podanymi (Close) argumentami. Jeśli nie zostaną podane \adne argumenty, Access zamyka aktywne okno, a przy braku aktywnego okna zamyka bazę danych. Mo\na wskazać czy przy zamknięciu obiektu mają być zachowane dokonane zmiany, czy nie. KopiujObiekt Kopiuje wybrany obiekt do innej bazy Microsoft Access lub do tej samej bazy pod inną nazwą. (CopyObject) UsuńObiekt Usuwa wybrany obiekt z bazy danych. (DeleteObject) UruchomPolecenie Wykonuje wybrane polecenie menu. Polecenie musi mieć sens dla obiektu. Na przykład nie mo\na wykonać poleceń z menu Rekordy, (RunCommand) jeśli obiekt wyświetlany jest w momencie uruchomienia makra w widoku projekt . Na liście Polecenia dostępnych jest ponad 300 wbudowanych poleceń programu MS Access. Echo Włącza lub wyłącza odświe\anie ekranu. Drugi parametr zawiera tekst paska stanu. Akcja Echo występuje zwykle w połączeniu z (Echo) akcją Klepsydra. ZnajdzNastępny Znajduje następny rekord spełniający warunki określone w ostatnim wywołaniu akcji ZnajdzRekord. (FindNext) W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 12 MS Access 97 zaawansowane techniki programowania baz danych Akcja Opis ZnajdzRekord Wyszukuje rekord spełniający warunki określone argumentami. Argumenty są takie same, jak argumenty w polu dialogu (FindRecord) wyświetlanego z menu poleceniem Edycja > Znajdz IdzDoFormantu Akcja przenosząca fokus do elementu sterującego aktywnym formularzu. Jako argument nale\y podać nazwę elementu. Mo\na (GoToControl) przenieść fokus tylko do tych elementów, które mogą go mieć. Akcja dotyczy równie\ pól w tabeli, czy kwerendzie. IdzDoStrony Akcja przenosi fokus do pierwszego elementu sterującego na podanej stronie aktywnego formularza. (GoToPage) IdzDoRekordu Akcja ustawia podany rekord jako rekord bie\ący tabeli, formularza lub kwerendy. Jeśli jako argument rekord wybrana (GoToRecord) została wartość Poprzedni lub Następny to argument Skok precyzuje o ile rekordów zostanie przesunięty nowy bie\ący rekord względem aktualnego. Jeśli argumentem jest IdzDo to rekordem bie\ącym będzie rekord o numerze podanym w argumencie Skok. Klepsydra Zmienia wskaznik myszy na klepsydrę podczas wykonywania makra. Akcja wykorzystywana zwykle w połączeniu akcją Echo (Hourglass) Maksymalizuj Powiększa aktywne okno na cały ekran (Maximize) Minimalizuj Zwija aktywne okno do ikony (Minimize) RuchRozmiar Przesuwa lub zmienia rozmiary aktywnego okna. (MoveSize) OknoKomunikatu Wyświetla okno z komunikatem lub ostrze\eniem. U\ytkownik mo\e wybrać typ komunikatu, tekst komunikatu, tytuł okna i (MsgBox) zdecydować czy będzie sygnał dzwiękowy OtwórzFormularz Otwiera formularz w widoku formularz, arkusz danych, podgląd wydruku lub projekt. Za pomocą argumentów akcji mo\na ustawić (OpenForm) filtr dla formularza lub klauzulę. Tryby otwarcia formularza to: Dodawanie, Edycja, Tylko do odczytu. OtwórzModuł Otwiera wybrany moduł w widoku projekt podanej procedury (OpenModule) OtwórzKwerendę Uruchamia kwerendę w jednym z trzech widoków (projekt, arkusz danych, podgląd wydruku). (OpenQuery) OtwórzRaport Otwiera wybrany raport w widoku projekt lub podgląd wydruku, albo wysyła raport do wydruku (widok wydruk). Dla raportu (OpenReport) mo\na określić filtr lub klauzulę WHERE. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 13 MS Access 97 zaawansowane techniki programowania baz danych Akcja Opis OtwórzTabelę Otwiera wybraną tabelę w jednym z trzech widoków (projekt, arkusz danych, podgląd wydruku) (OpenTable) WyprowadzDo Wysyła dane z wybranego obiektu bazy danych do osobnego pliku. Mo\e to być plik tekstowy txt, plik w formacie arkusza Excela xls, (OutputTo) plik formatu rich-text rtf, plik formatu html, plik Internet Information Serwera idc lub htx, albo plik Active Serwera asp. Wydruk Drukuje aktywny obiekt bazy danych. Mo\na wybrać zakres wydruku, numery stron, jakość i sortowane kopii. (PrintOut) Zakończ Kończy pracę programu MS Access. Mo\liwe są trzy ustawienia argumentu Opcje: Zapisz wszystkie, Potwierdzaj i Zakończ. Ta (Quit) ostatnia opcja powoduje zakończenie pracy bez zachowywania zmian. ZmieńNazwę Zmienia nazwę wybranego obiektu. Obiekt musi być zamknięty. (Rename) Odświe\Obiekt Wymusza natychmiastowe zakończenie rozpoczętych aktualizacji ekranu i przeliczania elementów sterujących na aktywnym (RepaintObject) formularzu PonówKwerendę Aktualizuje dane zródłowe formantu lub, jeśli aktywny jest formularz to formularza przez ponowne wykonanie kwerendy. (Requery) U\ywane do aktualizacji zawartości pól list, pól kombi i formularzy. Przywróć Przywraca poprzednie rozmiary okna zwiniętego do ikony lub rozwiniętego na cały ekran. Akcja bez parametrów, działa na (Restore) aktywnym oknie. UruchomAplikację Uruchamia aplikację (nale\y podać nazwę pliku wykonywalnego wraz ze ście\ką dostępu), po uruchomieniu aplikacji aplikacja (RunApp) działa na pierwszym planie, a makro kontynuuje działanie. Uruchom kod Wywołuje funkcję języka Visual Basic (RunCode) UruchomMakro Podajemy nazwę makra. Mo\na jako argumenty podać liczbę powtórzeń oraz wyra\enie, które gdy stanie się fałszywe, zatrzyma (RunMacro) działanie makra. UruchomSQL Uruchamia instrukcję SQL będącą kwerendą funkcjonalną, czyli modyfikującą dane, lub kwerendą definiującą dane. Mo\na (RunSQL) uruchomić polecenie SQL u\ywając przetwarzania transakcyjnego, które dokładniej zostanie omówione w dalszej części podręcznika. Max długość instrukcji SQL to 255 znaków. śeby uruchomić dłu\szą instrukcję nale\y u\yć akcji OtwórzKwerendę. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 14 MS Access 97 zaawansowane techniki programowania baz danych Akcja Opis WybierzObiekt Jeśli trzeci argument w oknie bazy danych ustawiony jest na NIE, wybiera otwarty obiekt o podanej nazwie i typie. Jeśli trzeci (SelectObject) argument w oknie bazy danych ustawiony jest na TAK, ustawia się na nazwie wybranego obiektu w oknie bazy danych. Jeśli baza danych była ukryta to automatycznie jest odkrywana (dotyczy tylko opcji TAK) U\yteczna technika, je\eli chcemy wyświetli ukryte okno bazy danych! WyślijKlawisze Wysyła podane jako argument klawisze (symulacja pracy na klawiaturze) (SendKeys) WyślijObiekt Dołącza arkusz, formularz, raport lub moduł do listu poczty elektronicznej. Argument Czekaj=Tak wstrzymuje dalsze (SendObject) instrukcje makra do zakończenia symulacji. UstawWartość UstawWartość bardzo często wykorzystywana akcja za pomocą której mo\na zmienić wartość samego elementu sterującego lub (SetValue) wartość wybranej właściwości tego elementu. Z akcji tej będziemy bardzo często korzystać w języku Visual Basic. UstawOstrze\enie Włącza lub wyłącza wyświetlanie komunikatów systemowych. Powoduje zablokowanie wyświetlania komunikatów modalnych w (SetWarnings) czasie wykonywania makra. Nie blokuje jednak wyświetlania komunikatów o błędach wykonania ani pól dialogowych, jeśli wymaga tego makro. Poka\WszystkieRekordy Usuwa filtr ustawiony dla tabeli formularza, lub kwerendy i wyświetla wszystkie rekordy (ShowAllRecords) Poka\PasekNarzędzi Wyświetla lub ukrywa wbudowane paski narzędzi lub niestandardowe paski narzędzi utworzone przez u\ytkownika. (ShowToolbar) ZatrzymajWszystkie Zatrzymuje działanie wszystkich aktualnie działających makr. Makra (StopAllMacros) ZatrzymajMakro Zatrzymuje działające makro. (StopMacro) TransportBazyDanych Importuje, eksportuje lub dołącza obiekty z i do innych baz danych. (TransferDatabase) TransportArkusza Importuje lub eksportuje dane z lub do arkusza kalkulacyjnego Excela, lub Lotusa. (TransferSpreadsheet) TransportTekstu Importuje lub eksportuje dane do plików tekstowych. (TransferText) W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 15 MS Access 97 zaawansowane techniki programowania baz danych Akcja Opis Zapisz Akcji Zapisz mo\na u\yć do zapisania określonego obiektu programu Microsoft Access lub obiektu aktywnego, jeśli \aden (Save) obiekt nie jest określony. Mo\na w niektórych przypadkach tak\e zapisać obiekt aktywny pod nową nazwą (działa to tak samo jak polecenie Zapisz jako z menu Plik). UstawElementMenu Akcji UstawElementMenu mo\na u\yć do ustawienia stanu elementów menu (włączone lub wyłączone, zaznaczone lub nie (SetMenuItem zaznaczone) na niestandardowym pasku menu lub globalnym pasku menu aktywnego okna. Obiekty Microsoft Access - ich właściwości i metody Baza danych składa się z dwóch ró\nych rodzajów obiektów. Pierwszy rodzaj obiektów to obiekty Microsoft Access. Drugi rodzaj to obiekty dostępu do danych (DAO, Data Access Object). W tej części szkolenia będziemy się zajmować obiektami Microsoft Access. Ka\dy obiekt ma swoje właściwości (w przypadku formularzy, raportów i formantów listę właściwości obiektu mo\na wyświetlić otwierając obiekt w widoku Projekt i wybierając polecenie Widok > Właściwości, lub wybierając nazwę obiektu w Konstruktorze wyra\eń). Ustawienia właściwości obiektów mo\na odczytywać a tak\e zmieniać (ustawiać) podczas pracy aplikacji. Oprócz właściwości obiekty mają swoje metody. Metody są to operacje (działania), które mo\na na obiektach wykonywać. Na przykład jedną z metod obiektu typu formularz jest metoda Requery (PonówKwerendę). Metoda ta powoduje ponowne wykonanie kwerendy dla zródła rekordów formularza. Otwarte obiekty typu formularz tworzą razem Kolekcję Formularzy (Forms), która sama w sobie jest obiektem, podobnie otwarte obiekty typu raport tworzą kolekcję raportów, która tak\e jest obiektem. Poniewa\ kolekcja formularzy i kolekcja raportów same w sobie równie\ są obiektami mają więc swoje właściwości. Obiekty z kolekcji formularzy lub z kolekcji raportów numerowane są od 0 zgodnie z kolejnością otwarcia. Hierarchia obiektów wygląda następująco: " Na szczycie hierarchii znajduje się obiekt Application (Aplikacja). Obiekt Aplikacja określa całą aplikację Microsoft Access. Obiektu tego u\ywamy jeśli chcemy zastosować metodę do całej aplikacji lub ustawić właściwości całej aplikacji. Na przykład za pomocą właściwości MenuBar mo\na ustawić dostosowany pasek menu dla całej aplikacji. U\ywając do całej aplikacji metody SetOption mo\na ustawić parametry aplikacji z okna dialogowego Narzędzia > Opcje " Obiekt Application zawiera w sobie wiele ró\nych kolekcji i obiektów np. kolekcję Forms obiektów typu Formularz, kolekcję Reports obiektów typu Raport, Kolekcję Modules obiektów typu Moduł, oraz obiekty: Screen, DoCmd i inne dostępne w pomocy pod hasłem Microsoft Access Objects W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 16 MS Access 97 zaawansowane techniki programowania baz danych " W skład obiektów typu Report i Form wchodzą kolekcje Controls obiektów typu Formant (element sterujący). Do obiektu, który nale\y do kolekcji formularzy mo\na odwoływać się na trzy sposoby: Forms![nazwa formularza] Forms( Nazwa formularza ) Forms(numer formularza) Do raportów odwołujemy się w podobny sposób: Reports![Nazwa raportu] Reports( Nazwa raportu ) Reports(numer raportu) Do elementów sterujących (formantów) na formularzach i raportach odwołujemy się jak na poni\szych przykładach u\ywając jako nazwy kolekcji odpowiednio Forms lub Reports: Nazwa_kolekcji![nazwa formularza]![nazwa elementu sterującego] Do właściwości obiektów odwołujemy się za pomocą kropki i nazwy właściwości: Nazwa_kolekcji![nazwa formularza].właściwość Nazwa_kolekcji![nazwa formularza]![nazwa elementu sterującego].właściwość Metody obiektów wywołujemy w następujący sposób (przykład) Nazwa_kolekcji![nazwa formularza].metoda argument1, argument2 itd... Nazwa_kolekcji![nazwa formularza]![nazwa elementu sterującego].metoda argument1, _ argument2 UWAGA: Nie wszystkie metody wymagają podawania argumentów. UWAGA: Argumenty umieszczamy w nawiasach po nazwie metody wtedy, gdy metoda zwraca wynik. Jeśli tylko wykonuje działanie na obiekcie, to nawiasy są niepotrzebne. Właściwości obiektów ustawiamy w następujący sposób Nazwa kolekcji![Nazwa formularza]![Nazwa elementu sterującego].Właściwość = _ nowa wartość Przykład: Forms![mój formularz]![przycisk rejestruj].Visible = False Szczegółowy opis wszystkich metod i właściwości poszczególnych obiektów znajduje się w pomocy w tematach Objects i Properties. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 17 MS Access 97 zaawansowane techniki programowania baz danych Wybrane metody i właściwości niektórych obiektów. Obiekt Aplikacja wybrane metody Echo Składnia Aplikacja.Echo echoon, [tekst_paska_stanu]. Włącza (echoon = True) lub wyłącza (echoon = False) odświe\anie ekranu. GetOption, SetOption Aplikacja.GetOption(nazwa_opcji) Aplikacja.SetOption nazwa_opcji, ustawienie Akcja ta ustawia lub odczytuje wartości opcji, które mo\na ustawić dla aplikacji z okna bazy danych poleceniem Narzędzia > Opcje. Opcje podzielone są na kilka grup: Widok, Ogólne, Edytowanie/Znajdowanie, Klawiatura, Arkusz_Danych, Tabele/Kwerendy, Formularze/Raporty, Zaawansowane. Quit Aplikacja.Quit [argument] Akcja kończy pracę z programem Access. Jako argument mogą wystąpić następujące stałe predefiniowane: AcQuitPrompt Access zapyta o zachowanie wszystkich nie zachowanych obiektów. acQuitSaveAll zachowuje wszystkie nie zachowane obiekty bez zadawania pytań. AcQuitSaveNone kończy pracę bez zachowywania zmian w obiektach. Obiekt Aplikacja - właściwości CurrentObjectName Zwraca nazwę aktywnego obiektu CurrentObjectType Zwraca typ aktywnego obiektu (np. acTable, acQuery) MenuBar Umo\liwia ustawienie makra paska menu, który mo\na np. włączyć dla całej aplikacji, formularza czy raportu. Obiekt Formularz - metody GoToPage Przenosi fokus do pierwszego elementu sterującego na podanej stronie formularza. Recalc Natychmiast aktualizuje wszystkie obliczane elementy sterujące na formularzu Refresh Natychmiast aktualizuje rekordy zródła danych formularza, jeśli inni u\ytkownicy lub sam u\ytkownik wprowadzał do tabel jakieś zmiany. (Patrz Requery) W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 18 MS Access 97 zaawansowane techniki programowania baz danych Repaint Wymusza natychmiastową aktualizację ekranu (wraz ze wszystkimi przeliczeniami elementów sterujących). Przydatne jeśli Access czeka z odświe\eniem ekranu na wykonanie jakichś operacji. Requery Odświe\a dane zró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 zródłem formularza. Obiekty typu RecordSet będą omawiane w części szkolenia poświęconej obiektom DAO. Teraz tylko przykład wywołania obiektu RecordSetClone : Dim ListSet As Recordset. Set ListSet = Forms![Orders].RecordsetClone Określa tabelę, zapytanie lub instrukcję SQL, będącą zródłem RecordSource danych dla formularza. Wartość tej właściwości jest ciągiem znaków Obiekt Screen nie zawiera metod Obiekt Screen - właściwości ActiveControl Właściwość reprezentuje element sterujący, który ma fokus. Przykładowe wykorzystanie: Set ElSter = Screen.ActiveControl nazwa = ElSter.Name Jeśli \aden element sterujący nie ma fokusu wystąpi błąd. ActiveForm Reprezentuje formularz, który ma fokus. Uwaga jak poprzednio. ActiveReport Reprezentuje raport, który ma fokus. Uwaga o błędzie jak w poprzednich właściwościach PreviousControl Reprezentuje element sterujący, który jako poprzedni miał fokus . W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 19 MS Access 97 zaawansowane techniki programowania baz danych Obiekt Raport - metody Circle Rysuje w obiekcie typu Raport, okrąg, elipsę lub łuk. Line Rysuje linię. Print Drukuje w obiekcie typu Raport podany tekst bie\ącą czcionką. PSet Ustawia kolor wybranego punktu w raporcie Scale Definiuje skalę u\ytkownika dla obiektu typu Raport (standardowa skala to 1/1440 cala) TextHeight Zwraca wysokość podanego w metodzie tekstu, przy u\yciu bie\ącej czcionki TextWidth Zwraca szerokość tekstu, przy u\yciu bie\ącej czcionki. Właściwości obiektu Raport pominiemy Obiekt typu formant - metody ItemData Zwraca dane z kolumny związanej dla podanego wiersza. Metoda dotyczy tylko pól list i pól kombi Requery Aktualizuje dane przez ponowne wykonanie kwerendy, lub kodu SQL SetFocus Przenosi fokus do podanego elementu sterującego. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 20 MS Access 97 zaawansowane techniki programowania baz danych Wstęp do języka Visual Basic. W programie Microsoft Access dla Windows 95 (wersja 7) język Access Basic, u\ywany w wersjach 1 i 2 programu Microsoft Access, został zastąpiony przez język Visual Basic for Applications. Pod wieloma względami język Visual Basic jest identyczny z językiem Access Basic, a program Microsoft Access automatycznie wykonuje większość niezbędnych konwersji kodu podczas konwersji bazy danych. Visual Basic jest zwykłym językiem programowania, którego instrukcje przypominają instrukcje znane z innych języków. Za pomocą procedur napisanych w tym języku i podłączonych do właściwości zdarzeń mo\na programować reakcje aplikacji na zachodzące w niej zdarzenia. W ostatnich latach Visual Basic stał się wspólnym językiem programowania dla aplikacji z rodziny Microsoft Office, w tym Accessa, Excela, Worda, PowerPointa. Jeden język ułatwia integrację obiektów pomiędzy ró\nymi aplikacjami i automatyzuje obiekty ActiveX. Wszystkie procedury i funkcje przechowywane są w modułach. Moduły mogą być tworzone niezale\nie z okna bazy danych na karcie moduły. Jednak wa\niejszą rolę pełnią moduły formularzy i raportów. W tych modułach (po jednym module dla ka\dego raportu i formularza) Access przechowuje procedury zdarzeń obsługujące zdarzenia wszystkich elementów sterujących danego raportu lub formularza. W programie Microsoft Access 97 są dwa typy modułów: moduły standardowe i moduły klas. W uproszczeniu wygląda to tak, \e moduł klasy związany jest z formularzem lub raportem, natomiast moduł standardowy, zawiera funkcje i procedury ogólnodostępne, z ka\dego innego modułu. Chocia\ nie jest to objęte programem tego szkolenia, wypada jednak wspomnieć \e od wersji 97 programu Access mo\na tworzyć moduły klas na karcie Moduły w oknie Bazy Danych jako samodzielny moduł zawierający definicje niestandardowych obiektów aplikacji. Kiedy powinno się u\ywać obsługi zdarzeń w języku Visual Basic (kiedy nie wystarczy samo projektowanie za pomocą makr)? " VB jest elastyczniejszy i wydajniejszy od makr a kod bardziej czytelny i szybszy. " VB posiada mo\liwość szczegółowej obsługi błędów. " VB umo\liwia tworzenie własnych funkcji. " VB obsługuje procedury przekazujące i przyjmujące parametry. " VB umo\liwia tworzenie nowych obiektów za pomocą kodu. " VB umo\liwia interakcję z innymi programami systemu Windows. " VB umo\liwia tworzenie własnych bibliotek. W zasadzie mo\na powiedzieć, \e tworzenie powa\niejszych aplikacji bez programowania w języku Visual Basic nie bardzo ma sens. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 21 MS Access 97 zaawansowane techniki programowania baz danych Budowa modułów Ka\dy moduł składa się z sekcji deklaracji, z sekcji procedur i funkcji. W sekcji deklaracji modułu mo\na umieszczać deklaracje stałych i zmiennych obowiązujących w całym module. Deklaracja zmiennych wygląda następująco: Dim zmienna1 As typ1, zmienna2 As typ2, .... Deklaracja stałych wygląda następująco: Const stała1 = wartość1, stała2 = wartość2, itd... Typy zmiennych w języku Visual Basic ró\nią się nieznacznie od typów deklarowanych dla wartości pól tabel. Poni\ej w tabeli przedstawiamy odpowiedniki typów między Accessem a językiem Visual Basic: Odpowiedniki typów danych Access <=> Visual Basic typ pól programu Access typ Visual Basic Autonumer Long Waluta Currency Data/godzina Date Memo String Liczba (bajt) Byte Liczba (całkowita) Integer Liczba (całkowita długa) Long Liczba (pojedyncza precyzja Single Liczba (podwójna precyzja) Double Obiekt OLE String Tekst String Tak/Nie Boolean Hiperłącze String Oprócz typów podanych w tablicy, w języku Visual Basic mogą występować typy definiowane przez u\ytkownika, oraz typ Variant. Zmienne tego typu mogą przechowywać wartości wszystkich pozostałych typów i jednej zmiennej mo\na przypisywać w dowolnym momencie daną dowolnego typu. Zmienne typu Variant jako jedyne mogą przyjmować wartość Empty (pusty). W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 22 MS Access 97 zaawansowane techniki programowania baz danych Deklaracja procedury wygląda następująco: Sub Nazwa_procedury (arg1, arg2, .....) deklaracje zmiennych lub stałych ..... instrukcje ..... End Sub Deklaracja funkcji wygląda następująco (w treści funkcji musi wystąpić przyrównanie nazwy funkcji jakiejś wartości albo wyra\eniu - w przykładzie podkreślone - jest to miejsce w którym funkcja uzyskuje wartość) Function Nazwa_funkcji (argument1, argument2, ...) As zwracany_typ_danych deklaracje zmiennych lub stałych .... .... instrukcje Nazwa_funkcji = wyra\enie ... End Function UWAGA: Argumenty funkcji i procedur, deklarowane w nagłówku domyślnie przekazywane są przez zmienną. Jeśli chcemy przekazywać je przez wartość nale\y argument poprzedzić zwrotem ByVal. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 23 MS Access 97 zaawansowane techniki programowania baz danych Podstawowe instrukcje i funkcje języka Visual Basic Instrukcje Do u\yteczniejszych instrukcji strukturalnych nale\ą: Select Case: Składnia Select Case wyra\enie tekstowe lub liczbowe Case wartość lub wyra\enie1 instrukcje Case wartość lub wyra\enie2 instrukcje Case wartość lub wyra\enie3 instrukcje Case Else instrukcje End Select Jeśli wyra\enie ma wartość jedną z podanych w instrukcjach Case to wykonywane są instrukcje od tej instrukcji Case do następnej. Jeśli \adna z podanych wartości nie odpowiada wartości wyra\enia to wykonywane są instrukcje po słowie Case Else If Składnia If wyra\enie Then instrukcje1 Else instrukcje2 End If Jeśli wyra\enie jest prawdziwe to wykonywana jest pierwsza grupa instrukcji, jeśli wyra\enie jest fałszywe to druga grupa instrukcji. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 24 MS Access 97 zaawansowane techniki programowania baz danych Pętla For Składnia For licznik = wartość_początkowa To wartość_końcowa .... instrukcje ..... Next Instrukcje znajdujące się w pętli wykonywane są do czasu a\ licznik osiągnie wartość końcową. Pętla Do ... Loop Składnia 1 Do ... instrukcje ... Loop Until warunek Instrukcje w tej pętli wykonywane są tak długo, jak długo warunek nie jest spełniony. W tej składni wykonywane są przynajmniej jeden raz niezale\nie od warunku. Składnia 2 Do Until warunek ... instrukcje ... Loop Instrukcje w tej pętli wykonywane są tak długo, jak długo warunek nie jest spełniony. Jednak jeśli warunek jest spełniony przy wchodzeniu do pętli to instrukcje nie będą wykonane ani razu. Są jeszcze dwie składnie pętli Do...Loop, w których pętla działa tak długo jak długo warunek jest spełniony. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 25 MS Access 97 zaawansowane techniki programowania baz danych Funkcje Oprócz instrukcji w kodzie języka Visual Basic mogą wystąpić wywołania funkcji. Mogą to być funkcje własne u\ytkownika, przechowywane w modułach globalnych lub bibliotekach (zagadnienie tworzenia bibliotek nie jest objęte programem szkolenia), oraz funkcje wbudowane. Język Visual Basic dostarcza u\ytkownikowi ponad 100 ró\nego rodzaju funkcji. Szczegółowy opis wszystkich funkcji znajduje się w dokumentacji programu, w tym materiale szkoleniowym podamy tylko listę wybranych funkcji z podziałem na kategorie. Sterowanie programem Opis Funkcja lub instrukcja Tworzenie pętli Do...Loop, Exit Do, Exit For, For...Next, On...GoTo Wyjście z programu lub End, Stop zatrzymanie programu Obsługa błędów On Error, Resume, Resume Next Podejmowanie decyzji Choose, If...Then...Else, If Then, Select Case Konwersja Opis Funkcja lub instrukcja Zamiana wartości ANSI na ciąg Chr znaków Ciąg znaków na wartość ANSI Asc Liczba na ciąg znaków Format, Str Ciąg znaków na liczbę Val Zmiana jednego typu liczbowego Cbool, Cbyte, CCur, Cdate, CDbl, CDec, CInt, CLng, na inny CSng, CStr, CVar, Zamiana liczb dziesiętnych na inny Hex, Oct format Zamiana daty na liczbę Day, Month, Weekday, Year Zamiana czasu na liczbę Hour, Minute, Now, Second Zamiana serii liczb na datę lub DateSerial, TimeSerial godzinę Zamiana ciągu znaków na datę lub DataValue, TimeValue godzinę W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 26 MS Access 97 zaawansowane techniki programowania baz danych Data/Godzina Opis Funkcja lub instrukcja Bie\ąca data lub godzina Date, Now, Time Ustawienie daty lub godziny Date, Time Działania na datach DateAdd, DateDiff, DatePart Funkcje domeny Opis Funkcja lub instrukcja Funkcje agregujące DAvg, DCount, DFirst, DLast, DMin, DMax, DStDev, DStDevP, Dsum, DVar, DvarP Wyszukiwanie wartości w domenie Dlookup Funkcje - Dynamic Data Exchange (DDE) Opis Funkcja lub instrukcja U\ycie języka Visual Basic jako klienta DDE DDEExecute, DDEInitiate Wysłanie danych z Visual Basica do serwera DDE DDEPoke, DDESend U\ycie VB do pobrania danych z serwera DDE DDE, DDERequest Zakończenie wymiany DDE DDETerminate, DDETerminateAll Obsługa błędów Opis Funkcja lub instrukcja Przechwycenie błędu podczas wykonywania On Error, Resume procedury Dane o statusie błędu Err, Erl Komunikat o błędzie Funkcja Error Symulacja błędu w czasie wykonania Instrukcja Error Funkcje Wejścia /Wyjścia (I/O) Opis Funkcja lub procedura Utworzenie lub otwarcie pliku Open Zamknięcie pliku Close, Reset Zapis do pliku Print #, Put, Write # W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 27 MS Access 97 zaawansowane techniki programowania baz danych Sterowanie formatem danych Spc, Tab, Width # wyjściowych Czytanie z pliku Get, Input, Input #, Line Input # Pobranie informacji o pliku EOF, FileAttr, FreeFile, Loc, LOF, Seek Ustawienie lub określenie pozycji Seek w pliku dla operacji typu odczyt/zapis Zarządzanie napędami ChDir, ChDrive, CurDir, MkDir, RmDir dyskowymi i katalogami 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 VarType zmiennej typu Variant Matematyczne Opis Funkcja Funkcje ogólne Exp, Log, Sqr Funkcje trygonometryczne Atn, Cos, Sin, Tan, Derived Math Functions Część całkowita liczby Nit, Ix Wartość bezwzględna liczby Bas Znak liczby Sygn. Generowanie liczb pseudolosowych Randomize, Rnd W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 28 MS Access 97 zaawansowane techniki programowania baz danych Ró\ne Opis Funkcja Uruchomienie innej aplikacji AppActivate, Shell Wyświetlenie okna dialogu InputBox, MsgBox Symulacja klawiatury SendKeys Pobranie argumentów z linii poleceń Command Wyszukiwanie zmiennych środowiskowych Environ Nazwa bie\ącego u\ytkownika CurrentUser Dzwięk z głośniczka Beep Wykonanie akcji Microsoft Access DoCmd SQL Opis Funkcja Funkcje agregujące SQL Avg, Count, First, Last, Min, Max, StDev, StDevP, Sum, Var Ciągi znaków Opis Funkcja Formatowanie ciągu znaków Format Wartości ANSI Asc, Chr Operacje na ciągach znaków InStr, Left, LTrim, Mid, Right, RTrim, Trim Zmiana liter z du\ych na małe i odwrotnie LCase, Ucase Wyrównane ciągu znaków LSet, Rset Długość ciągu znaków Len Porównywanie dwóch ciągów znaków StrComp Deklaracja sposobu porównywania ciągów Option Compare znaków W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 29 MS Access 97 zaawansowane techniki programowania baz danych Oprócz instrukcji w kodzie procedur i funkcji mogą wystąpić wywołania obiektów, ich właściwości i metod w opisany poprzednio sposób, oraz funkcje i procedury utworzone w modułach lub funkcje i procedury wbudowane (lista znajduje się w generatorze). ZALECENIA DO ĆWICZEC Korzystanie z języka Visual Basic rozpoczniemy od utworzenia nowego modułu o nazwie FUNKCJE i utworzenie w tym module funkcji o nazwie Zaladowany(nazwaFormularza). Funkcja będzie sprawdzała czy formularz o nazwie podanej jako argument funkcji jest otwarty. Jeśli jest zwracana będzie przez funkcję wartość True, jeśli nie jest otwarty to False. Do ćwiczeń nale\y otworzyć plik o nazwie Muzyka97_2.mdb. ĆWICZENIE 8 1. Proszę utworzyć nowy moduł o nazwie FUNKCJE i utworzyć w tym module nową funkcję o nazwie ZALADOWANY. Treść funkcji zamieszczona została poni\ej. 2. Funkcja działa w sposób następujący: " Deklarowana jest zmienna typu Integer " Następuje nadanie funkcji wartości False " W pętli następuje przeglądanie kolejnych formularzy z kolekcji otwartych formularzy i następuje sprawdzenie czy właściwość Formname formularza jest równa nazwie szukanego formularza przekazanej jako argument. Jeśli nazwa odpowiada szukanej nazwie następuje przypisanie funkcji wartości True i zakończenie wykonywania. " Jako wartość końcowa występuje wartość właściwości Count kolekcji Forms. Właściwość Count kolekcji podaje liczbę obiektów znajdujących się w kolekcji. 3. Oto Kod funkcji: Public Function zaladowany(MojFormularz As String) As Boolean Dim i As Integer zaladowany = False For i = 0 To Forms.Count - 1 If Forms(i).FormName = MojFormularz Then zaladowany = True Exit Function End If Next End Function W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 30 MS Access 97 zaawansowane techniki programowania baz danych Do następnego ćwiczenia potrzebna będzie znajomość funkcji MsgBox i obiektu DoCmd. Obiekt DoCmd słu\y do wykonywania w języku Visual Basic akcji, które mo\na wykonać za pomocą makr. Lista akcji podana została w części poświęconej makrom. Proszę pamiętać, \e nale\y podawać angielskie nazwy akcji. Składnia: DoCmd.NazwaAkcji argument1, argument2, ..... Funkcja MsgBox wyświetla okno komunikatu z określonymi przyciskami i zwraca wartość w zale\ności od wybranego przycisku. Składnia MsgBox( komunikat , typ , tytuł) komunikat - ciąg znaków lub zmienna znakowa wyświetlana w oknie dialogowym. typ - suma wartości numerycznych określających postać okna komunikatu Wartość Odpowiednik VB Znaczenie Ilość i rodzaje przycisków 0 VbOKOnly Tylko przycisk OK. 1 VbOKCancel Przyciski OK i Cancel. 2 VbAbortRetryIgnore Przyciski Abort, Retry i Ignore. 3 VbYesNoCancel Przyciski Yes, No, i Cancel buttons. 4 VbYesNo Przyciski Yes i No. 5 VbRetryCancel Przyciski Retry i Cancel. Typ ikony 0 VbApplicationModal Brak ikony. Okno modalne dla aplikacji 16 VbCritical Ikona STOP - komunikat krytyczny. 32 VbQuestion Ostrze\enie ze znakiem zapytania. 48 VbExclamation Ostrze\enie z wykrzyknikiem. 64 VbInformation Informacja. Przycisk domyślny 0 VbDefaultButton1 Pierwszy przycisk jako domyślny. 256 VbDefaultButton2 Drugi przycisk jako domyślny. 512 vbDefaultButton3 Trzeci przycisk jako domyślny. 768 vbDefaultButton4 Czwarty przycisk jako domyślny. tytuł - ciąg znaków lub zmienna znakowa, która będzie tytułem okna. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 31 MS Access 97 zaawansowane techniki programowania baz danych Funkcja MsgBox zwraca jedną z następujących wartości: Wartość Odpowiedniki VB Znaczenie 1 VbOK Naciśnięto przycisk OK. 2 VbCancel Naciśnięto przycisk Cancel 3 VbAbort Naciśnięto przycisk Abort 4 VbRetry Naciśnięto przycisk Retry 5 VbIgnore Naciśnięto przycisk Ignore 6 VbYes Naciśnięto przycisk Yes 7 VbNo Naciśnięto przycisk No ĆWICZENIE 9 Proszę zaprogramować działanie przycisków grupy opcji z formularza PANEL. Zadaniem pierwszych trzech przycisków będzie zmiana etykiety znajdującej się nad polem listy poleceń oraz zmiana zródła wiersza dla pola listy poleceń na odpowiednie zapytanie. Czwarty przycisk ma zamykać formularz. Przed zamknięciem formularza wyświetlany jest komunikat z prośbą o potwierdzenie zamknięcia formularza. Aby wykonać to ćwiczenie nale\y: 1. Wyświetlić formularz PANEL w widoku projekt 2. Zaznaczyć grupę opcji Wybor (klikając ramkę grupy) i dla właściwości zdarzenia przy kliknięciu wybrać Procedura zdarzenia i uruchomić Konstruktor kodu(...) 3. Następnie nale\y wpisać poni\szy kod: Sub Wybor_Click () Dim odp As Integer Select Case Me![Wybor] Case 1 Me![etykietka_polecen].Caption = "Katalog" Me![Lista_polecen].RowSource = "Katalog" Case 2 Me![etykietka_polecen].Caption = "Wydruki" Me![Lista_polecen].RowSource = "Wydruki" Case 3 Me![etykietka_polecen].Caption = "Klienci" Me![Lista_polecen].RowSource = "Klienci" Case 4 odp = MsgBox("czy zamknąć panel sterowania", 4 + 32 + 256, "Pytanie") W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 32 MS Access 97 zaawansowane techniki programowania baz danych UWAGA :Powy\szą linijkę mo\na te\ zapisać wykorzystując liczby prezentowane w powy\szych tabelach odp = MsgBox("czy zamknąć panel sterowania", vbYesNo + vbQuestion + vbDefaultButton2, "Pytanie") If odp = 6 Then lub If odp= vbYes Then DoCmd.Close acForm, PANEL DoCmd.SelectObject acTable, True Else Me![Wybor] = 1 Me![etykietka_polecen].Caption = "Katalog" Me![Lista_polecen].RowSource = "Katalog" End If End Select End Sub 4. Po wykonaniu tego ćwiczenia proszę otworzyć formularz PANEL i sprawdzić czy działa poprawnie. Co dzieje się po otwarciu panelu, czy tak powinien się zachowywać? ĆWICZENIE 10 Aby poprawić działanie PANELU proszę ustawić właściwość "Tytuł" formantu "etykietka_polecen" oraz właściwość śródłoWiersza formantu "Lista_polecen" ĆWICZENIE 11 1. Nale\y zaprogramować reakcję pola listy (pole z nazwami poleceń) na dwukrotne kliknięcie, w taki sposób, aby po dwukrotnym kliknięciu pola listy wykonywane było odpowiednie polecenie. 2. W polu listy wyświetlane są polecenia z tabeli MENU. Oprócz poleceń wyświetlane są tak\e odpowiadające poleceniom numery (w kolumnie o zerowej szerokości). Jest to kolumna związana, w związku z czym do programu przekazywany jest z pola listy, numer polecenia. 3. Procedura powinna sprawdzać czy na liście są polecenia. Jeśli nie ma poleceń to lista po dwukrotnym kliknięciu przekazuje wartość Null. " w pierwszej instrukcji będziemy sprawdzać czy wartość przekazywana przez pole wynosi Null. Jeśli tak będzie to kończymy wykonywanie procedury po wyświetleniu odpowiedniego komunikatu. " Jeśli jest to wartość ró\na od Null to instrukcją Select Case w zale\ności od numeru polecenia wykonujemy odpowiednią akcję. 4. Proszę przeanalizować, wpisać i uruchomić poni\szą procedurę: W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 33 MS Access 97 zaawansowane techniki programowania baz danych Sub lista_polecen_DblClick(Cancel As Integer) If IsNull([lista_polecen]) Then MsgBox ("Nie wybrano \adnego polecenia") Exit Sub End If Select Case [lista_polecen] Case 101 DoCmd.OpenForm "Plyty", , , , acAdd Case 102 DoCmd.OpenForm "Plyty", , , , acEdit Case 106 DoCmd.OpenForm "Wykonawca", , , , acFormReadOnly Case 107 DoCmd.OpenQuery "Lista_plyt" Case Else MsgBox "Tego jeszcze nie obsługujemy" End Select End Sub ĆWICZENIE 12 Nale\y zaprogramować reakcję przycisku zamykającego aplikację 1. Jedyną nową akcją będzie tutaj akcja Quit z argumentem acQuitPrompt, wywoływana przez instrukcję DoCmd i zamykająca aplikację. 2. Proszę wpisać poni\szą procedurę: Sub koniec_Click() Dim rezultat As Integer Const komunikat = "Czy chcesz zakończyć aplikację ??" Const typ_okna = 4 + 16 + 256 Const tytul = " pytanie ostrzegawcze" rezultat = MsgBox(komunikat, typ_okna, tytul) If rezultat = 6 Then DoCmd.Quit acQuitPrompt Else Me![Wybor] = 1 Me![etykietka_polecen].Caption = "Katalog" Me![lista_polecen].RowSource = "Katalog" End If End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 34 MS Access 97 zaawansowane techniki programowania baz danych W dalszej części ćwiczeń zaprogramujemy synchronizację dwóch formularzy. W pliku muzyka97_3.mdb (który nale\y otworzyć) znajdują się dwa nowe formularze: formularz LISTA_PLYT i formularz TYTULY_NAGRAN. Rys. 4 Okno dialogowe Formularz: LISTA_PLYT Formularz LISTA_PLYT składa się z pięciu elementów sterujących: 1. Z pola kombi, w którym wyświetlane są nazwy kategorii muzycznych. yródłem wiersza dla tego pola jest tabela KATEGORIE_MUZYCZNE. 2. Pola listy. Pole to początkowo wyświetla listę wszystkich płyt, które znajdują się w katalogu. Docelowo ma wyświetlać tylko płyty wybranej kategorii muzycznej. 3. Przycisku Zamknij formularz ,którego zadaniem jest zamknięcie formularza. 4. Przycisku Wypo\ycz - przycisk ten jest widoczny tylko wtedy jeśli formularz wyświetlany jest z formularza WYPOZYCZALNIA i słu\y wtedy do rejestrowania wypo\yczenia płyty. (W tej części ćwiczeń nie zajmujemy się tym przyciskiem - standardowo nie jest on wyświetlany. Oprogramowanie wypo\yczalni będzie tematem pózniejszych ćwiczeń.) 5. Przycisku Tytuły nagrań - podstawowym zadaniem tego przycisku jest wyświetlenie tytułów nagrań z wybranej płyty. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 35 MS Access 97 zaawansowane techniki programowania baz danych Formularz TYTUAY NAGRAC składa się z czterech formantów: 1. Pola listy, w którym będą wyświetlane tytuły nagrań na płycie zaznaczonej w formularzu LISTA_PLYT. 2. Przycisku Zamknij 3. Pól tekstowych Wykonawca i tytuł płyty, w których maja być wyświetlone odpowiednio nazwa wykonawcy i tytuł płyty. Celem pierwszej grupy ćwiczeń będzie zsynchronizowanie działania obu pól na formularzu LISTA_PLYT w taki sposób aby po wybraniu nowej kategorii, w polu listy pojawiały się tytuły płyt tylko z wybranej kategorii. Druga grupa ćwiczeń ma doprowadzić do zsynchronizowania działania formularzy LISTA_PLYT i TYTULY_NAGRAN aby: " Po kliknięciu przycisku Tytuły nagrań wyświetlany był formularz z listą nagrań wybranej płyty. " Jeśli wyświetlone są obydwa formularze to kliknięcie dowolnego tytułu płyty automatycznie aktualizuje nagrania z tej płyty. Podobnie działa zmiana kategorii. " Jeśli otwarte są oba formularze to zamknięcie formularza LISTA_PLYT automatycznie zamyka formularz TYTULY NAGRAN. ĆWICZENIE 13 Proszę zmodyfikować właściwość zródło wiersza pola listy lista tytułów aby rekordy wyświetlane w tym polu były wybierane zgodnie z wartością przekazywaną przez pole lista kategorii. 1. Wyświetl arkusz właściwości pola listy Lista tytułów 2. Kliknij w polu właściwości yródło wiersza 3. Uruchom konstruktor i po wyświetleniu siatki projektowania zapytania, w wierszu Kryteria w kolumnie Numer kategorii wstaw jako kryterium wartość pola lista kategorii: [Formularze]![Lista_plyt]![lista_kategorii] 4. Zamknij okno projektowania zapytania i odpowiedz twierdząco na pytanie o to, czy aktualizować właściwość. ĆWICZENIE 14 Efekt jaki został uzyskany w poprzednim ćwiczeniu to wyczyszczenie pola listy tytułów. Pytanie: Co trzeba jeszcze zrobić aby po zmianie w polu lista_kategorii, w polu lista_tytulow automatycznie wyświetlane były tytuły z danej kategorii? 1. Nale\y za pomocą procedury zdarzenia obsłu\yć zdarzenie po aktualizacji dla pola Lista_kategorii.. Proszę utworzyć poni\szą procedurę. Sub lista_kategorii_AfterUpdate() Me!lista_tytulow.Requery End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 36 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 15 Następnym etapem tworzenia aplikacji będzie wyświetlanie za pomocą przycisku Tytuły nagrań z formularza LISTA_PLYT formularza TYTULY_NAGRAN z nagraniami z zaznaczonej płyty (najpierw jednak sprawdzimy, czy wybrano jakąś płytę. 1. Proszę wpisać następującą procedurę: Sub tytuly_nagran_Click() If IsNull(Me!lista_tytulow) Then MsgBox "wybierz jakas płytę" Exit Sub Else DoCmd.OpenForm "tytuly_nagran" End If End Sub ĆWICZENIE 16 Jak łatwo zauwa\yć, synchronizacja nie jest doskonała. Po wyświetleniu formularza, w polu listy nie wyświetlane są \adne nagrania. 1. Za pomocą metody, którą wykorzystaliśmy poprzednio do filtrowania listy tytułów, proszę stworzyć i przefiltrować listę nagrań w taki sposób aby na liście pojawiały się tylko nagrania z płyty zaznaczonej w poprzednim formularzu. 2. Nale\y stworzyć zródło rekordów pola listy Tytuly_nagran w oparciu o tabelę Nagrania i ustawić kryterium w kolumnie nr_plyty . Proszę uzupełnić zródło wierszy w widoku SQL kwerendy poni\szym kodem: SELECT Nagrania.Nr_nagrania, Nagrania.Tytul_nagrania, Nagrania.Czas_nagrania, Nagrania.Nr_plyty FROM Nagrania WHERE Nagrania.Nr_plyty = [Formularze]![Lista_plyt]![lista_tytulow] 3. Sprawdz czy formularz TYTULY NAGRAN jest podręczny? ĆWICZENIE 17 1. Co zrobić aby po kliknięciu innej płyty na formularzu LISTA_TYTULOW lista nagrań była automatycznie aktualizowana? Nale\y sprawdzić funkcją Zaladowany(tytuly_nagran) czy formularz TYTULY_NAGRAN jest otwarty. " Jeśli nie jest, nie powinna być wykonywana \adna akcja. " Jeśli jest otwarty to po kliknięciu innej płyty, lista nagrań na formularzu TYTULY_NAGRAN powinna być zaktualizowana, czyli powinniśmy ponowić zapytanie pola listy. 2. Wpisz następującą procedurę: W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 37 MS Access 97 zaawansowane techniki programowania baz danych Sub lista_tytulow_AfterUpdate() If zaladowany("tytuly_nagran") Then Forms![tytuly_nagran]![lista_nagran].Requery End If End Sub ĆWICZENIE 18 1. Pytanie: Dlaczego po otwarciu formularza TYTULY_NAGRAN bezpośrednio z okna bazy danych wyświetlana jest prośba o podanie parametru i czy jest to błąd? 2. Zaprogramuj działanie przycisków zamykających oba formularze. W obu przypadkach mo\na wpisać taką samą procedurę powodującą zamknięcie aktywnego formularza: Sub Zamknij_Click() DoCmd.Close End Sub 3. Dla formularza TYTULY_NAGRAN mo\na dopisać linijkę zmieniającą napis na przycisku Sub Zamknij_Click() DoCmd.Close Forms!Lista_plyt!tytuly_nagran.Caption = "tytuły nagrań" End Sub ĆWICZENIE 19 Co zrobić aby po zamknięciu formularza LISTA_PLYT zamykany był równocześnie formularz TYTULY_NAGRAN jeśli jest otwarty? 1. Wpisz następującą procedurę: Sub Form_Close() If zaladowany("TYTULY_NAGRAN") Then DoCmd.Close acForm, "TYTULY_NAGRAN" End If End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 38 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 20 Proszę zmienić działanie procedury po aktualizacji listy kategorii na formularzu LISTA_PLYT w taki sposób aby po wybraniu nowej kategorii i bezpośrednim naciśnięciu guzika tytuły nagrań nie pokazywały się \adne nagrania przecie\ \adnego nie wybraliśmy. UWAGA: Pola kombi i pola listy pamiętają ostatnio wybrane wartości a\ do momentu wyboru innej pozycji z listy, zamknięcia formularza lub sztucznego wyzerowania pola listy. Po wyzerowaniu pole takie będzie się zachowywało, jakby było puste (jakby nigdy nic nie wybierano). Zmodyfikuj następującą procedurę dla pola Lista_kategorii w formularzu LISTA_PLYT (procedura była utworzona wcześniej). Sub lista_kategorii_AfterUpdate() Me!lista_tytulow.Requery Me!lista_tytulow = Null End Sub ĆWICZENIE 21 Jeśli w polu listy z tytułami płyt nie jest zaznaczona \adna płyta to kliknięcie przycisku Tytuły nagrań nie spowoduje otwarcia formularza TYTULY_NAGRAN. Co zrobić aby przycisk ten działał na dwa sposoby jednak jeśli jest wybrana jakaś płyta: Sposób pierwszy jeśli jest otwarty formularz TYTULY_NAGRAN to go zamkniemy. Sposób drugi jeśli formularz nie jest otwarty to go otworzymy i zmienimy napis na przycisku na gotowy do obsługi przycisku ze sposobu pierwszego: Zmodyfikuj następującą procedurę (procedura jest ju\ wpisana) Sub tytuly_nagran_Click() If IsNull(Me!lista_tytulow) Then MsgBox "wybierz jakąś płytę" Exit Sub End If If zaladowany("TYTULY_NAGRAN") Then Me![tytuly_nagran].Caption = "tytuły nagrań " DoCmd.Close acForm, "TYTULY_NAGRAN" Else DoCmd.OpenForm "TYTULY_NAGRAN" Me![tytuly_nagran].Caption = "ukryj tytuły" End If End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 39 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 22 Proszę podłączyć formularz LISTA_PLYT do formularza PANEL do polecenia przeszukiwanie katalogu i sprawdzić jego działanie. UWAGA: Jako samodzielne ćwiczenie proszę do procedury zdarzenia po aktualizacji dodać dwa polecenia: przenoszące fokus i akcję symulującą naciśnięcie klawisza "strzałki w dół" (albo enter). Następnym etapem szkolenia będzie zainstalowanie formularza rejestrującego wypo\yczanie i zwroty płyt. W tym celu proszę wczytać plik o nazwie muzyka97_4.mdb. W pliku znajdują się dodatkowe obiekty: 1. Tabela KLIENCI_LISTA o polach: nr_klienta, imie, nazwisko, miasto, ulica. Zadaniem tabeli będzie przechowywanie informacji o klientach. 2. Tabelę PLYTY proszę uzupełnić o dodatkowe pole nr_klienta: typu liczba całkowita długa. W polu tym będziemy rejestrować fakt wypo\yczenia płyty przez klienta. Po wypo\yczeniu klientowi płyty, numer klienta będzie wpisywany do tego pola. Po oddaniu płyty zawartość pola będzie czyszczona (usuwany będzie numer klienta). 3. Proszę utworzyć dodatkową relację między tabelami PLYTY i KLIENCI_LISTA: Rys. 5 Relacje pomiędzy tabelami 4. Pojawił się równie\ nowy formularz WYPOZYCZALNIA, w którym znajdują się następujące elementy sterujące: " pole kombi które będzie słu\yło do wybierania klienta z listy zarejestrowanych w wypo\yczalni klientów. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 40 MS Access 97 zaawansowane techniki programowania baz danych " pole listy (wypo\yczone płyty) - w tym polu będą wyświetlane tytuły płyt wypo\yczonych przez wybranego klienta. " przyciski poleceń: Lista płyt, Zamknij, Zwrot płyty, Rozliczenie Rys. 6 Okno dialogowe Formularza WYPOZYCZALNIA Celem ćwiczeń z tej części szkolenia będzie zaprogramowanie rejestrowania wypo\yczeń i zwrotów płyt. Procesy wypo\yczania i zwrotów będą związane z programowaniem za pomocą obiektów dostępu do danych (DAO - Data Access Objects). Proces wypo\yczania płyty przebiegać ma w następujący sposób: 1. Po wybraniu klienta mo\na będzie przyciskiem Lista płyt - wypo\yczanie wyświetlić formularz LISTA_PLYT, którym zajmowaliśmy się dotychczas. Wyświetlając ten formularz trzeba będzie równocześnie pokazać przycisk Wypo\ycz znajdujący się na tym formularzu. 2. Po wybraniu płyty z listy i kliknięciu przyciksu Wypo\ycz, odpowiednia procedura zdarzenia ma znale\ć rekord opisujący zaznaczoną płytę w tabeli PLYTY, sprawdzić czy płyta nie jest wypo\yczona. Jeśli jest, to wyświetlić komunikat i zakończyć operację, a jeśli nie jest, to w polu nr_klienta wpisać numer klienta przekazywany przez pole kombi klientów formularza WYPOZYCZALNIA 3. Po wypo\yczeniu płyty lista płyt wypo\yczonych przez klienta powinna zostać odnowiona. Zwrot płyty przebiega w podobny sposób: 1. Po zaznaczeniu płyty na liście wypo\yczonych płyt na formularzu WYPOZYCZALNIA i kliknięciu przycisku Zwrot, odpowiednia procedura zdarzenia ma usuwać numer klienta z odpowiedniego rekordu w tabeli płyty. 2. Po wykonaniu tej operacji powinna być odświe\ona lista płyt wypo\yczonych. Pierwszym ćwiczeniem będzie synchronizacja zawartości pola listy płyt z polem w którym wyświetlany jest klient. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 41 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 23 Najpierw nale\y uzupełnić kwerendę LISTA_PLYT o nowo dodane pole nr_klienta z tabeli PLYTY. Po dodaniu pola kwerendę nale\y zachować. Kolejnym krokiem będzie stworzenie zródła wiersza dla pola l_wyp_plyt na formularzu WYPOYCZALNIA. Pole to ma pokazywać tytuły i nazwy wykonawców wypo\yczonych przez klienta płyt. Proponuję stworzyć za pomocą kreatora (trzy kropki obok właściwości zródło wiersza) procedurę SELECT języka SQL opartą na poprzednio zmodyfikowanej kwerendzie LISTA_PLYT: SELECT Lista.Numer_plyty, Lista.Tytul_plyty, Lista.Nazwa_Wykonawcy, Lista.Nr_klienta FROM Lista_plyt as lista WHERE Lista.Nr_klienta = [Forms]![wypozyczalnia]![klient] Nale\y wpisać procedurę, która będzie synchronizowała zawartości pola kombi z zawartością pola listy. Metodę REQUERY mo\na tutaj u\yć na kilka sposobów proszę wybrać jeden. Sub klient_AfterUpdate() Me![l_wyp_plyt].Requery sposób pierwszy dla Requery DoCmd.Requery (l_wyp_plyt) sposób drugi DoCmd.Requery "l_wyp_plyt" sposób trzeci Me![l_wyp_plyt] = Null a tu znany ju\ sposób zerowania pola End Sub ĆWICZENIE 24 Proszę do przycisku Lista płyt - wypo\yczanie podłączyć formularz LISTA_PLYT w taki sposób aby w przypadku gdy nie został wybrany \aden klient, zamiast akcji pojawiał się komunikat o konieczności wybrania klienta z listy. 1. Wpisz następującą procedurę: Sub wypoz_Click() If IsNull(Me!klient) Then MsgBox "najpierw wybierz klienta" Exit Sub Else DoCmd.OpenForm "lista_plyt" End If End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 42 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 25 Proszę samodzielnie do przycisku Wypo\yczalnia na formularzu PANEL podłączyć formularz WYPOZYCZALNIA. Przycisk ten ma jednocześnie zamykać formularz PANEL ĆWICZENIE 26 Proszę o ustawienie właściwości zdarzeń w taki sposób aby przycisk polecenia Wypo\ycz na formularzu LISTA_PLYT był wyświetlany tylko wtedy, gdy otwarty jest formularz WYPOZYCZALNIA. W przeciwnym razie przycisk nie powinien być widoczny (tak jak jest teraz). 1. Wpisz następującą procedurę: Sub Form_Activate() If zaladowany("wypozyczalnia") Then Me![wypozycz].Visible = True Else Me![wypozycz].Visible = False End If End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 43 MS Access 97 zaawansowane techniki programowania baz danych Programowanie za pomocą obiektów dostępu do danych Access składa się z dwóch podstawowych części aparatu aplikacyjnego który nadzoruje programowanie i interfejs u\ytkownika, oraz z aparatu bazodanowego JET DBEngine, który nadzoruje przechowywanie danych i definicje wszystkich obiektów w bazie danych. Visual Basic obsługuje w wersji Accessa 97 model obiektów słu\ący do operacji na obiektach przechowywanych przez aparat bazodanowy. Model ten to DAO (Data Access Objects) Kiedy baza danych zostaje otwarta, aparat aplikacyjny wczytuje odpowiednie kolekcje obiektów z plików bazy danych i aplikacji, aby nazwy wszystkich tabel, kwerend, formularzy, raportów, makr i modułów wyświetlić w oknie bazy danych. Najwy\szym obiektem w hierarchii ustanawianym przez aparat aplikacyjny jest Application, który zawiera kolekcje Forms wszystkich otwartych formularzy, kolekcję Reports, kolekcję References i inne omówione we wcześniejszej części podręcznika. DAO (Data Access Objects) Obiekt DBEngine słu\y do pobierania danych, oraz sprawdzania lub tworzenia nowych obiektów danych. Jest modelem obiektów dostępu do danych stworzonym specjalnie do współpracy z Accessem i aparatem JET DBEngine DAO tworzy strukturę hierarchiczną składającą się z obiektów następującego typu: Aparat bazy danych Microsoft JET DBEngine Znajduje się na szczycie hierarchii obiektów dostępu do danych. Zawiera w sobie kolekcję Workspaces (obszarów roboczych), Errors (błędów), Properties (właściwości). Do metod obiektu nale\ą między innymi: CompactDatabase, CreateWorkspace, RepairDatabase. Kolekcja obszarów roboczych (workspaces) Kolekcja Workspaces (obszarów roboczych) składa się z obiektów typu Workspace (obszar roboczy). W obiekcie Workspace znajdują się: kolekcja baz danych (databases) , kolekcja u\ytkowników (Users) i kolekcja grup (Groups). Do metod obiektu nale\ą: BeginTrans, CreateGroup, Close, CreateUser, CommitTrans, OpenDatabase, CreateDatabase, Rollback. Kolekcja baz danych (databases) Kolekcja baz danych (Databases) składa się z obiektów typu baza danych. Obiekt Database (baza danych) zawiera kolekcje: Containers (kontenery), Relations (relacje), QueryDefs (Definicje zapytań), TableDefs (definicje tabel), Recordsets (Zestawy rekordów). Poni\ej w tabeli znajduje się krótki opis ka\dej z tych kolekcji. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 44 MS Access 97 zaawansowane techniki programowania baz danych Containers W obiekcie kontener znajdują się informacje o bazie danych i o wszystkich zachowanych w bazie tabelach, kwerendach, relacjach, formularzach, raportach, makrach, modułach, stronach dostępu do danych. Kontenery Forms i Reports zawierają informacje o wszystkich obiektach zachowanych w bazie, kolekcje Forms i Reports, omawiane w pierwszej części szkolenia, tylko o obiektach otwartych. W ka\dym kontenerze wybranego typu znajduje się kolekcja Dokumentów (Documents), z których ka\dy opisuje jeden obiekt danego typu zachowany w bazie. Obiekt dokument nie zawiera kolekcji ani metod, ale ma między innymi właściwości: Container - nazwa konteneru, do którego nale\y obiekt Dokument Name - nazwa obiektu Relations Ka\dy obiekt Relation reprezentuje relację w bazie danych. Obiekt Relation składa się z obiektów Fields. QueryDefs Obiekt QueryDef zawiera definicję kwerendy. TableDefs (kolekcja Obiekty TableDef zawierają definicje tabel i tabel dołączonych. domyślna) Recordsets Obiekty typu Recordset reprezentują rekordy z tabel lub rekordy z dynamicznego zestawu rekordów otrzymanego w wyniku zapytania. Za pomocą obiektów wymienionych w powy\szej tabeli mo\na z poziomu kodu języka Visual Basic modyfikować strukturę bazy danych (na przykład tworzyć tabele, modyfikować tabele, jak równie\ modyfikować wartości rekordów z danymi). Na początku szczegółowo omówimy obiekt typu recordset. W programie Access97 dostępnych jest pięć typów obiektów recordset dla programowania w DAO (w tym jeden tylko przy u\yciu ODBC) 1. Tabelowy zestaw rekordów DAO (table). Mo\e odnosić się tylko do lokalnej tabeli. yródło nie mo\e być tabelą dołączoną. W tabelowym zestawie rekordów mo\na ustanowić indeks bie\ący i u\yć go do wyszukiwania wierszy za pomocą metody seek dostępnej tylko dla tego typu zestawu. Typ tabelowy jest typem domyślnym dla lokalnych tabel. 2. Dynamiczny zestaw wyników DAO (dynaset). yródłem rekordów dla tego zestawu mo\e być tabela lokalna, tabela dołączona, kwerenda lub instrukcja SQL. Do wyszukiwania rekordów w tym zestawie rekordów mo\na u\yć metody find. Pozwala uzyskiwać i aktualizować dane z jednej lub kilku połączonych tabel i mo\e zawierać aktualizowalne rekordy. Obiekt Recordset typu zestaw dynamiczny jest zestawem rekordów, który mo\na stosować do dodawania, zmiany lub usuwania rekordów z określonej tabeli lub tabel bazy danych. Typ dynamiczny jest typem domyślnym dla tabel dołączonych, kwerend i instrukcji SQL. śeby w zestawie obejrzeć nowododane rekordy nale\y u\yć metody requery dla rekordsetu. 3. Utrwalony zestaw wyników DAO (snapshot). Zwraca kopie danych istniejących w bazie w momencie tworzenia zestawu. Kopii tych nie mo\na modyfikować. Do wyszukiwania rekordów słu\y metoda find. Przydatny na przykład do generowania raportów lub wyszukiwania wartości. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 45 MS Access 97 zaawansowane techniki programowania baz danych 4. Zestaw (DAO) i kursor (ADO) typu progresywnego (forward only) jest to typ podobny do typu utrwalonego, z wyjątkiem tego, \e nie jest udostępniany \aden kursor. Rekordy udostępnione przez ten typ zestawu mo\na przewijać tylko w przód rekord po rekordzie (metoda movenext). Efektem jest lepsza wydajność w sytuacji, gdy potrzebne jest tylko jedno przejście po rekordach zestawu wynikowego. W ADO ten typ kursora jest kursorem domyślnym. Kiedy tworzony jest nowy obiekt Recordset, bie\ący rekord jest ustawiany na pierwszym rekordzie, je\eli istnieją ju\ jakieś rekordy. Jeśli nie ma \adnych rekordów, właściwość RecordCount przyjmuje wartość 0, a właściwości BOF i EOF przyjmują wartość True. W jaki sposób otworzyć zestaw rekordów ? Zestawy rekordów tworzy metoda OpenRecordset (DAO). Metoda OpenRecordset jest dostępna dla obiektów typu: Database, TableDef, QueryDef i Recordset. W pierwszych trzech przypadkach składnia jest inna ni\ dla ostatniego: Składnia dla obiektu typu Database: Set zmienna = baza_danych.OpenRecordset(zródło,typ[,opcje]) zródło - ciąg znaków określający zródło rekordów dla tworzonego zestawu. Mo\e to być nazwa tabeli, nazwa kwerendy lub instrukcja SQL wybierająca rekordy. typ - jedna z pięciu stałych predefiniowanych: " dbOpenTable Otwiera obiekt Recordset typu tabelowego " dbOpenDynamic Otwiera obiekt Recordset typu dynamicznego (tylko ODBC). " dbOpenDynaset Otwiera obiekt Recordset typu zestaw dynamiczny " dbOpenSnapshot Otwiera obiekt Recordset typu utrwalonego " dbOpenForwardOnly Otwiera obiekt Recordset typu progresywnego. Opcje dla DAO dowolna ilość z ośmiu dostępnych w DAO. " dbAppendOnly Tylko dodawanie nowych wierszy (dla table i dynaset) " dbSeeChanges Zabrania równoczesnej edycji rekordu (zwraca błąd) " dbDenyWrite Zabrania edycji i wstawiania, gdy ktoś inny otworzył zestaw. " dbDenyRead Zabrania czytania wierszy, gdy ktoś inny otworzył zestaw. " dbPessimistic lub dbOpimistic Pierwsza (domyślna) opcja blokuje wiersz bezpośrednio po u\yciu metody edit. Blokada trwa a\ do wystąpienia metody update, Druga opcja blokuje wiersz tylko na czas wykonywania metody update. Jeśli ktoś inny w tym czasie poddał ten sam wiersz edycji następuje błąd czasu wykonania. Przykład tworzenia zestawu rekordów (dla tabeli klienci) Dim Baza As Database, Zestaw As Recordset Set Baza = DBEngine.Workspaces(0).Databases(0) albo Set Baza = CurrentDb() W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 46 MS Access 97 zaawansowane techniki programowania baz danych Set Zestaw = baza.OpenRecordset( Klienci ,dbOpenTable, dbOptimistic) W tym momencie zmienna zestaw reprezentuje zestaw rekordów w postaci tabeli. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 47 MS Access 97 zaawansowane techniki programowania baz danych Wybrane metody dla obiektu Recordset metoda Składnia Działanie AddNew Zestaw.AddNew Dodaje nowy rekord do zestawu. Pola przyjmują wartość Null, nadawany jest kolejny numer dla pola automumer. Dodany rekord staje się rekordem bie\ącym. Po Update rekordem bie\ącym staje się rekord który był poprzednio bie\ącym Close Zestaw.Close Zamyka zestaw rekordów. Nie mo\na zamknąć bazy danych metodą Close jeśli jest otwarty zestaw rekordów. Próba zamknięcia zamkniętego obiektu powoduje wygenerowanie błędu. Delete Zestaw.Delete Usunięcie bie\ącego rekordu. Aby usunąć rekord, musi istnieć bie\ący rekord. Jeśli go nie ma, nale\y u\yć metody Move, Find lub Seek, albo ustawić właściwość Bookmark. Usunięty rekord pozostaje bie\ącym a\ do przejścia do innego rekordu. Nie mo\na go jednak edytować. Edit Zestaw.Edit Kopiuje bie\ący rekord z zestawu do bufora w celu umo\liwienia przeprowadzenia zmian w rekordzie. Po wykonaniu zmian i w celu ich zatwierdzenia nale\y u\yć metody Update. Musi istnieć rekord bie\ący. FindFirst, Zestaw.FindFirst Znajduje odpowiednie rekordy. FindLast, kryteria Kryteria wyra\enie typu ciąg znaków (klauzula FindNext, WHERE bez słowa kluczowego WHERE, na przykład: FindPrevious kryteria = "Title = 'Sales Representative'" Właściwość Zestaw.NoMatch = True określa, \e operacja wyszukiwania się nie powiodła.. Move Zestaw.Move Przesuwa rekord o podaną ilość wierszy. ile_wierszy[, start] Ile_wierszy (dodatnia liczba do przodu, ujemna do tyłu) start ciąg znaków identyfikujący zakładkę. MoveFirst Zestaw.MoveFirst Poruszanie się w zestawie rekordów. MoveLast kryteria MoveNext MovePrevious OpenRecordSet Zestaw.OpenReco Tworzenie recordsetu na podstawie ju\ istniejącego rdset Set nowyzestaw = zestaw. OpenRecordSet ([typ],[opcje]) ([typ],[opcje]) Requery Zestaw.Requery Aktualizacja zestawu rekordów przez ponowne wykonanie zapytania W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 48 MS Access 97 zaawansowane techniki programowania baz danych 1. Mo\na stosować tylko w indeksowanych zestawach Seek Zestaw.Seek typu tabela. 3 porównanie3 , 2. porównanie - jeden z operatorów >,>=,<,<=,= klucz1, klucz2 ... 3. wartości odpowiadające polom klucza bie\ącego indeksu zestawu Update zestaw.Update Zachowuje zmiany wprowadzone do bie\ącego rekordu metodą AddNew lub Edit Właściwości recordsetów: Nazwa Opis BOF, EOF Wskazuje czy bie\ący rekord jest przed pierwszym lub po ostatnim rekordzie. Wskazniki tylko do odczytu. Przykłady zastosowania: 1. Do Until MyTable.EOF MyTable.MoveNext (...) Loop 2 MyTable.MoveLast Do Until MyTable.BOF MyTable.MovePrevious (...) Loop Bookmark Ustawia zakładkę jednoznacznie identyfikującą rekord w zestawie odczyt/zapis. Dim zakladka As String Zakladka = zestaw.Bookmark ...(instrukcje przenoszące rekord bie\ący) zestaw.Bookmark = zakladka Bookmarkable Czy mo\na ustawić zakładkę. W przypadku załączonych tabel z innych baz danych mo\e być to niemo\liwe. If zestaw.bookmarkable Then ...... End If Filter (dynaset i snapshot - read/write). Set MySet = MyDB.OpenRecordset("Orders", dbOpenDynaset) MySet.Filter = "[Ship Country] = 'UK'" Set FilteredSet = MySet.OpenRecordset() Uwaga. Po ustawieniu filtru trzeba ponownie otworzyć ten sam zestaw rekordów jako inny. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 49 MS Access 97 zaawansowane techniki programowania baz danych Index Ustawia dla zestawu typu tabela bie\ący indeks (read/write). Musi to być nazwa istniejącego obiektu typu indeks. LastModified Dynaset i Table, ustawia Bookmark na ostatnim modyfikowanym lub dodanym rekordzie. Zestaw.Bookmark = Zestaw.LastModified DataCreated, Data utworzenia tabeli i data ostatniej zmiany projektu tabeli. LastUpdated Name Nazwa obiektu RecordCount W rekordsecie typu table zwraca ilość rekordów w zestawie. Usunięcie rekordu zmniejsza licznik. W rekordsecie typu dynaset zwraca ilość rekordów do których uzyskano dostęp (bezpośrednio po otwarciu zestawu, jeśli istnieją rekordy zwraca wartość jeden, jeśli rekordów nie ma wartość zero). W celu faktycznego policzenia ilości rekordów w rekordsecie typu dynaset najpierw trzeba przejść do rekordu ostatniego np. metodą movelast. Wtedy rekordset uzyska dostęp do wszystkich istniejących rekordów. Restartable Określa czy mo\na ponowić zapytanie dla danego zestawu rekordów metodą Requery Sort Sortowanie Set MySet = MyDB.OpenRecordset("Orders", dbOpenDynaset) MySet.Sort = "[Ship Country]" ' Ustala porządek sortowania Set SortedSet = MySet.OpenRecordset() ' Tworzy drugi dynaset Type Określa typ zestawu ValidationRule ="UK" =100 Between 10 And 100 Between #1/1/94# And #3/3/94# In ("British Columbia", "Quebec") Like "P[A-F]###" Wyraz musi zaczynać się na literę P, po niej musi wystąpić litera z zakresu od A do F a następnie 3 cyfry. PB281 i PF031 są poprawne; PG219 i PBS12 nie są poprawne. Dlookup("[State Code]", "[States]", "[State Code]=[Region]") Is Not Null Pole Region musi zwrócić wartość przechowywaną w polu State Code z tabeli States. Wyra\enie zwraca wartość True je\eli są takie rekordy, w przeciwnym wypadku zwraca wartość False. ValidationText Komunikat o złamaniu reguły poprawności W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 50 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 27 Proszę zaprogramować procedurę wypo\yczającą płytę w formularzu LISTA_PLYT. 1. Nale\y utworzyć zestaw rekordów dla tabeli PLYTY, ustawić właściwość Index, na istniejący indeks "numer płyty", a następnie za pomocą metody Seek odszukać rekord opisujący daną płytę. 2. Jeśli płyta nie jest wypo\yczona, to po znalezieniu rekordu, otwieramy go do edycji, wpisujemy numer klienta, podajemy komunikat o powodzeniu operacji, zatwierdzamy zmianę i opuszczamy procedurę 3. Wpisz następującą procedurę: Private Sub wypozycz_Click() If IsNull(Me![lista_tytulow]) Then MsgBox "wybierz jakas płytkę" Exit Sub End If Dim rcs As Recordset Set rcs = CurrentDb.OpenRecordset("plyty", dbOpenTable) rcs.Index = "numer płyty" rcs.Seek "=", Me!lista_tytulow If rcs.NoMatch Then MsgBox "nie znalazłem płyty" & Me!lista_tytulow Else If IsNull(rcs("nr_klienta")) Then rcs.Edit rcs("nr_klienta") = Forms![Wypozyczalnia]![klient] rcs.Update MsgBox "wypozyczenie dokonane" Else MsgBox "niestety płytę ma inny klient" End If End If rcs.Close End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 51 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 28 Nale\y dopisać procedurę, która zadba o odświe\enie listy płyt po\yczonych przez klienta na formularzu WYPOZYCZALNIA. Najładniej jeśli odświe\enie nastąpi bezpośrednio po wypo\yczeniu płyty. Proszę dopisać do poprzedniej procedury w odpowiednim miejscu poni\szą linijkę: Forms![Wypozyczalnia]![l_wyp_plyt].Requery ĆWICZENIE 29 Nale\y wpisać procedurę zapisująca zwrot po\yczonej płyty Sub zwrot_plyty_Click() Dim rcs As Recordset If IsNull(Me!l_wyp_plyt) Then MsgBox "zaznacz plyte ktora chcesz zwrocic" Exit Sub End If Set rcs = CurrentDb.OpenRecordset("PLYTYy", dbopentable) rcs.Index = "numer płyty" rcs.Seek "=", Me![l_wyp_plyt] If rcs.NoMatch Then MsgBox "nie moge znalezć płyty" & Me!l_wyp_plyt Else If Not IsNull(rcs("nr_klienta")) Then rcs.Edit rcs("nr_klienta") = Null rcs.Update MsgBox "dokonano zwrotu" Forms![Wypozyczalnia]![l_wyp_plyt].Requery Else MsgBox " ta płyta nie była wypo\yczona sprawdz to !!" End If End If rRcs.Close End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 52 MS Access 97 zaawansowane techniki programowania baz danych W dalszej części ćwiczeń będziemy rejestrować w tabeli WYPOZYCZENIA wszystkie operacje wypo\yczania i zwrotów (tabela będzie przydatna do naliczania opłat za po\yczone płyty). ĆWICZENIE 30 1. Proszę zało\yć tabelę WYPOZYCZENIA o polach: Nazwa pola Typ danych [nr_kolejny] Autonumer [nr_plyty] Liczba całkowita [data_wypozyczenia] Data/Godzina [data_zwrotu] Data/Godzina [nr_klienta] Liczba całkowita długa 2. Wszystkie pola z wyjątkiem pola [data_zwrotu] proszę ustawić jako wymagane. ĆWICZENIE 31 Proszę uzupełnić relacje w bazie o utworzoną tabelę w sposób przedstawiony na rysunku: Wynik ćwiczenia W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 53 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 32 Nale\y w taki sposób zmodyfikować procedurę wypo\yczającą, aby równocześnie z zarejestrowaniem faktu wypo\yczenia płyty w tabeli PLYTY, w tabeli WYPOZYCZENIA tworzony był nowy rekord, a w nim były rejestrowane następujące dane: numer kolejny, numer płyty, numer wypo\yczającego, data wypo\yczenia 1. Przeanalizuj zmodyfikowaną wersję procedury i uzupełnij (modyfikacje zostały podkreślone) Sub wypozycz_Click() Dim rcs As Recordset, wyp As Recordset Set rcs = CurrentDb.OpenRecordset("PLYTY", dbopentable) Set wyp = CurrentDb.OpenRecordset("WYPOZYCZENIA", dbopentable) rcs.Index = "numer płyty" rcs.Seek "=", Me!lista_tytulow If rcs.NoMatch Then MsgBox "nie znalazłem płyty" & Me!lista_tytulow Else If IsNull(rcs("nr_klienta")) Then rcs.Edit rcs("nr_klienta") = Forms![Wypozyczalnia]![klient] rcs.Update wyp.AddNew wyp("nr_klienta") = Forms![Wypozyczalnia]![klient] wyp("nr_plyty") = Me![lista_tytulow] wyp("data_wypozyczenia") = Date() wyp.Update MsgBox "wypozyczenie dokonane" Forms![Wypozyczalnia]![l_wyp_plyt].Requery Else MsgBox "niestety płytę ma inny klient" End If End If rcs.Close wyp.Close End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 54 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 33 Zmodyfikuj procedurę zdarzenia dla przycisku Zwrot płyty w taki sposób aby procedura zapisywała w tabeli WYPOZYCZENIA datę zwrotu płyty. Poni\ej zamieszczona jest zmodyfikowana wersja procedury. Sub zwrot_plyty_Click() Dim rcs As Recordset, wyp As Recordset Set rcs = CurrentDb.OpenRecordset("plyty", dbopentable) Set wyp = CurrentDb.OpenRecordset("wypozyczenia", dbOpenDynaset) zwróć uwagę na typ danych dbOpenDynaset wyjaśnienia poni\ej rcs.Index = "numer płyty" rcs.Seek "=", Me![l_wyp_plyt] If rcs.NoMatch Then MsgBox "nie moge znalezć płyty" & Me!l_wyp_plyt Else If Not IsNull(rcs("nr_klienta")) Then rcs.Edit rcs("nr_klienta") = Null rcs.Update UWAGA metody find szukają tylko w dbOpenDynaset lub dbOpenSnapshot wyp.FindFirst "[nr_plyty]=" & Me![l_wyp_plyt] & " and isnull([data_zwrotu])" wyp.Edit wyp("data_zwrotu") = Date wyp.Update MsgBox "dokonano zwrotu" Forms![Wypozyczalnia]![l_wyp_plyt].Requery Else MsgBox " ta płyta nie była wypo\yczona !!" End If End If rcs.Close wyp.Close End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 55 MS Access 97 zaawansowane techniki programowania baz danych Do dalszych ćwiczeń nale\y wczytać bazę, która znajduje się w pliku muzyka97_5.mdb Wczytana baza została uzupełniona w następujący sposób: " Uzupełniono tabelę WYPOZYCZENIA o dwa pola: [czy_zaplacone] (Tak/Nie) i [nr_wplaty] (Liczba całkowita długa) " Utworzono tabelę WPLATY o następujących polach: [nr_wpłaty] (autonumer), [kwota] (waluta), [data_wplaty] (Data/Godzina), [nr_klienta] (liczba - całkowita długa) " Utworzono formularz ROZLICZENIE, na którym znajdują się trzy pola tekstowe mające wyświetlać informacje o wypo\yczonych płytach, o płytach nierozliczonych oraz kwotę do zapłacenia. " Przycisku Wpłata rejestrującego wpłatę za nierozliczone płyty (płyta nierozliczona jest to płyta, która została zwrócona i nie została opłacona). Naszym zadaniem będzie w kolejnych ćwiczeniach: 1. Uzupełnienie procedury wypo\yczania o wypełnianie pól czy zapłacone i nr wpłaty w tabeli wypo\yczenia. 2. Utworzenie relacji w bazie z udziałem nowej tabeli 3. Podpięcie formularza ROZLICZENIE do przycisku Rozliczenie na formularzu ROZLICZENIA 4. Zaprojektowaniu procedury rozliczającej i wyświetlającej odpowiednie dane na formularzu ROZLICZENIA 5. Zaprogramowanie przycisku Rejestruj wpłatę na formularzu :ROZLICZENIA ĆWICZENIE 34 1. Proszę uzupełnić procedurę wypo\yczania o wypełnianie pola: [czy_zaplacone] (wstawić wartość Nie dla nowego rekordu) i [nr_wplaty] [wstawić wartość Null]. 2. W tym celu w procedurze obsługi zdarzenia Przy kliknięciu dla przycisku Wypozycz na formularzu LISTA_PLYT nale\y dodać instrukcje: wyp("czy_zaplacone") = 0 wyp("nr_wplaty") = Null W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 56 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 35 Proszę utworzyć odpowiednie relacje zgodnie z poni\szym rysunkiem: Wynik ćwiczenia ĆWICZENIE 36 Proszę zaprogramować działanie przycisku Rozliczanie na formularzu WYPOśYCZALNIA według następującego opisu: 1. Działanie przycisku - Dla wybranego klienta procedura zdarzenia powinna otwierać formularz o nazwie ROZLICZENIE i wyświetlać na nim następujące informacje: " ilość wypo\yczonych płyt " ilość płyt oddanych, za które klient jeszcze nie zapłacił " kwotę nale\ną do zapłacenia za oddane płyty. Kwota wyliczana prostym algorytmem - suma wyra\enia (opłata stała + ilość_dni * stawka) dla wszystkich oddanych i nie zapłaconych płyt. 2. Opisane w poprzednich trzech punktach operacje nie wymagają wprowadzania zmian do danych. 3. Oprócz tych informacji, na formularzu ROZLICZENIE znajduje się przycisk Rejestruj wpłatę, którego zadaniem będzie zapisanie niezbędnych danych w bazie, w przypadku gdy u\ytkownik zdecyduje się zarejestrować wpłatę zgodnie z rozliczeniem. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 57 MS Access 97 zaawansowane techniki programowania baz danych 4. Za wyświetlenie formularza i umieszczenie na nim informacji odpowiedzialna jest następująca procedura: (komentarze wewnątrz procedury) (pola do wypełnienia: [ilosc_plyt], [ilosc_nierozliczona], [do_zaplacenia]) Sub rozlicz_Click() If IsNull(Me!klient) Then MsgBox "najpierw wybierz klienta" Exit Sub End If Dim il_ukl As Integer, il_nzl As Integer, kwota As Currency, wyp As Recordset Set wyp = CurrentDb.OpenRecordset("wypozyczenia") DoCmd.OpenForm "rozliczenie" il_uk = 0 ' ilość płyt, które klient ma jeszcze w domu il_nzl = 0 ' ilość płyt, które klient oddał ale jeszcze za nie nie zapłacił kwota = 0 kwota do zapłacenia wyp.MoveFirst ' idz do pierwszego rekordu Do While wyp.EOF = False ' dopóki nie dojdziesz do końca rób pętlę ' ponizszy warunek sprawdza płyty które klient ma w domu If wyp("nr_klienta") = Val(Me!klient) And IsNull(wyp("data_zwrotu")) Then il_ukl = il_ukl + 1 End If ' poni\szy warunek sprawdza płyty które klient oddał i chce za nie zapłacić If wyp("nr_klienta") = Val(Me!klient) And Not IsNull(wyp("data_zwrotu")) And Not wyp("czy_zaplacone") Then il_nzl = il_nzl + 1 kwota = kwota + 1 + (Date - wyp("data_wypozyczenia")) * 2 End If wyp.MoveNext ' idz do KONIECZNIE inaczej się zapętlimy sprawdz dlaczego? Loop koniec pętli ' na samym końcu wpisujemy obliczone wartości do odpowiednich pól w formularzu Forms![rozliczenie]![ilosc_plyt] = il_ukl Forms![rozliczenie]![ilosc_nierozliczona] = il_nzl Forms![rozliczenie]![do_zaplacenia] = kwota wyp.Close End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 58 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 37 Nale\y przeanalizować rejestrację wpłaty za pomocą przycisku Rejestruj wpłatę na formularzu ROZLICZENIE 1. Jakie operacje powinna wykonać procedura rejestrująca wpłatę ? " powinna utworzyć w tabeli WPLATY nowy rekord i wpisać tam numer klienta, datę, i kwotę " powinna przeszukać tabelę WYPOZYCZENIA, - znalezć wszystkie rekordy dla danego numeru klienta, które mają w polu data zwrotu wartość inną ni\ Null i w polu czy zapłacone wartość Nie - wpisać numer wpłaty do pola nr wpłaty - w polu czy zapłacone wstawić wartość Tak . 2. Po utworzeniu tej procedury zamienimy ją w następnym ćwiczeniu na procedurę transakcyjną. Sub zarejestruj_wplate_Click() Dim wpla As Recordset, wyp As Recordset Set wyp = CurrentDb.OpenRecordset("WYPOZYCZENIA") Set wpla = CurrentDb.OpenRecordset("WPLATY") ' poni\ej instrukcje wpisujące nowy rekord z wpłatą w tabeli WPLATY wpla.AddNew wpla("kwota") = Me![do_zaplacenia] wpla("data_wplaty") = Date wpla("nr_klienta") = Forms![Wypozyczalnia]![klient] wpla.Update ' poni\ej instrukcje aktualizujące tabelę WYPOZYCZENIA dla odpowiednich rekordów zmieniane są pola [czy_zaplacone] na Tak i [nr_wpłaty] na odpowiedni numer wpłaty. Pytanie tylko jak znalezć numer wpłaty ? Otó\ nowy rekord nie staje się automatycznie rekordem bie\ącym. Rekordem bie\ącym pozostaje najczęściej rekord, który był bie\ącym przed u\yciem metody AddNew. Aby uczynić dodany rekord bie\ącym, nale\y u\yć metody Move do zakładki (bookmark) określonej przez ustawienie właściwości LastModified wpla.Move 0, wpla.LastModified W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 59 MS Access 97 zaawansowane techniki programowania baz danych Czas na zmiany w tabeli WYPOZYCZENIA: ' Robimy pętlę, przeszukujemy tabelę WYPOZYCZENIA, wyszukujemy wszystkie rekordy dla danego numeru klienta [nr_klienta], które mają w polu [data_zwrotu] wartość inną ni\ Null i w polu [czy_zaplacone] wartość Nie, wpisujemy numer wpłaty do pola [nr_wplaty] a do pola [czy_zapłacone] wstawiamy wartość True. wyp.MoveFirst ' idz do pierwszego rekordu (warto się zastanowić co zrobić, gdy nie ma \adnego rekordu? Do Until wyp.EOF If wyp("nr_klienta") = Val(Forms![Wypozyczalnia]![klient]) And Not IsNull(wyp("data_zwrotu")) And Not wyp("czy_zaplacone") Then wyp.Edit wyp("czy_zaplacone") = True wyp("nr_wplaty") = wpla("nr_wplaty") wyp.Update End If wyp.MoveNext ' idz do nastepnego Loop wpla.Close wyp.Close MsgBox "Wpłata została zarejestrowana " DoCmd.Close acForm, "ROZLICZENIE" End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 60 MS Access 97 zaawansowane techniki programowania baz danych Przetwarzanie transakcyjne Aby wymusić integralność danych, na przykład w poprzedniej procedurze zadbać o to aby dane zapisane były zarówno w tabeli WPLATY jak i w tabeli WYPOZYCZENIA, mo\na wykorzystać mechanizm transakcyjny istniejący w Accessie. W języku Access Basic istnieją trzy metody obsługi transakcji: 1. Metoda BeginTrans - słu\y do rozpoczęcia nowej transakcji. 2. Metoda CommitTrans do zatwierdzenia wszystkich zmian wprowadzonych od ostatniej metody BeginTrans 3. Metoda Rollback słu\y do wycofania i anulowania wprowadzonych zmian Metody powy\sze są metodami obiektu Workspace, stąd te\ ich składnia wygląda następująco: Dim Obszar As Workspace Set Obszar = DBEngine.Workspaces(0) Obszar.BeginTrans rozpoczęcie transakcji ... instrukcje ... If MsgBox ( Czy zachować wszystkie zmiany ? ,4+32) = vbYes then Obszar.CommitTrans zatwierdzenie transakcji (zmian) Else Obszar.Rollback wycofanie transakcji (cofnięcie zmian) End if W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 61 MS Access 97 zaawansowane techniki programowania baz danych ĆWICZENIE 38 Proszę zmienić poprzednią procedurę na transakcyjną uwzględniając jednocześnie nie przyjmowanie wpłaty w wysokości 0 złotych. Nowy kod został podkreślony. Sub zarejestruj_wplate_Click() Dim odp as Integer DBEngine.Workspaces(0).BeginTrans (.. tutaj procedura ju\ istniejąca a\ do słówka Loop kończącego pętlę..) Loop wyp.Close wpla.Close odp = MsgBox("chcesz przyjąć wpłatę w wysokości " & Me!do_zaplacenia, 4 + 16 + 256) If odp = vbNo Or Me!do_zaplacenia <= 0 Then DBEngine.Workspaces(0).Rollback MsgBox "operacja została anulowana" Else DBEngine.Workspaces(0).CommitTrans MsgBox " wpłata została zarejestrowana" End If DoCmd.Close acForm, "ROZLICZENIE" End Sub Na koniec warto jeszcze dodać do formularza WYPOZYCZENIA dla przycisku zamknij króciutką procedurę: Sub zamknij_Click() DoCmd.Close End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 62 MS Access 97 zaawansowane techniki programowania baz danych Zagadnienia dodatkowe Sposób dopisywania rekordów do tabeli będącej zródłem wiersza dla pola edycji z listą wyboru (obsługa zdarzenia Przy wartości spoza listy ) Wykonanie tego zadania polega na utworzeniu procedury zdarzenia Przy wartości spoza listy . Procedura taka powinna wykonywać kolejno: 1. Wyświetlać pytanie, czy u\ytkownik na pewno chce wprowadzić nową wartość (mo\e nastąpił błąd podczas wpisywania ?) 2. Jeśli odpowiedz jest pozytywna to powinniśmy kontynuować 3. Instrukcją RunCommand z parametrem acCmdUndo nale\y wycofać zmiany dokonane w tym polu (na razie nie ma zmian, czyli wprowadzonej wartości nie mo\na zatwierdzić bo nie ma jej na liście) 4. Wyświetlić formularz przeznaczony do wprowadzania danych do tabeli (w naszym przypadku formularz WYKONAWCA) 5. Do tego formularza powinny zostać przepisane dane z pola edycji (argument procedury NoweDane) 6. Dalej następuje praca z formularzem (nie ma instrukcji) 7. Nadanie zmiennej Odpowiedz wartości acDataErrContinue w celu zablokowania komunikatów o błędach ĆWICZENIE 39 1. Oto treść procedury obsługującej zdarzenia Przy wartości spoza listy 2. Proszę umo\liwić wpisywanie do pola listy nowych wykonawców i ich rejestrowanie (formularz PLYTY) Sub numer_wykonawcy_NotInList(NoweDane As String, Odpowiedz As Integer) Dim odp As Integer odp = MsgBox("Czy chcesz dodać nowego wykonawcę?", 4 + 32) If odp = 6 Then DoCmd.RunCommand acCmdUndo DoCmd.RunCommand acCmdUndo DoCmd.OpenForm "WYKONAWCA", acNormal, , , acFormAdd Forms![wykonawca]![Nazwa_Wykonawcy] = NoweDane Odpowiedz = acDataErrContinue End If End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 63 MS Access 97 zaawansowane techniki programowania baz danych Po utworzeniu tej procedury pozostała nam jeszcze jedna czynność do zaprogramowania. Otó\ wartości z nowego rekordu nie zostaną automatycznie wpisane do naszego wyjściowego pola edycji (usunęliśmy je stamtąd akcją RunCommand). Aby się ponownie pojawiły musimy kolejno: 1. Wybrać formularz PLYTY, 2. Ponowić zapytanie pola edycji z listą wyboru 3. Ustawić wartość pola edycji na numer wykonawcy z formularza WYKONAWCY 4. Po wykonaniu tych czynności formularz WYKONAWCY mo\e zostać zamknięty Operacje podane w punktach 1, 2, 3 i 4 powinniśmy wykonać dla zdarzenia Przy zwolnieniu formularza WYKONAWCA ale tylko wtedy jeśli otwarty jest formularz PLYTY. Poni\ej podana jest szczegółowa procedura UWAGA: Działanie to ma sens tylko wtedy jeśli wywołaliśmy formularz WYKONAWCA opisany w poprzedniej procedurze sposób. Jeśli formularz WYKONAWCA otwarty jest niezale\nie i takie sytuacje mogą się powtarzać (nie powinny zgodnie z koncepcją bazy) to powinniśmy przy programowaniu przewidzieć taką sytuację wyświetlając na przykład odpowiednie pytanie. UWAGA Jeśli wcześniej nie przypisano zdarzeń do przycisków na formularzu WYKONAWCA, to nale\y to zrobić teraz albo samodzielnie , albo wykorzystując gotowe makro a nazwie PRZYCISKI. Procedura w formularzu WYKONAWCA: Sub Form_Unload(Cancel As Integer) Dim numer As Long numer = Me![numer_wykonawcy] If zaladowany("PLYTY") Then DoCmd.SelectObject acForm, "PLYTY" Forms![Plyty]![numer_wykonawcy].Requery Forms![Plyty]![numer_wykonawcy] = numer End If End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 64 MS Access 97 zaawansowane techniki programowania baz danych Wykorzystanie języka SQL- przykład SELECT Składnia SELECT [predicate] { * | table.* | [table.]field1 [, [table.]field2.[, ...]]} [AS alias1 [, alias2 [, ...]]] FROM tableexpression [, ...] [IN externaldatabase] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION] Instrukcja SELECT wykorzystuje następujące argumenty: Argument Opis Predicate Jedno ze słów kluczowych: ALL, DISTINCT, DISTINCTROW, or TOP. Wykorzystujemy do ograniczenia liczby rekordów otrzymanych w wyniku. Table Nazwa tabeli z której wybieramy rekordy. field1, field2 Nazwy pól z których pobieramy dane. If you include more than one field, they will be retrieved in the order listed. alias1, alias2 Nazwy kolumn u\ywane do wyświetlania uzyskanych danych w widoku Arkusza danych. Tableexpression Nazwa tabeli lub tabel z których chcemy pobrać dane. Externaldatabase Nazwa bazy danych zawierającej tabele podane w tableexpression, jeśli nie znajdują się w bie\ącej bazie danych. Minimalna składnia instrukcji SELECT wygląda następująco: SELECT fields FROM table Mo\na korzystać ze znaku (*) aby wybrać wszystkie pola. Na przykład z tabeli Employees: SELECT Employees.* FROM Employees; Nazwę pola mo\na poprzedzić nazwą tabeli i kropką. SELECT Employees.Department, SupvName W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 65 MS Access 97 zaawansowane techniki programowania baz danych FROM Supervisors, Employees WHERE Employees.Department = Supervisors.Department; Słowo kluczowe As słu\y do określania nowych nazw pól w widoku Arkusza danych SELECT [Birth Date] AS Birth FROM Employees; Instrukcja SELECT lub SELECT...INTO wybierają wszystkie rekordy. Jeśli chcemy wybrać tylko niektóre, spełniające zało\one kryteria nale\y skorzystać z klauzuli WHERE. Mo\na u\ywać tak\e predykatów ALL, DISTINCT, DISTINCTROW, or TOP. Jeśli u\yty jest jeden z predykatów DISTINCT, DISTINCTROW, or TOP, zapytanie jest filtrowane ju\ po wszystkich innych klauzulach instrukcji SQL Składnia SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]] FROM sourcetable ALL Domyślnie, jeśli nie wybierzemy inaczej u\ywane jest ALL. Poni\sze dwa przykład są równoznaczne: SELECT ALL * FROM Employees ORDER BY [Employee ID]; SELECT * FROM Employees ORDER BY [Employee ID]; DISTINCT DISTINCT u\ywa się wtedy, gdy nie chcemy włączać do zestawu wyników rekordów, które zawierają zdublowane dane w wybranych polach. SELECT DISTINCT [Last Name] FROM Employees DISTINCT jest równowa\ny ustawieniu we właściwościach kwerendy opcji Wartości Unikatowe na Tak DISTINCTROW DISTINCTROW u\ywa się wtedy aby zapytanie nie wyświetlało identycznych rekordów, a nie jak poprzednio tylko rekordów z takimi samymi wartościami w wybranych polach. Poni\szy kod SQL pokazuje zastosowanie DISTINCTROW do wyświetlenia tylko tych firm W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 66 MS Access 97 zaawansowane techniki programowania baz danych które zło\yły przynajmniej jedno zamówienie, nie wyświetlając równocześnie szczegółów zamówień: SELECT DISTINCTROW [Company Name] FROM Customers INNER JOIN Orders ON Customers.[Customer ID] = Orders.[Customer ID] ORDER BY [Company Name]; Jeśli nie będzie DISTINCTROW, ka\da firma pojawi się tyle razy na liście, ile zamówień zło\yła DISTINCTROW jest ignorowany jeśli zapytanie dotyczy tylko jednaj tabeli. DISTINCTROW jest równowa\ny ustawieniu we właściwościach kwerendy opcji Rekordy Unikatowe na Tak (wartość domyślna). TOP Wybiera tylko pierwsze rekordy w podanej ilości: SELECT TOP 25 [First Name], [Last Name] FROM Students WHERE [Graduation Year] = 1994 ORDER BY [Grade Point Average] DESC SELECT TOP 10 PERCENT [First Name], [Last Name] FROM Students WHERE [Graduation Year] = 1994 ORDER BY [Grade Point Average] DESC klauzula WHERE Za pomocą klauzuli WHERE mo\na filtrować rekordy, czyli decydować o tym, które rekordy zostaną włączone do wyniku zapytania. Składnia SELECT fieldlist FROM tableexpression WHERE criteria Polecenie SELECT z klauzulą WHERE wykorzystuje następujące argumenty. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 67 MS Access 97 zaawansowane techniki programowania baz danych Argument Description fieldlist nazwy pól wraz z aliasami i predykatami selekcji (ALL, DISTINCT, DISTINCTROW, or TOP), lub inne opcje instrukcji SELECT tableexpression Nazwa tabeli lub tabel criteria Wyra\enie, które musi być prawdziwe aby rekord pojawił się w wyniku zapytania (został wybrany) WHERE jest opcjonalne lecz jeśli zostanie dołączone, umieszczane jest po FROM. Na przykład wybór wszystkich pracowników z jednego departamentu lub w podanym zakresie wiekowym WHERE Dept = 'Sales' lub WHERE Age Between 18 And 30 Do klauzuli WHERE jest bardzo podobna klauzula HAVING. WHERE określa które rekordy zostaną wybrane a HAVING które rekordy będą wyświetlane ju\ po agregowaniu przez GROUP BY. Przykłady wyra\eń dla klauzuli WHERE SELECT [Last Name], Salary FROM Employees WHERE Salary > 21000; Klauzula WHERE mo\e składać się z 40 wyra\eń połączonych operatorami logicznymi And i Or. SELECT [Product ID], [Units In Stock] FROM Products WHERE [Units In Stock] <= [Reorder Level]; Literały typu data muszą być podane w formacie U.S., nawet jeśli u\ywa się innej wersji programu Access. Na przykład Maj 10, 1994, powinien być wprowadzony jako 5/10/94, na przykład: SELECT * FROM Orders WHERE [Shipped Date] = #5/10/94# Klauzula FROM W klauzuli FROM do łączenia danych z ró\nych tabel mo\na u\ywać operatorów połączeń LEFT JOIN and RIGHT JOIN. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 68 MS Access 97 zaawansowane techniki programowania baz danych Składnia FROM table1 [ LEFT | RIGHT ] JOIN table2 ON table1.field1 = table2.field2 Argumenty LEFT JOIN i RIGHT JOIN. Argument Description table1, table2 nazwy tabel field1, field2 Nazwy pól łączących. LEFT JOIN wyświetla wszystkie rekordy z tabeli po lewej stronie i tylko odpowiadające z tabeli po prawej RIGHT JOIN odwrotnie. Przykład: SELECT [Category Name], [Product Name] FROM Categories LEFT JOIN Products ON Categories.[Category ID] = Products.[Category ID]; Do połączeń wewnętrznych (połączone pola równe) słu\y operator INNER JOIN. Połączenia INNER, RIGHT i LEFT mo\na zagnie\d\ać ze sobą. SELECT [Department Name], [First Name] & " " & [Last Wyświetla wszystkie wydziały, Name] AS Name nawet jeśli nie ma w nich pracowników FROM Departments LEFT JOIN Employees ON Departments.[Department ID] = Employees.[Department ID] ORDER BY [Department Name]; SELECT [Last Name] & ", " & [First Name] AS Name, Wyświetla wszystkich [Department Name] pracowników nawet jeśli nie są przypisani FROM Departments RIGHT JOIN Employees do wydziałów ON Departments.[Department ID] = Employees.[Department ID] ORDER BY [Last Name] & ", " & [First Name]; W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 69 MS Access 97 zaawansowane techniki programowania baz danych Filtrowanie przez formularz ĆWICZENIE 40 1. Proszę wczytać bazę danych, która znajduje się w pliku muzyka97_6.mdb 2. Nale\y wykonać filtrowanie przez formularz dla tabeli KLIENCI. W bazie danych muzyka97_6.mdb zostały dodane następujące obiekty: " Z bazy danych Northwind.mdb została zaimportowana tabela PRODUKTY. Będziemy filtrować produkty przez pola cena jednostkowa i nazwa produktu. " Utworzono formularz zespolony o następującej budowie: - formularz główny (niezwiązany) o nazwie PRODUKTY zawierający trzy pola niezwiązane: wsp, kryteria, kryteria1 oraz przyciski słu\ące do filtrowania: - formularz wyświetlający dane z listy produktów w widoku Arkusza danych, o nazwie PRODUKTY_PF - jest to podformularz do formularza PRODUKTY. 3. Tworzenie mechanizmu filtrowania zaczniemy od obsługi przycisku Filtruj a konkretnie od procedury obsługi zdarzenia Przy kliknięciu . Ta procedura powinna wykonywać następujące działania: " Na podstawie danych wprowadzonych do pól nazwa wsp, kryteria, kryteria1, powinna tworzyć kryterium dla klauzuli WHERE instrukcji SELECT. Kryterium jest postaci ciągu znaków " W tym celu wprowadzimy dwie zmienne: Kod_sql - zmienna znakowa zawierająca treść instrukcji SELECT Kryteria - zmienna znakowa zawierająca treść klauzuli WHERE bez słowa kluczowego WHERE " Zmienną kod_sql zainicjujemy w postaci ciągu znaków instrukcji SELECT(...)WHERE . Na końcu koniecznie musi stać znak spacji! " Teraz musimy zamienić wartości z pól wsp, kryteria i kryteria1 na ciągi znaków, utworzyć poprawny ciąg znaków będący kryterium i dołączyć go do instrukcji SELECT " Kolejna czynność to zmiana zródła rekordów dla podformularza na utworzoną przez nas instrukcję SELECT " Następna czynność to ponowienie kwerendy dla podformularza 4. Poni\ej znajduje się treść procedur do filtrowania tylko po nazwie oraz po nazwie i cenie jednocześnie. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 70 MS Access 97 zaawansowane techniki programowania baz danych Sub Polecenie5_Click() Dim kod_sql As String, kryteria As String, zrodlo As String ' Utworzenie klauzuli WHERE wykorzystującej kryteria wprowadzone ' przez u\ytkownika i ustawienie właściwości "yródło rekordów" formularza "Produkty_pf". ' Chr(39) to apostrof ' Chr(42) to gwiazdka kod_sql = "SELECT DISTINCTROW Produkty.[Id produktu],Produkty.[Cena jednostkowa], Produkty.[Nazwa produktu], Produkty.[id kategorii] FROM Produkty WHERE " kryteria = "(Produkty.[Nazwa produktu]) Like " & Chr(39) & Chr(42) & Me!kryteria & Chr(42) & Chr(39) zzrodlo = kod_sql & kryteria Me![Produkty_pf].Form.RecordSource = zrodlo Me![Produkty_pf].Requery End Sub Sub Polecenie6_Click() Dim kod_sql As String, kryteria As String, zrodlo As String, kryteria2 As String kod_sql = "SELECT DISTINCTROW Produkty.[Id produktu],Produkty.[Cena jednostkowa], Produkty.[Nazwa produktu], Produkty.[id kategorii] FROM Produkty WHERE " kryteria = "(Produkty.[Nazwa produktu]) Like " & Chr(39) & Chr(42) & Me!kryteria & Chr(42) & Chr(39) kryteria2 = "(Produkty.[cena jednostkowa])>=" & Me!kryteria1 zrodlo = kod_sql & kryteria & " and " & kryteria2 Me![Produkty_pf].Form.RecordSource = zrodlo Me![Produkty_pf].Requery End Sub ĆWICZENIE 41 Jako samodzielne ćwiczenie proszę napisać procedurę obsługi zdarzenia Przy kliknięciu dla przyciksu Poka\ wszystko. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 71 MS Access 97 zaawansowane techniki programowania baz danych Podłączanie danych z zewnętrznych zródeł Proces podłączania tabel ze zródeł zewnętrznych przebiega w następujących krokach: 1. Za pomocą metody CreateTableDef dla bie\ącej bazy danych (jeśli tabela ma być przyłączona w bie\ącej bazie danych) nale\y utworzyć obiekt TableDef. 2. Następnie nale\y określić właściwości Connect i SourceTableName obiektu TabelDef. 3. Za pomocą metody Append kolekcji TableDefs nale\y obiekt utworzony w punkcie pierwszym, o właściwościach określonych w punkcie drugim dołączyć do kolekcji TableDefs. ĆWICZENIE 42 Proszę utworzyć nowy niezwiązany formularz o nazwie DOLACZ i stworzyć w nim trzy przyciski poleceń. Nale\y oprogramować pierwsze dwa przyciski - podłącz tabelę xls i podłącz tabelę dbf Patrz uwaga pod ćwiczeniem 43. Sub Polecenie1_Click() Dim def_tab As TableDef Set def_tab = CurrentDb.CreateTableDef("z_excela") def_tab.Connect = "Excel 5.0;DATABASE=C:\e.xls" def_tab.SourceTableName = "lampa$" CurrentDb.TableDefs.Append def_tab End Sub Sub Polecenie2_Click() Dim def_tab As TableDef Set def_tab = CurrentDb.CreateTableDef("z_dbf") def_tab.Connect = "dBASE III;DATABASE=C:\" def_tab.SourceTableName = "e#dbf" CurrentDb.TableDefs.Append def_tab End Sub ĆWICZENIE 43 Proszę napisać procedurę zdarzenia dla odłączania obu tabel. Sub Polecenie3_Click() CurrentDb.TableDefs.Delete "z_excela" CurrentDb.TableDefs.Delete "z_dbf" End Sub UWAGA dla powy\szych procedur muszą istnieć poni\sze pliki: c:\e.xls z arkuszem o nazwie lampa, oraz plik c:\e.dbf W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 72 MS Access 97 zaawansowane techniki programowania baz danych Obsługa błędów wykonania Visual Basic posiada dosyć prosty mechanizm obsługi błędów wykonania. W poprzednich ćwiczeniach podczas próby dołączenia plików z excela, czy z dbf mogły zaistnieć ró\ne błędy wykonania na przykład nie mo\na znalezć dołączanego pliku lub istnieje ju\ tabela o takiej samej nazwie mo\na wzbogacić nasz kod o obsługę tych błędów: Sub Polecenie1_Click() On Error GoTo byk Dim def_tab As TableDef Set def_tab = CurrentDb.CreateTableDef("z_excela") def_tab.Connect = "Excel 5.0;DATABASE=C:\e.xls" def_tab.SourceTableName = "lampa$" CurrentDb.TableDefs.Append def_tab ' \eby procedura nie weszła do obsługi błędu gdy jest prawidłowo wykonywana nale\y zastosować exit sub Exit Sub byk: Select Case Err.Number sprawdzam numer błędu Case 3012 ' obiekt o podanej nazwie ("z_excela") ju\ istnieje ' DECYZJA : usuwamy istniejący obiekt i próbujemy ponowić linię w której błąd powstał CurrentDb.TableDefs.Delete "z_excela" Resume Case 3125 ' w przypadku pliku dołączanego z excela podano błędną ' nazwę arkusza (nie istnieje arkusz o nazwie "lampa" ' znak dolara jest tylko symbolicznym oznaczeniem arkusza ' DECYZJA: ' wyswietlamy odpowiedni komunikat i przerywamy procedurę MsgBox "Podano nieprawidłową nazwę arkusza" + vbCr + _ " spodziewana nazwa to " Case 3011 ' nieprawidłowa ście\ka dostępu do arkusza "lampa" ' na przykład nie istnieje plik c:\e.xls ' DECYZJA: ' wyświetlamy odpowiedni komunikat i przerywamy procedurę MsgBox " Nie mo\na odnalezć pliku c:\e.xls" + vbCr + _ " lub arkusza o nazwie lampa" Case Else MsgBox " numer błędu : " + Str(Err.Number) + vbCr + _ " opis błędu : " + Err.Description + vbCr + _ " plik pomocy : " + Err.HelpFile + vbCr End Select End Sub W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel(0-22) 654-55-22 , fax (0-22) 654-55-23 73 MS Access 97 zaawansowane techniki programowania baz danych Opis: W powy\szej procedurze instrukcja On Error GoTo byk powoduje włączenie obsługi błędów. W przypadku wystąpienia błędu nastąpi skok z instrukcji, która spowodowała błąd do instrukcji oznaczonej etykietą byk : Instrukcja Resume powoduje kontynuację wykonywania programu od powtórzenia instrukcji która błąd spowodowała UWAGA. Instrukcja Resume, w zale\ności od potrzeb mo\e wystąpić w trzech postaciach: 1. Resume - powoduje wznowienie wykonania programu od instrukcji w której wystąpił błąd. 2. Resume Next - powoduje wznowienie wykonania programu od następnej instrukcji po instrukcji w której wystąpił błąd. 3. Resume nr_wiersza (lub etykieta) - powoduje wznowienie wykonywania programu od wiersza lub podanej etykiety. W sprawie informacji i zapisów na szkolenia prosimy dzwonić: tel. (0-22) 654-55-22 , fax (0-22) 654-55-23 74