211 99 7MB
Polish Pages 192 [180] Year 2010
Autorzy: Danuta Mendrala (wstęp, rozdziały 1 – 8), Marcin Szeliga (wstęp, rozdziały 1 – 8) Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Redaktor prowadzący: Michał Mrowiec Projekt okładki: Maciej Pasek Fotografia na okładce została wykorzystana za zgodą iStockPhoto Inc. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: [email protected] WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie?cwac10_p Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Przykładową bazę danych omawianą w książce można pobrać, klikając w poniższy odnośnik: ftp://ftp.helion.pl/przyklady/cwac10.zip ISBN: 978-83-246-3289-3 Nr katalogowy: 6078 Copyright © Helion 2011 Printed in Poland.
Spis treści Wstęp Rozdział 1. Baza danych
5 9
Rozdział 2. Tabele
31
Rozdział 3. Relacje
55
Rozdział 4. Kwerendy
75
Kwerendy wybierające dane Kwerendy krzyżowe Kwerendy tworzące tabele Kwerendy aktualizujące Kwerendy dołączające Kwerendy usuwające Ćwiczenia dodatkowe
76 94 96 98 99 102 104
Rozdział 5. Formularze
107
Rozdział 6. Raporty
133
Rozdział 7. Makra
147
Rozdział 8. Moduły
157
4
Access 2010 PL • Ćwiczenia praktyczne
Wstęp Wchodzący w skład najnowszej wersji pakietu Microsoft Office program Microsoft Access 2010 to jeden z wielu dostępnych systemów zarządzania bazami danych (SZBD). Jednak jego integracja z środowiskiem programistycznym, umożliwiająca utworzenie interfejsu bazy danych, oraz ograniczenie do jednej liczby baz, które mogą być w nim uruchomione, powodują, że program Access różni się od innych SZBD — jest raczej przykładem narzędzi IV generacji, czyli generatorem aplikacji (języki programowania wysokiego poziomu, takie jak Visual Basic czy C++, zaliczane są do narzędzi III generacji), niż klasycznym systemem zarządzania bazami danych. Ponadto Access został zaprojektowany z myślą o szerokiej grupie użytkowników, którzy nie są zawodowymi informatykami. Pracę z programem ułatwiają liczne kreatory, które metodą uzyskiwania odpowiedzi na kolejne pytania pomagają w tworzeniu bazy danych, zwalniając użytkowników z obowiązku studiowania teorii relacyjnych baz danych czy zasad programowania aplikacji sterowanych zdarzeniami. W konsekwencji do samodzielnego utworzenia nie tylko w pełni funkcjonalnej bazy danych, ale również umożliwiającego korzystanie z niej innym osobom interfejsu użytkownika, wystarczy wykonać kilkadziesiąt zaprezentowanych w tej książce ćwiczeń.
6
Access 2010 PL • Ćwiczenia praktyczne
Układ książki W poszczególnych rozdziałach książki zawarto ćwiczenia, w których przedstawiono różne typy obiektów bazodanowych. Ponieważ obiekty składające się na bazę danych tworzą określoną hierarchię (tj. pewne obiekty zależą od innych), ćwiczenia powinny być wykonywane po kolei, nie tylko w poszczególnych rozdziałach, ale również w ramach całej książki. W poszczególnych rozdziałach zostały opisane następujące zagadnienia: 1. Rozdział 1., „Baza danych”, zawiera ćwiczenia przedstawiające tworzenie, otwieranie i konfigurowanie bazy danych. 2. Rozdział 2., „Tabele”, poświęcony został podstawowym typom obiektów wszystkich relacyjnych baz danych — tabelom, metodom ich tworzenia, modyfikowania i wypełniania danymi. 3. Ćwiczenia z rozdziału 3., „Relacje”, pomogą zrozumieć podstawową cechę relacyjnych baz danych — zapisywanie informacji o różnych typach obiektów (np. o filmach i aktorach) w odrębnych tabelach. Innymi słowy, w rozdziale tym przedstawiono zasady normalizacji baz danych i tworzenia relacji łączących poszczególne tabele. 4. Rozdział 4., „Kwerendy”, zawiera ćwiczenia pozwalające tworzyć, modyfikować i usuwać kwerendy — zapisane w bazie danych instrukcje strukturalnego języka zapytań (SQL), pozwalające odczytywać, modyfikować, wstawiać i usuwać dane zapisane w tabelach. 5. Rozdział 5., „Formularze”, poświęcony został podstawowym składnikom interfejsu klienta bazy danych, formularzom, za pomocą których dane przechowywane w połączonych relacjami tabelach, a zwracane przez kwerendy, mogą być wyświetlane, modyfikowane, usuwane lub dodawane. 6. Ćwiczenia z rozdziału 6., „Raporty”, to okazja do nauczenia się, jak w formie raportów zaprezentować użytkownikom dane przechowywane w bazie i wyniki wyliczone na ich podstawie. 7. Rozdział 7., „Makra”, zawiera ćwiczenia związane z tworzeniem własnych makropoleceń — grup czynności wykonywanych przez SZBD Access jak jedno polecenie.
Wstęp
7
8. Ćwiczenia z rozdziału 8., „Moduły”, są krótkim
wprowadzeniem do programowania w języku Visual Basic for Applications, języku programowania wszystkich programów wchodzących w skład pakietu Microsoft Office. Pod adresem ftp://ftp.helion.pl/przyklady/cwac10.zip znajduje się finalna wersja tworzonej w ramach ćwiczeń bazy Filmoteka.
Konwencje i oznaczenia Poniżej zostały przedstawione zastosowane w książce konwencje i symbole. Czcionka o stałej szerokości
Czcionka ta będzie używana do prezentacji instrukcji i słów kluczowych, które muszą być wprowadzone za pomocą klawiatury, oraz nazw tabel, kolumn itp. Kursywa Kursywa będzie wykorzystywana do zaznaczania nazw opcji programu Access, plików i katalogów oraz adresów internetowych. Będzie również stosowana do wyróżniania angielskich odpowiedników wprowadzanych pojęć. Pogrubienie Najważniejsze fragmenty tekstu zostaną wyróżnione pogrubieniem.
8
Access 2010 PL • Ćwiczenia praktyczne
1 Baza danych Tak jak wszystkie programy, bazy danych działają w określonym środowisku — w ich przypadku środowiskiem jest system zarządzania bazami danych (SZBD), dla którego zostały utworzone — i, tak jak w przypadku innych programów, możliwe, choć czasami dość skomplikowane, jest przeniesienie bazy danych z jednego środowiska do innego. Sama baza danych jest uporządkowanym zbiorem obiektów określonych typów, np. tabel i kwerend, przy czym podstawowymi i wymaganymi obiektami relacyjnej bazy danych są tabele. W ciągu ostatnich dwudziestu lat rynek systemów bazodanowych został zdominowany przez jeden model baz danych — relacyjne bazy danych. Jak sugeruje nazwa, relacyjna baza danych jest bazą składającą się z relacji, a podstawowy obiekt takiej bazy danych, tabela, jest konkretną reprezentacją danej relacji. Relacyjny model baz danych został stworzony w 1970 roku przez pracującego w laboratoriach firmy IBM doktora E. F. Codda i przedstawiony w pracy Relacyjny model danych dla dużych banków danych.
W rozdziale 2. opisana została struktura tabel, w tym rozdziale wystarczy wspomnieć, że każda tabela składa się z pewnej liczby wierszy i kolumn, na przecięciu których znajdują się pola. W modelu relacyjnych baz danych przyjmuje się, że: 1. kolejność wierszy i kolumn w tabelach jest nieistotna, 2. wiersze zawierające takie same dane są identyczne.
10
Access 2010 PL • Ćwiczenia praktyczne
Natomiast w tabeli przedstawiającej konkretny przypadek relacji identyczne dane (wartości pól) będą przechowywane w różnych wierszach. Można powiedzieć, że różnica pomiędzy relacją a tabelą polega na tym, że w pierwszym przypadku ta sama informacja będzie zapisana tylko raz, niezależnie od liczby powtórzeń, natomiast w tabelach te same dane (np. marka samochodu) będą zapisane w różnych wierszach. Oba obiekty można wyobrazić sobie jako zbiory elementów, np. zbiór informacji o markach samochodów. Access będący systemem zarządzania bazami danych odpowiada jedynie za przechowywanie danych w spójnej postaci oraz realizowanie żądań użytkowników, dotyczących pobierania czy modyfikowania tych danych — stworzenie bazy danych jest zadaniem użytkownika tego programu (dlatego we wstępie nazwaliśmy Access „generatorem aplikacji”). Choć liczba baz danych, które możemy tworzyć za jego pomocą, jest niczym nieograniczona, do ich działania niezbędne jest wykupienie odpowiedniej licencji klienckiej programu Microsoft Access. Program Access wchodzi w skład pakietu Microsoft Office 2010 Professional — edycje Standard, Home oraz Student nie zawierają SZBD Access. Ć W I C Z E N I E
1.1
Tworzenie pustej bazy danych
Po zainstalowaniu i aktywowaniu SZBD Access 2010 możemy utworzyć nową, działającą w tym środowisku bazę danych. W tym przypadku baza danych zapisana jest na dysku w postaci jednego pliku z rozszerzeniem .accdb. W książce zakładamy, że czytelnik przeprowadził standardową instalację programu Access 2010, a używanym systemem operacyjnym jest Windows 7.
Aby utworzyć nową bazę danych: 1. Uruchom SZBD Access, kolejno wybierając z menu Start/Wszystkie programy/Microsoft Office/Microsoft Access 2010. 2. Wyświetlona zostanie zakładka Nowe menu Plik. Od wersji 2007 w programach pakietu Office statyczny pasek menu został zastąpiony przez wstążkę, której zawartość zależy od wykonywanej w danej chwili operacji. W wersji 2010 udostępniający najbardziej ogólne polecenia i ustawienia przycisk Office został zastąpiony rozbudowanym menu Plik.
Rozdział 1. • Baza danych
11
3. Podaj nazwę i lokalizację pliku bazy danych. 4. Utwórz nową bazę danych, klikając przycisk Utwórz
(rysunek 1.1).
Rysunek 1.1. Access 2010 pozwala tworzyć puste bazy danych oraz — co zostało przedstawione w dalszej części rozdziału — budować bazy danych na podstawie gotowych szablonów 5. Plik o podanej nazwie zostanie utworzony, a na ekranie
wyświetli się okno tworzenia tabeli w trybie wprowadzania danych. SZBD Access automatycznie zapisuje w pliku bazy danych wszystkie zmiany, takie jak tworzenie albo modyfikowanie obiektów bazodanowych (np. tabel) czy wprowadzanie lub modyfikowanie zapisanych w bazie informacji (np. tytułów filmów). 6. Zamknij bazę danych, klikając przycisk Plik i wybierając opcję
Zamknij bazę danych.
12
Access 2010 PL • Ćwiczenia praktyczne
Ć W I C Z E N I E
1.2
Otwieranie istniejącej bazy danych
Aby otworzyć zapisaną w pliku bazę danych: 1. Jeżeli wyłączyłeś SZBD Access 2010, dwukrotnie kliknij lewym przyciskiem myszy plik bazy danych (plik .accdb) — Access zostanie uruchomiony, a wybrana baza danych otwarta. 2. Jeżeli SZBD Access 2010 jest uruchomiony, otwórz bazę danych — możesz to zrobić na kilka sposobów: T z menu Plik wybierając opcję Otwórz, T naciskając kombinację klawiszy Ctrl+O, T rozwijając menu Plik i klikając znajdującą się w lewym okienku nazwę jednej z ostatnio używanych baz danych, T przechodząc na zakładkę Ostatnio używane menu Plik i klikając nazwę jednego z ostatnio otwieranych plików baz danych wyświetlanych w sekcji Ostatnio używane bazy danych. 3. Wybór jednej z dwóch pierwszych metod spowoduje wyświetlenie standardowego okna dialogowego systemu Windows, pozwalającego na otworzenie zapisanego na dysku pliku. W takim przypadku po wskazaniu nazwy pliku baza danych zostanie otwarta. 4. Po wybraniu metod 2c lub 2d wskazana baza danych zostanie natychmiast otwarta. Ć W I C Z E N I E
1.3
Zmiana domyślnej lokalizacji plików
Domyślnie pliki bazodanowe są zapisywane w folderze dokumentów zalogowanego do systemu użytkownika (np. w folderze C:\Users\ Marcin\Documents). Ponieważ dostęp do tego folderu powinien mieć wyłącznie dany użytkownik, a bazy danych z reguły wykorzystywane są przez kilku użytkowników systemu, w przypadku komputera, z którego korzysta kilka osób, lub komputera podłączonego do sieci warto zmienić domyślną lokalizację plików baz danych. W tym celu: 1. Rozwiń menu Plik i kliknij przycisk Opcje. 2. Na zakładce Ogólne znajdź sekcję Tworzenie baz danych.
Rozdział 1. • Baza danych
13
3. Zmień ścieżkę zapisaną w polu Domyślny folder bazy danych
(rysunek 1.2).
Rysunek 1.2. Nazwa większości opcji programu Access dobrze opisuje ich znaczenie, jedną z takich opcji jest domyślna lokalizacja folderu baz danych 4. Zatwierdź wprowadzone zmiany przyciskiem OK. Ć W I C Z E N I E
1.4
Wyszukiwanie plików bazodanowych
Access 2010 nie umożliwia wyszukania znajdującego się „gdzieś na dysku” pliku bazy danych — do tego celu musimy wykorzystać standardowe narzędzia systemu Windows. W najprostszym przypadku, aby znaleźć plik bazodanowy, wystarczy rozwinąć menu Start i wpisać w polu wyszukiwania rozszerzenie accdb. Po chwili w menu Start pojawią się wszystkie znalezione pliki bazy danych programu Access 2010. Inny, pozwalający na bardziej precyzyjne określanie warunków wyszukiwania sposób polega na skorzystaniu z Eksploratora Windows. 1. Uruchom Eksploratora Windows. 2. W lewym oknie programu zaznacz pozycję Biblioteki (biblioteki to wirtualne foldery pozwalające na wyświetlanie i przeglądanie
14
3. 4.
5.
6.
Access 2010 PL • Ćwiczenia praktyczne
znajdujących się w różnych folderach plików — Windows 7 początkowo zawierał cztery predefiniowane biblioteki: Dokumenty, Muzyka, Obrazy i Wideo; później dodana została jeszcze biblioteka Podcasts). W prawym górnym rogu Eksploratora znajduje się pole wyszukiwania — wpisz w nim accdb. Rozpocznie się wyszukiwanie plików i folderów spełniających podane kryterium wyszukiwania. Zielony pasek przesuwający się w pasku adresu będzie sygnalizował postęp wyszukiwania. Po chwili w głównym oknie Eksploratora zobaczysz wszystkie pliki spełniające podane kryterium, czyli pliki baz danych SZBD Access 2010 oraz pliki zawierające ciąg znaków accdb. Jeżeli jednak na dyskach komputera przechowujemy tysiące czy nawet miliony plików, wynik ich przeszukania będzie za każdym razem zawierał zbyt wiele pozycji, żeby rzeczywiście ułatwić znalezienie tej jednej, szukanej bazy danych. Rozwiązać ten problem możemy, definiując dodatkowe filtry wyszukiwania (rysunek 1.3). Aby to wykonać: T Kliknij lewym przyciskiem myszy okienko wyszukiwania — zostanie wyświetlona lista ostatnio szukanych fraz oraz trzy rodzaje filtrów wyszukiwania. T Z listy filtrów wybierz Data modyfikacji. T Zostanie wyświetlony kalendarz — zaznaczając na nim dowolną datę, wyszukamy bazy danych zmodyfikowane tego dnia. Z reguły nie znamy dokładnej daty ostatniej modyfikacji dokumentu, dlatego wybierz opcję Wcześniej w tym roku. T Po chwili główne okienko Eksploratora będzie zawierało bazy danych programu Access z bieżącego roku.
Ć W I C Z E N I E
1.5
Szablon bazy danych Northwind
Firma Microsoft do SZBD Access dołącza szablony typowych baz danych, wśród nich szablon bazy firmy zajmującej się handlem artykułami spożywczymi. Samodzielne przeanalizowanie tej bazy pozwala nie tylko na zapoznanie się z możliwościami programu Access, ale również
Rozdział 1. • Baza danych
15
Rysunek 1.3. Do wyszukiwania plików bazodanowych należy używać narzędzi systemu Windows — pól wyszukiwania menu Start lub Eksploratora
na wykorzystanie cennych przykładów gotowych rozwiązań konkretnych problemów. Struktura tej bazy jest bowiem jawna. Każdy z jej użytkowników może więc wzorować się na tabelach czy formularzach utworzonych przez inżynierów firmy Microsoft. Żeby utworzyć bazę danych Northwind: 1. Uruchom program Access. 2. Wyświetlone automatycznie menu Plik będzie zawierało m.in. okno Dostępne szablony. 3. Kliknij znajdujący się w tym oknie przycisk Przykładowe szablony. 4. Zaznacz szablon Northwind. (Jeżeli ten szablon nie jest dostępny, uruchom instalator pakietu Office 2010, wybierz opcję Dodaj lub usuń funkcje, kliknij pozycję Microsoft Access i z menu kontekstowego wybierz Uruchom wszystko z mojego komputera). 5. Ewentualnie zmień nazwę tworzonej bazy danych i lokalizację jej pliku.
16
Access 2010 PL • Ćwiczenia praktyczne
6. Kliknij przycisk Utwórz. Jeżeli zostanie wyświetlone ostrzeżenie
7. 8.
9.
10.
11.
12. 13.
o zablokowaniu niektórych funkcji utworzonej bazy danych, kliknij znajdujący się na pasku ostrzeżenia przycisk Włącz zawartość. Po uruchomieniu bazy Northwind wyświetlony zostanie ekran logowania. Wybierz z listy dowolnego pracownika. Otwarty zostanie główny formularz bazy danych Northwind. Przy jego użyciu możemy uruchamiać pozostałe formularze, raporty i kwerendy bazy danych. W lewym okienku zobaczymy listę aktywnych (tj. już złożonych, ale jeszcze niezrealizowanych) zamówień. Jeżeli to okienko jest puste, zaloguj się jako inny pracownik. W środkowym okienku wyświetlone zostaną towary, których stan na magazynie jest niższy od określonego minimalnego zapasu. W prawym oknie zobaczymy odnośniki, które pozwalają wyświetlić formularze, kwerendy i raporty przykładowej bazy danych, a na pasku formularza znajdziemy trzy przyciski, umożliwiające odpowiednio: T Złożenie nowego zamówienia sprzedaży, T Złożenie nowego zamówienia kupna, T Odświeżenie widocznych w tym formularzu danych. Natomiast w dolnej części formularza wyświetlony zostanie wykres rocznego przychodu (rysunek 1.4). Poświęć trochę czasu na pracę z formularzami i raportami bazy Northwind.
Ć W I C Z E N I E
1.6
Tworzenie bazy danych na podstawie szablonu
Większość szablonów ma ułatwić użytkownikom stworzenie własnej bazy danych, a nie demonstrować możliwości programu Access 2010. W przeciwieństwie do szablonu Northwind, nie zawierają one przykładowych danych i z reguły liczą znacznie mniej tabel, formularzy i projektów.
Rozdział 1. • Baza danych
17
Rysunek 1.4. Pokazujący możliwości SZBD Access główny formularz przykładowej bazy danych Northwind
Przypuśćmy, że chcemy zbudować bazę danych uczniów (lub studentów) i ich opiekunów. W tym celu: 1. Uruchom program Access 2010. 2. Rozwiń sekcję Nowe menu Plik. 3. Kliknij przycisk Przykładowe szablony (zwróć uwagę, że dodatkowe szablony baz danych można pobrać z internetu). 4. Zaznacz szablon Studenci i uczniowie. 5. Ewentualnie zmień nazwę tworzonej bazy danych i jej lokalizację, a następnie kliknij przycisk Utwórz. Po chwili baza danych zostanie utworzona i uruchomiona. 6. Utworzona baza danych zawiera kilka obiektów. Żeby im się przyjrzeć: T Zamknij automatycznie wyświetlony formularz Lista studentów/uczniów. T Wyświetl Okienko nawigacji. T Domyślnie obiekty bazy danych są podzielone na kategorie: w górnej części znajdziemy obiekty związane z uczniami lub studentami, w środkowej — z ich opiekunami,
18
Access 2010 PL • Ćwiczenia praktyczne
a w dolnej części okienka nawigacji znajdują się pozostałe obiekty bazy danych (rysunek 1.5). Rysunek 1.5. Sposób grupowania obiektów bazy danych można zmienić, klikając znajdującą się na pasku okienka nawigacji ikonę skierowanej w dół strzałki. W ten sam sposób można wyszukiwać i filtrować widoczne obiekty bazodanowe. Wyświetl je według typów — w tym widoku wszystkie tabele znajdziemy na górze, pod nimi będą widoczne kolejno kwerendy, formularze i raporty
Baza danych zawiera tylko dwie tabele: w tabeli Opiekunowie przechowywane będą dane opiekunów, a w tabeli Studenci i uczniowie — dane ich podopiecznych. T Baza danych zawiera też dwie kwerendy, trzy formularze i kilka raportów. 7. Żeby wstawić dane bezpośrednio do tabeli: T W okienku nawigacji kliknij dwukrotnie lewym przyciskiem myszy tabelę Studenci i uczniowie. T Wpisz przykładowe dane kilku uczniów. T Z lewej strony każdego wiersza wyświetlany jest znak + (plus). Oznacza on, że z tabelą Studenci i uczniowie powiązana jest inna tabela. Kliknij znak plus znajdujący się obok dolnego wiersza. T Zostanie wyświetlone okno arkusza danych powiązanej tabeli Opiekunowie. W tym przypadku na ekranie nie pojawią się żadne informacje o opiekunach, bo nikogo nie wpisaliśmy jeszcze do bazy. T Wpisz dane opiekuna wybranego ucznia i zamknij okno tabeli. T
Rozdział 1. • Baza danych
19
8. Żeby wstawić lub zmienić dane za pośrednictwem formularza:
Wyświetl formularz Lista studentów/uczniów. T Wpisz podstawowe dane nowego ucznia. T Ustaw kursor nad automatycznie wygenerowanym identyfikatorem ucznia (jego kształt zmieni się na dłoń z wyciągniętym palcem wskazującym) i kliknij go lewym przyciskiem myszy — wyświetlony zostanie formularz Szczegółowe dane studenta/ucznia. T Zwróć uwagę, że formularz zawiera dane wybranego w poprzednim formularzu ucznia, a automatycznie włączony filtr nie pozwala wyświetlić danych innych uczniów. T Wpisz pozostałe dane ucznia — ten formularz pozwala wstawić dane do wszystkich pól tabeli Studenci i uczniowie. 9. Żeby wyświetlić wprowadzone dane w postaci raportu: T Wróć do formularza Lista studentów/uczniów. T Z prawej strony paska narzędzi tego formularza znajduje się pole wyboru Raporty — rozwiń je i wybierz raport Lista telefonów studentów/słuchaczy. T Wybrany raport zostanie wyświetlony. Zwróć uwagę, że dane raportu mogą być skopiowane, a ich kliknięcie może nawet spowodować wyświetlenie formularza czy innego raportu, ale ich modyfikacja jest niemożliwa. T
Ć W I C Z E N I E
1.7
Kompaktowanie plików bazodanowych
Pliki baz danych programu Access w krótkim czasie osiągają znaczne rozmiary, przekraczające wielkość wynikającą z liczby zapisanych w bazie danych. W pewnym stopniu związane jest to z automatycznym tworzeniem obiektów systemowych, takich jak np. indeksy, ale głównym powodem jest wzrastające nieuporządkowanie zapisanych danych. Prezentowane w formie tabelarycznej, czyli w postaci składających się z kolumn i wierszy tabel, dane w pliku zapisane są w postaci binarnej. Określone bloki ciągłej pamięci przechowują wartości kolejnych pól danej tabeli, ale bloki takie wypełnione są tylko w pewnej części — kilkanaście procent przestrzeni takich bloków pozostaje puste — w ten sposób zmiany danych nie wymagają czasochłonnego „przepisywania” wielu bloków, bo np. informacja o kolejnym filmie może być
20
Access 2010 PL • Ćwiczenia praktyczne
zapisana w pustym obszarze odpowiedniego bloku. W trakcie pracy z bazą danych liczba tych pustych obszarów stale rośnie, w konsekwencji zwiększa się rozmiar pliku bazy danych. Co gorsza, zbyt duże „poszatkowanie” bloków danych obniża, zamiast poprawiać, wydajność bazy danych. Dlatego bazy danych SZBD Access powinny być regularnie kompaktowane — w ramach tego w pełni automatycznego procesu porządkowana jest fizyczna struktura bazy danych. Aby uporządkować fizyczną strukturę bazy danych: 1. Uruchom wybraną bazę danych (np. bazę utworzoną na podstawie szablonu Northwind). 2. Rozwiń menu Plik i kliknij znajdujący się na zakładce Informacje przycisk Kompaktuj i napraw bazę danych. 3. Baza danych zostanie uporządkowana, zamknięta i ponownie otworzona. Możliwe jest również automatyczne kompaktowanie zamykanej bazy danych. W tym celu: 1. Otwórz wybraną bazę danych. 2. Z menu Plik wybierz Opcje. 3. Przejdź do zakładki Bieżąca baza danych i zaznacz pole wyboru Kompaktuj przy zamknięciu. Od tej pory struktura fizyczna bazy danych będzie automatycznie porządkowana podczas zamykania. Ć W I C Z E N I E
1.8
Zmiana domyślnego formatu bazy danych
Domyślnie bazy danych budowane w SZBD Access 2010 zapisywane są w formacie zgodnym z wersją 2007 programu Access, co nie pozwala na ich otwieranie i modyfikowanie w programach Access 2002 i 2003. Jeżeli jednak zachowanie zgodności z wcześniejszymi wersjami programu jest konieczne, możemy zmienić domyślny format bazy danych. W tym celu: 1. Z menu Plik wybierz Opcje. 2. Rozwiń znajdujące się na zakładce Ogólne pole wyboru Domyślny format pliku i wybierz pozycję Access 2002 – 2003.
Rozdział 1. • Baza danych
21
Ć W I C Z E N I E
1.9
Konwertowanie baz danych
Bazy danych utworzone we wcześniejszych wersjach programu Access mogą być w łatwy sposób przekonwertowane do postaci pliku SZBD Access 2010. W niektórych przypadkach możliwa jest również konwersja bazy zapisanej w formacie Access 2010 do postaci umożliwiającej pracę i modyfikowanie bazy we wcześniejszych wersjach programu. Bezpośrednia konwersja możliwa jest do pliku wersji SZBD Access 2000 lub późniejszej, o ile baza danych nie wykorzystuje funkcji niedostępnych we wcześniejszych wersjach programu Access.
Aby umożliwić użytkownikom programu Access 2000 korzystanie z bazy zapisanej w formacie Access 2007/2010: 1. Utwórz nową bazę danych. 2. Dodaj do Tabeli1 kolumnę, wpisując przykładowe dane w aktywnym polu. 3. Zamknij widok tabeli i zapisz wprowadzone w niej zmiany. 4. Rozwiń menu Plik. 5. Wybierz opcję Zapisz i publikuj. 6. Wskaż format kompatybilny z wersją 2000 – 2003 programu Access. 7. Kliknij przycisk Zapisz jako. 8. Ewentualnie zmień nazwę oraz lokalizację zapisywanego pliku bazy danych i kliknij Zapisz. 9. Gdybyś spróbował wykonać powyższą operację dla bazy Northwind, wyświetlona zostanie informacja o niemożliwości przeprowadzenia konwersji (rysunek 1.6).
Rysunek 1.6. O ile konwersja baz utworzonych we wcześniejszych wersjach SZBD Access do wersji 2010 w większości przypadków przebiega poprawnie, o tyle operacja odwrotna jest możliwa tylko dla baz danych o bardzo prostej strukturze
22
Access 2010 PL • Ćwiczenia praktyczne
Ć W I C Z E N I E
1.10
Dzielenie baz danych
SZBD Access 2010 umożliwia podzielenie bazy danych pomiędzy dwa pliki: jeden będzie zawierał dane (a więc definicje tabel i zapisane w nich informacje), drugi — interfejs użytkownika (czyli kwerendy, formularze i raporty). W efekcie wielu użytkowników może jednocześnie korzystać z tej samej bazy danych — wystarczy na poszczególnych komputerach zainstalować plik zawierający interfejs użytkownika i wskazać lokalizację udostępnionego w sieci pliku, w którym znajdują się tabele z danymi. Podzielić bazę danych warto również w przypadku komputerów niepodłączonych do sieci — oddzielenie danych i tabel od elementów interfejsu użytkownika ułatwia jego ewentualną modyfikację czy uaktualnienie, a zmniejszenie rozmiaru plików bazodanowych poprawia wydajność bazy danych. Aby podzielić przykładową bazę danych Northwind pomiędzy dwa pliki: 1. Uruchom bazę Northwind. 2. Zamknij automatycznie wyświetlany panel sterowania tej bazy danych. 3. Przejdź na zakładkę Narzędzia bazy danych i kliknij przycisk Baza danych programu Access. 4. Uruchomiony zostanie kreator dzielenia bazy danych. Kliknij przycisk Podziel bazę danych. 5. Podaj lokalizację oraz nazwę pliku zawierającego tabele i dane, potem kliknij przycisk Podziel. Po chwili baza danych zostanie podzielona na dwa pliki, a wszystkie tabele zastąpione odwołaniami do przeniesionych tabel (rysunek 1.7). Ć W I C Z E N I E
1.11
Konfiguracja podzielonych baz danych
Po wykonaniu poprzedniego ćwiczenia przykładowa baza danych zapisana jest w dwóch plikach — jeden zawiera dane, drugi — interfejs użytkownika. Jeżeli kilku użytkowników ma korzystać z tej bazy danych, na komputerze każdego z nich należy skonfigurować plik interfejsu użytkownika tak, aby wszyscy mogli połączyć się z tym samym plikiem zawierającym dane.
Rozdział 1. • Baza danych
23
Rysunek 1.7. Aby po podzieleniu bazy danych zmienić strukturę tabel, należy otworzyć plik zawierający tabelę i dane, a nie plik, w którym znajdują się formularze, kwerendy i raporty
W tym celu: 1. Skopiuj plik z danymi (plik Northwind_wb.accdb) do folderu udostępnionego przez komputer, który będzie pełnił rolę serwera bazy danych. W systemie Windows 7 można udostępnić folder (o ile sieć lokalna została prawidłowo skonfigurowana), klikając prawym przyciskiem myszy nazwę folderu i z menu kontekstowego wybierając opcję Udostępnij/Określonym osobom…. Następnie należy podać nazwy użytkowników, którzy mają mieć dostęp do folderu, i kliknąć przycisk Udostępnij (rysunek 1.8). 2. Skopiuj na komputery użytkowników plik z interfejsem użytkownika (plik Northwind.accdb). 3. Uruchom na tych komputerach skopiowaną bazę Northwind. Ponieważ lokalizacja pliku bazodanowego uległa zmianie, dane będą niedostępne, a próba uruchomienia jakiegokolwiek formularza powiązanego (formularza prezentującego dane zapisane w dowolnej tabeli), np. próba zalogowania się do programu jako jeden z pracowników, zakończy się wyświetleniem komunikatu o błędzie. 4. Rozwiń okienko nawigacji, kliknij prawym przyciskiem myszy odnośnik do dowolnej tabeli i wybierz opcję Menedżer tabel połączonych. Zostanie wyświetlona lista tabel przykładowej bazy.
24
Access 2010 PL • Ćwiczenia praktyczne
Rysunek 1.8. Aby uniknąć problemów z nadawaniem praw dostępu do pliku z danymi, należy utworzyć nowy folder nadrzędny (np. folder C:\Baza), przenieść do niego plik z danymi i udostępnić 5. Kliknij przycisk Zaznacz wszystkie, a następnie OK — zobaczysz
standardowe okno dialogowe systemu Windows, umożliwiające wskazanie lokalizacji pliku z tabelami i danymi. 6. Określ lokalizację pliku z danymi (jeżeli plik znajduje się w udostępnionym przez inny komputer folderze, należy rozpocząć jego poszukiwanie od kliknięcia ikony Moje miejsca sieciowe) i kliknij przycisk Otwórz. 7. Jeśli wskazałeś prawidłowy plik, zostanie wyświetlona informacja o pomyślnym odświeżeniu połączonych tabel. Zamknij okno Menedżer tabel połączonych. Ć W I C Z E N I E
1.12
Analiza wydajności bazy danych
Wydajność jest jednym z kluczowych (obok niezawodności i bezpieczeństwa) atrybutów dobrze zaprojektowanej i zaprogramowanej bazy danych. O ile kwestia niezawodności SZBD Access pozostawia wiele do życzenia i administrator baz danych ma niewielkie pole do popisu w tej kwestii, a zagadnienie bezpieczeństwa baz danych jest dość obszerne i wykracza poza zakres tych ćwiczeń, o tyle wydajność gotowej bazy danych może być w łatwy sposób przeanalizowana i poprawiona.
Rozdział 1. • Baza danych
25
Aby przeprowadzić automatyczną analizę wydajności przykładowej bazy danych Northwind: 1. Uruchom przykładową bazę danych. 2. Przejdź na zakładkę Narzędzia bazy danych i kliknij przycisk Analizuj wydajność. 3. Ponieważ chcemy przeanalizować całą bazę danych, przejdź do zakładki Wszystkie typy obiektów i kliknij przycisk Zaznacz wszystkie. 4. Po kliknięciu przycisku OK rozpocznie się analiza wydajności wszystkich obiektów bazy danych. Po jej zakończeniu wyświetlony zostanie raport (rysunek 1.9).
Rysunek 1.9. Analizator wydajności nie tylko wskazuje słabe strony bazy danych, ale również podpowiada, jak je usunąć (ta ostatnia czynność w wielu przypadkach może być zautomatyzowana) Ć W I C Z E N I E
1.13
Kompilowanie bazy danych
Podstawową zaletą bazy danych zapisanej w pliku .accdb jest możliwość modyfikacji — w każdej chwili możemy zmienić definicję kwerendy, raportu lub formularza. A oto wady tak zapisanej bazy danych. 1. Niska wydajność wynikająca z konieczności kompilowania wszystkich procedur i funkcji języka Visual Basic for Applications (VBA) w momencie ich wywoływania.
26
Access 2010 PL • Ćwiczenia praktyczne
2. Ryzyko zmiany struktury bazy danych przez nieupoważnionych
użytkowników.
Dlatego po przygotowaniu produkcyjnej wersji (w praktyce nie istnieje coś takiego jak finalna wersja bazy danych, a jedynie kolejne jej wersje produkcyjne) należy bazę danych zapisać w postaci pliku .accde. W ten sposób wszystkie procedury i funkcje zostaną skompilowane, a wprowadzanie zmian do istniejących formularzy czy raportów będzie niemożliwe. Aby zapisać przykładową bazę danych Northwind w postaci skompilowanej: 1. Uruchom przykładową bazę danych. 2. Zezwól na wykonywanie potencjalnie niebezpiecznych operacji (zaufaj bazie danych). 3. Rozwiń menu Plik i przejdź na zakładkę Zapisz i publikuj. 4. Zaznacz znajdującą się w sekcji Zaawansowane okna Zapisz bazę danych jako pozycję Utwórz plik ACCDE. 5. Kliknij przycisk Zapisz jako. 6. Po ewentualnej zmianie nazwy i lokalizacji tworzonego pliku kliknij przycisk Zapisz. 7. Ponieważ po zakończeniu pracy kreatora pozostaje otwarta nieskompilowana baza danych, należy ją zamknąć i otworzyć jej skompilowaną wersję zapisaną w pliku .accde. Ć W I C Z E N I E
1.14
Wykonanie kopii zapasowej bazy danych
W SZBD Access najprostszym, wykorzystywanym od lat sposobem na wykonanie kopii zapasowej bazy danych jest odłączenie wszystkich użytkowników bazy danych, a następnie fizyczne skopiowanie pliku z danymi — w przypadku bazy danych zapisanej w postaci jednego, w dodatku niewielkiego pliku jest to metoda nieskomplikowana i skuteczna. Użytkownicy wersji 2010 programu Access mogą również wykonać kopię bazy danych bez konieczności opuszczania środowiska tego programu. Aby z poziomu programu Access wykonać kopię bieżącej bazy danych: 1. Uruchom wybraną bazę danych. 2. Z menu Plik wybierz polecenie Zapisz bazę danych jako.
Rozdział 1. • Baza danych
27
3. Zostanie wyświetlone standardowe okno dialogowe systemu
Windows, umożliwiające podanie nazwy i lokalizacji pliku kopii zapasowej. 4. Wskaż lokalizację pliku kopii (przechowywanie kopii na tym samym dysku, na którym zapisujemy oryginał, mija się z celem) i kliknij przycisk Zapisz. 5. Kopia zostanie wykonana, a baza danych ponownie uruchomiona. Ć W I C Z E N I E
1.15
Przeniesienie bazy danych do SZBD SQL Server
Baza utworzona w SZBD Access może być przeniesiona do w pełni profesjonalnego systemu zarządzania bazami danych, jakim jest SQL Server firmy Microsoft. W ten sposób możliwa jest rozbudowa niewielkiej bazy danych, używanej przez jedną lub kilka osób, w udostępniającą setkom użytkowników gigabajty informacji bazę działającą w środowisku SZBD SQL Server. Aby przenieść przykładową bazę Northwind do SZBD SQL Server: Pomyślne wykonanie ćwiczenia wymaga dostępu z prawami administratora do działającego serwera SQL. 1. Uruchom przykładową bazę danych Northwind. 2. Zezwól na wykonywanie potencjalnie niebezpiecznych 3.
4. 5.
6.
instrukcji. Przejdź na zakładkę Narzędzia bazy danych i kliknij ikonę SQL Server. Jeżeli kreator rozbudowy bazy danych nie został zainstalowany, zostanie wyświetlone okno dialogowe z pytaniem, czy zainstalować ten składnik programu. W razie potrzeby zainstaluj kreator rozbudowy baz danych. Po pomyślnej instalacji zostanie automatycznie uruchomiony. Aby utworzyć nową bazę danych, będącą kopią bazy programu Access, zaznacz opcję Utwórz nową bazę danych i kliknij przycisk Dalej. Podaj nazwę docelowego serwera bazy danych oraz informacje umożliwiające połączenie się z nim z uprawnieniami administratora (rysunek 1.10).
28
Access 2010 PL • Ćwiczenia praktyczne
Rysunek 1.10. Aby utworzyć nową bazę danych, należy połączyć się z serwerem bazodanowym jako jego administrator. O ile SQL Server działa w trybie mieszanym, domyślnym administratorem jest użytkownik o nazwie sa, w innym przypadku należy zalogować się do systemu Windows jako użytkownik posiadający uprawnienia administratora SQL Servera i zaznaczyć pole wyboru Użyj zaufanego połączenia 7. Określ, które tabele zostaną przeniesione do bazy danych
8.
9. 10. 11.
12. 13.
serwera SQL — ponieważ do SZBD SQL Server nie zostaną przeniesione formularze i raporty, nie należy zaznaczać tabeli formularza Panel przełączania. Zaznacz typy obiektów, które również zostaną przeniesione. Zaznaczając pole wyboru Utwórz tylko strukturę tabeli, nie rozbudowuj żadnych danych, spowodujesz przeniesienie wyłącznie struktury bazy danych, bez przechowywanych w niej informacji. Zaakceptuj domyślne ustawienia kreatora i kliknij przycisk Dalej (rysunek 1.11). Odpowiadając na kolejne pytanie kreatora, zadecyduj: Czy klientami nowej bazy danych będą programy Microsoft Access (w ten sposób użytkownicy będą korzystali z informacji zapisanych w środowisku SQL Serwera przy użyciu formularzy i raportów bazy danych programu Access)? Czy tabele przeniesione do SZBD SQL Server zostaną połączone z bazą SZBD Access? Czy zostanie po prostu wykonana kopia istniejącej bazy danych? Wybierz tę opcję, zaznaczając pole Bez zmian aplikacji.
Rozdział 1. • Baza danych Rysunek 1.11. Jeżeli baza danych ma być wierną kopią bazy programu Access, należy przenieść nie tylko tabele, ale również indeksy, reguły poprawności, definicje wartości domyślnych i powiązań pomiędzy tabelami 14. Kliknij przycisk Dalej. 15. Po kliknięciu przycisku Zakończ rozpocznie się proces
przenoszenia bazy danych do środowiska SQL Server. Po zakończeniu zostanie wyświetlony podgląd raportu zawierającego dokładne dane o przeniesionych obiektach bazy danych.
29
30
Access 2010 PL • Ćwiczenia praktyczne
2 Tabele Podstawowymi obiektami relacyjnych baz danych są tabele. Każda tabela składa się z kolumn i wierszy, na przecięciu których znajdują się pola. W poszczególnych wierszach przechowywane są informacje o kolejnych obiektach (np. filmach), a w kolumnach — o wartościach tego samego atrybutu konkretnych obiektów (np. tytułach kolejnych filmów). W otaczającym nas świecie każdy może dostrzec nieskończoną liczbę przeróżnych obiektów (rzeczy) — należą do nich np. książka, komputer, krzesło, drzewo, kolega i znajoma. Obiekty poszczególnych typów (książki, komputery, koledzy) mogą być opisane za pomocą atrybutów charakterystycznych dla danego typu obiektów (książki mają tytuł, liczbę stron itp., komputery — markę, listę elementów itp., koledzy — imię, wiek, wzrost, nałogi itp.).
Tworząc tabelę, trzeba określić typ danych, które będą przechowywane w poszczególnych kolumnach. I tak tytuły filmów będą przechowywane w polach tekstowych, a ceny towarów — w polach liczbowych. Ponadto dla niektórych typów danych należy określić maksymalną liczbę możliwych do zapisania znaków, np. w kolumnie Nazwisko użytkownik powinien mieć możliwość zapisania ciągu znaków Brzęczyszczykiewicz (19 znaków), a w kolumnie wiek — liczb z zakresu od 0 do 150. Umiejętność właściwego dopasowania typu kolumny do przechowywanych w niej wartości jest jedną z podstawowych zalet projektanta baz danych, a problemy z dobraniem typu kolumny z reguły świadczą o błędzie w projekcie tabeli.
32
Access 2010 PL • Ćwiczenia praktyczne Wiersz tabeli nazywany jest również rekordem. Tak jak tabela zawiera kolekcję kolumn, tak poszczególne rekordy zawierają kolekcje pól.
Wykonując kolejne ćwiczenia z tego rozdziału, poznasz zagadnienia związane z projektowaniem i tworzeniem poprawnych tabel, które mają podstawowe znaczenie dla działania baz danych. Ć W I C Z E N I E
2.1
Dane elementarne
Wiemy już, że poszczególne wiersze przechowują informacje o jednym obiekcie, a poszczególne kolumny — o jednym atrybucie obiektów danego typu. Pierwszym zadaniem, które należy wykonać podczas projektowania i tworzenia tabel, jest określenie listy interesujących nas atrybutów obiektów danego typu. Przykładowo, tworząc tabelę Kontakty, w której będziemy zapisywać dane kontaktowe naszych znajomych, musimy zastanowić się, czy interesuje nas kod pocztowy, czy informacja taka jest niepotrzebna. Ponadto musimy zadecydować, czy np. adres domowy będzie zapisywany w jednej kolumnie Adres, czy w kilku kolumnach szczegółowych: Ulica, Nr domu, Miasto. Dzięki jednej z nowych funkcji programu Access 2010 — polom typu Szybki start — podjęcie prawidłowych decyzji nie powinno nikomu sprawiać kłopotu. Aby na podstawie szablonu tabel utworzyć tabelę Kontakty: 1. Włącz SZBD Access 2010 i utwórz nową, pustą bazę danych. 2. W głównym oknie programu zostanie wyświetlony widok danych pierwszej tabeli — zamknij to okno. 3. Przejdź na zakładkę Tworzenie. Z lewej strony wstążki pojawią się ikony, które pozwalają utworzyć tabelę na trzy różne sposoby: T w widoku arkusza danych, T w widoku projektu, T jako listę serwera SharePoint (ten typ tabel dotyczy baz sieci Web). 4. Kliknij przycisk Tabela — w głównym oknie programu Access wyświetlony zostanie projekt tabeli.
Rozdział 2. • Tabele
33
5. Zwróć uwagę, że pierwsza kolumna nazywa się Identyfikator
i nie można zapisać lub zmienić przechowywanych w niej danych. 6. Kliknij znajdujący się w sekcji Dodawanie i usuwanie przycisk Więcej pól. 7. Przewiń w dół listę możliwych do dodania pól tabeli. W jej dolnej części znajdują się pola szybkiego startu. Kliknij pole Adres (rysunek 2.1). Rysunek 2.1. Korzystanie z pól Szybki start to świetny sposób na przyswojenie sobie podstawowych zasad projektowania tabel
8. Do tabeli zostaną automatycznie dodane kolumny Adres,
Miasto, Województwo, Kod pocztowy i Kraj/region. Zwróć uwagę, że poszczególne kolumny przechowują dane elementarne, czyli takie, które opisują tylko jeden atrybut obiektu. Zamiast umieszczenia w jednej kolumnie (nazwijmy ją CałyAdres) ciągu znaków typu: ul. Zielna 1/1, Katowice, 40 – 000, śląskie, Polska, dane te zostały podzielone na pięć kolumn: T Adres — tu zapiszemy nazwę ulicy i numer domu, T Miejscowość — tu będziemy przechowywać dane o miejscu zamieszkania danej osoby,
34
Access 2010 PL • Ćwiczenia praktyczne
Województwo — tu umieszczamy informacje o województwie, T Kod — tu umieścimy wyłącznie kod pocztowy, T Kraj/region — tu będziemy przechowywać informacje dotyczące kraju, w którym mieszka znajomy. 9. Ten podział ma swoje uzasadnienie. Wszystkie systemy zarządzania relacyjnymi bazami danych, w tym Access, doskonale radzą sobie z łączeniem danych przechowywanych w kilku kolumnach. Natomiast wyodrębnienie danych składających się na informację zapisaną w pojedynczej kolumnie jest dość skomplikowane i czasochłonne. Wyszukanie osób mieszkających na ulicy Zielnej, gdyby ta informacja stanowiła część dużej kolumny CałyAdres, wymagałoby napisania skomplikowanej i dość wolno działającej procedury. 10. Ponieważ kolumna Adres służy do przechowywania wyłącznie nazwy ulicy i numeru domu, zmień jej nazwę na UlicaNrDomu. W tym celu kliknij prawym przyciskiem myszy nagłówek kolumny Adres. Zostanie wyświetlone menu kontekstowe zawierające m.in. polecenie Zmień nazwę pola — wybierz je i wpisz nową nazwę kolumny (rysunek 2.2). T
Rysunek 2.2. Access pozwala na wprowadzanie wielu zmian w strukturach tabel — m.in. możemy zmieniać nazwy ich kolumn
11. Ponieważ tabela ma przechowywać informacje o kontaktach,
powinniśmy dodać do niej jeszcze kilka kolumn, takich jak Imię, Nazwisko czy Firma: T Zaznacz kolumnę Identyfikator. T Kliknij ikonę Tekst — do tabeli zostanie dodana nowa kolumna typu tekstowego.
Rozdział 2. • Tabele
35
Wpisz nową nazwę kolumny (Imię) i naciśnij Enter. T W ten sam sposób dodaj do tabeli kolumny tekstowe Nazwisko i Firma. Access pozwala dodawać kolumny do tabeli w jeszcze jeden sposób. Wystarczy, że przewiniemy okienko tabeli w prawo, klikniemy lewym przyciskiem myszy nagłówek, w którym widoczny jest napis Dodaj nowe pole, i wybierzemy typ dodawanej kolumny. Napis Dodaj nowe pole zostanie usunięty, a my będziemy mogli podać nazwę dodawanej kolumny — w tym przypadku chcielibyśmy dodatkowo przechowywać informacje o urodzinach naszych znajomych, dlatego wybierz typ Data i godzina i nazwij tę kolumnę DataUrodzin. W ten sam sposób dodaj do tabeli kolumnę tekstową o nazwie Adres e-mail. Ponieważ tabela ma służyć do przechowywania danych o naszych znajomych, a nie wszyscy z nich pracują, chcielibyśmy przenieść kolumnę Firma za kolumnę Adres e-mail. Żeby to zrobić, wystarczy kliknąć nagłówek kolumny Firma lewym przyciskiem myszy, przytrzymać go i przeciągnąć całą kolumnę w nowe miejsce. Wpisz do tabeli przykładowe dane minimum trzech znajomych — koniecznie wpisz ich adresy e-mail. Zamknij okno tabeli, zapisując wprowadzone zmiany, i nadaj jej nazwę — Kontakty. T
12.
13. 14.
15. 16.
Ć W I C Z E N I E
2.2
Klucz podstawowy
Pierwszą kolumną naszej tabeli jest zawierająca automatycznie wstawiane liczby kolumna Identyfikator. Dlaczego tak jest? Zauważ, że skoro informacje o poszczególnych obiektach zapisywane są w kolejnych wierszach tabeli, a samą tabelę należy traktować jak zbiór danych z poszczególnych wierszy (zbiór, a nie listę — dane w tabeli nie są w żaden sposób uporządkowane), to konieczne okazuje się ponumerowanie wierszy. Inaczej nie moglibyśmy określić, czy gdy pytamy o adres Jana, interesuje nas adres Jana z Katowic, czy Jana z Gdańska. Nie wdając się w zawiłości teorii zależności funkcyjnych, możemy przyjąć, że klucz podstawowy jest numerem wiersza jednoznacznie identyfikującym obiekt w tabeli.
36
Access 2010 PL • Ćwiczenia praktyczne Funkcję klucza podstawowego może pełnić dowolna kolumna (a nawet zbiór kilku kolumn) tabeli, o ile dane przechowywane w tej kolumnie są niepowtarzalne. Przykładowo dopóki w tabeli Kontakty nie znajdują się informacje o kilku osobach noszących to samo nazwisko, kluczem podstawowym tej tabeli może być kolumna Nazwisko. Nie możemy jednak wykluczyć, że kiedyś dopiszemy do tabeli kolejną osobę o nazwisku Nowak, tak więc kolumna ta nie powinna być wybrana na klucz podstawowy tabeli.
Aby samodzielnie utworzyć klucz podstawowy tabeli Kontakty: 1. Upewnij się, że na wyświetlanej z lewej strony ekranu liście obiektów bazy danych wybrana została pozycja Tabele. 2. Dwukrotnie kliknij nazwę tabeli Kontakty — tabela zostanie otworzona w widoku arkusza danych. 3. Zwróć uwagę na pierwszą kolumnę tabeli — kolumnę Identyfikator. Pomimo że niemożliwe jest wprowadzenie czy modyfikowanie zapisanych w niej danych, każdy kolejny wiersz automatycznie uzyskuje swój numer (identyfikator). Przekonaj się o tym, wprowadzając dane kolejnego znajomego (nie zapomnij o wpisaniu adresu e-mail). 4. Przełącz tabelę do widoku projektu. Można to zrobić na kilka sposobów: kliknij widoczną w prawym, dolnym rogu okna tabeli ikonę Widok projektu lub kliknij prawym przyciskiem myszy nazwę tabeli i z menu kontekstowego wybierz Widok projektu albo kliknij przycisk Widok i wybierz opcję Widok projektu (rysunek 2.3). Rysunek 2.3. Strukturę tabeli najprościej można zmieniać w widoku projektu, a przechowywane w tabeli dane — w widoku arkusza danych
5. W widoku projektu wyświetlana jest lista kolumn tabeli wraz
z typem przechowanych w poszczególnych kolumnach danych. Zaznacz kolumnę Identyfikator (rysunek 2.4).
Rozdział 2. • Tabele
37
Rysunek 2.4. Widok projektu tabeli Kontakty 6. Zwróć uwagę, że z lewej strony kolumny Identyfikator
wyświetlana jest ikona klucza — ten symbol oznacza, że dana kolumna pełni funkcję klucza podstawowego tabeli. Kliknij ją prawym przyciskiem myszy i usuń zaznaczenie wyświetlonej w menu kontekstowym pozycji Klucz podstawowy. Ikona klucza zniknie. 7. Zaznacz kolumnę Nazwisko (zakładamy, że w tabeli nie ma jeszcze danych o kilku osobach noszących to samo nazwisko) i kliknij przycisk Klucz podstawowy. Ikona klucza zostanie wyświetlona przy kolumnie Nazwisko. 8. Kliknij prawym przyciskiem myszy kolumnę Adres e-mail (w tabeli nie powinny znajdować się dane o kilku osobach mających ten sam adres e-mail) i z menu kontekstowego wybierz pozycję Klucz podstawowy. Ikona klucza zostanie przeniesiona z kolumny Nazwisko do kolumny Adres e-mail. Wynika to z tego, że dla tabeli można zdefiniować tylko jeden klucz podstawowy. 9. Przełącz się do widoku arkusza danych. Zostanie wyświetlona informacja, że przed przełączeniem się do tego widoku tabela musi być zapisana. Zapisz tabelę.
38
Access 2010 PL • Ćwiczenia praktyczne Jeżeli wyświetlony został komunikat informujący o niemożliwości wykonania operacji, znaczy to, że któreś z pól kolumny Adres e-mail nie zawiera danych albo dane te w kilku polach są takie same. W takim przypadku usuń definicję klucza podstawowego, przełącz się do widoku arkusza danych, popraw wpisy w kolumnie Adres e-mail, ponownie przełącz się do widoku projektu i utwórz raz jeszcze klucz podstawowy dla tej kolumny. Po wykonaniu tych czynności przełącz się do widoku arkusza danych.
10. Wpisz dane kolejnego znajomego, pozostawiając pole
Adres e-mail puste. Przy próbie przejścia do innego wiersza wyświetlona zostanie informacja o błędzie (rysunek 2.5). Skoro klucz podstawowy (w tym przypadku adres e-mail) ma umożliwić jednoznaczną identyfikację wiersza w tabeli, jego wartość nie może być nieokreślona. Rysunek 2.5. Pola kolumny pełniącej funkcję klucza podstawowego nie mogą pozostać niewypełnione Wszystkie SZBD, w tym Access, obsługują specjalną, różną od 0 i pustego ciągu znaków, wartość Null, oznaczającą wartość nieokreśloną, brakującą lub nieznaną. Kwestia wartości Null powróci w rozdziale 3. 11. Kliknij OK i wpisz brakujący adres e-mail, tym razem
powtarzając adres już w tabeli zapisany. Przy próbie przejścia do innego wiersza wyświetlona zostanie informacja o innym błędzie (rysunek 2.6). Skoro klucz podstawowy ma umożliwić jednoznaczną identyfikację wiersza w tabeli, jego wartość też musi być niepowtarzalna.
Rysunek 2.6. Pola kolumny pełniącej funkcję klucza podstawowego nie mogą zawierać powtarzających się wartości
Rozdział 2. • Tabele
39
12. Kliknij przycisk OK i wprowadź poprawny adres e-mail. 13. Zamknij okno widoku tabeli. Ć W I C Z E N I E
2.3
Tworzenie tabeli poprzez wprowadzanie przykładowych danych
Access pozwala na tworzenie tabeli na podstawie wprowadzonych przez użytkownika danych. Metoda jest prosta i intuicyjna, ale wymaga od użytkownika umiejętności dzielenia danych opisujących obiekt na poszczególne dane elementarne. Aby utworzyć tabelę Znajomi: 1. Przejdź na zakładkę Tworzenie. 2. Kliknij ikonę Tabela. 3. W poszczególnych komórkach arkusza (odpowiadać im będą pola tabeli) wpisz w jednym wierszu kolejne informacje o znajomych: imię, nazwisko, adres e-mail i datę urodzenia. Zwróć uwagę na widoczne na wstążce narzędzia, które pozwalają dookreślić definiowane kolumny (rysunek 2.7).
Rysunek 2.7. Tworzenie tabeli poprzez wprowadzanie danych przykładowych 4. Dwukrotnie kliknij nagłówek pierwszej kolumny i zmień domyślną nazwę Pole1 na Imię. W ten sam sposób zmień
nazwy wszystkich kolumn tabeli. 5. Spróbuj usunąć automatycznie utworzoną kolumnę Identyfikator (rysunek 2.8). 6. Przełącz się do widoku projektu tabeli. Zobaczysz pytanie o nazwę, pod którą zostanie zapisana tabela. Wpisz Znajomi i kliknij przycisk OK.
40
Access 2010 PL • Ćwiczenia praktyczne
Rysunek 2.8. Kolumny klucza podstawowego nie można usunąć w widoku arkusza danych. Na potrzeby tej książki możemy przyjąć, że każda tabela powinna mieć zdefiniowany klucz podstawowy 7. Widok projektu tabeli Znajomi powinien przypominać widok
projektu tabeli Kontakty. Zwróć uwagę na automatycznie dodaną kolumnę Identyfikator — została oznaczona jako klucz podstawowy, a typ danych przechowywanych w tej kolumnie został określony jako Autonumerowanie. W ten sposób identyfikatory poszczególnych wierszy są automatycznie generowane przez SZBD Access, a użytkownik nie ma możliwości wprowadzania lub modyfikowania tych danych. Ć W I C Z E N I E
2.4
Tworzenie tabel w widoku projektu — definiowanie ograniczeń
Tworzenie tabel na podstawie szablonu lub poprzez wprowadzanie danych przykładowych jest szybkie i proste, ale nie pozwala na precyzyjne określenie typów danych poszczególnych kolumn. Definicja gotowej tabeli może być zmieniona w widoku projektu, ale skoro użytkownik potrafi pracować z tym widokiem, powinien właśnie w ten sposób budować tabele. Aby utworzyć nową tabelę w widoku projektu: 1. Przejdź na zakładkę Tworzenie. 2. Kliknij ikonę Projekt tabeli. 3. W kolumnie Nazwa pola wpisz nazwę pierwszej kolumny: IdOsoby, przejdź do kolumny Typ danych i z listy dostępnych typów danych wybierz Autonumerowanie. Następnie określ tę kolumnę jako kolumnę klucza podstawowego tabeli — w ten sposób utworzona została kolumna przechowująca automatycznie generowane przez SZBD Access, niepowtarzalne wartości klucza podstawowego tworzonej tabeli.
Rozdział 2. • Tabele
41
4. Zwróć uwagę na wyświetlane w dolnej części ekranu dwie
zakładki: Ogólne i Odnośnik. Po wybraniu kolumny za pomocą zakładki Ogólne można dodatkowo określić atrybuty tej kolumny, w tym dookreślić typ przechowywanych w niej danych. Znaczenie kolumny Odnośnik zostanie wyjaśnione w rozdziale 3. 5. Zmień sposób generowania wartości klucza podstawowego z przyrostowego na losowy oraz wpisz opis i tytuł (etykietę) kolumny — Identyfikator osoby (rysunek 2.9). Rysunek 2.9. W widoku projektu możemy bardzo dokładnie określić cechy poszczególnych kolumn tabeli klucza podstawowego
Choć wartość atrybutu Tytuł (etykieta kolumny) może być zupełnie dowolna, powinna być logicznie powiązana z jej nazwą — za pomocą nazwy będziemy się odwoływać programowo do obiektu, natomiast jego etykieta będzie wyświetlana użytkownikom bazy danych. 6. Dodaj nową kolumnę o nazwie Nazwisko i typie danych Tekst. 7. Dla kolumn tego typu zakładka Ogólne zawiera jeszcze więcej
pól: kolejno zmniejsz rozmiar kolumny do 30 znaków, jako tytuł wpisz Nazwisko osoby, wartość pola Wymagane zmień na Tak — w ten sposób użytkownik będzie musiał podać nazwisko wprowadzanych do bazy osób. Wybór opcji Wymagane — Tak odpowiada nałożeniu na kolumnę ograniczenia NOT NULL. Jeżeli na jakąś kolumnę nałożymy to ograniczenie, nie będzie można w niej przechowywać pól nieposiadających żadnej wartości (pól niewypełnionych). Domyślnie Access pozwala na niewypełnienie danymi każdej z tworzonych kolumn.
42
Access 2010 PL • Ćwiczenia praktyczne
8. Następnie zmień wartość atrybutu Zerowa dł. dozwolona na Nie
(w ten sposób nie można będzie jako nazwiska podać pustego ciągu znaków), a w polu Indeksowanie wybierz z listy pozycję Tak (Duplikaty OK) — w ten sposób dla kolumny zostanie utworzony indeks przyspieszający wyszukiwanie osób na podstawie nazwiska. Ponieważ kilka osób może mieć to samo nazwisko, typ indeksu musi zezwalać na wielokrotne wpisywanie tych samych wartości (rysunek 2.10).
Rysunek 2.10. Lista atrybutów kolumny typu tekstowego — w tym przypadku nadano ograniczenie NOT NULL, ograniczono maksymalną długość przechowywanych ciągów znaków, określono tytuł i utworzono indeks związany z tą kolumną 9. Utwórz nową kolumnę o nazwie DataUr i typie danych
Data/Godzina. 10. Na zakładce Ogólne z listy dostępnych formatów wybierz Data długa (format dat, czasu, liczb i walut zależy od ustawień lokalnych systemu Windows), a następnie zaznacz pozycję Maska wprowadzania i kliknij wyświetlony z prawej strony pola wielokropek. 11. Zapisz tabelę pod nazwą Osoby (przed uruchomieniem kreatora masek wprowadzania konieczne jest zapisanie tabeli). Z listy predefiniowanych masek wprowadzania wybierz opcję Data krótka i ustaw kursor w polu Próbuj: (rysunek 2.11). 12. Wpisz niepoprawną datę i kliknij przycisk Dalej — zostanie wyświetlony komunikat o błędzie, informujący o próbie wpisania niepoprawnych danych. Popraw wpisaną datę i raz jeszcze kliknij przycisk Dalej.
Rozdział 2. • Tabele
43
Rysunek 2.11. Maska wprowadzania określa, jakie dane użytkownicy bazy danych będą mogli zapisywać w danej kolumnie — w tym przypadku będą to cztery cyfry określające rok, następnie liczba z zakresu 1 – 12, określająca miesiąc, i liczba z zakresu 1 – 31, oznaczająca dzień 13. Kolejne pytanie kreatora dotyczy ewentualnej zmiany maski
wprowadzania (tworzenie własnych masek wprowadzania wykracza poza zakres tych ćwiczeń) oraz wyświetlanego użytkownikowi symbolu — domyślnie jest to znak podkreślenia pozwalający użytkownikowi na zorientowanie się w wymaganym formacie wprowadzanych danych. Zaakceptuj ustawienia domyślne i zakończ pracę kreatora masek wprowadzania. 14. Wpisz tytuł kolumny (Data Urodzenia), a następnie zaznacz pole
Reguła spr. poprawności i kliknij wyświetlany z prawej strony pola wielokropek. Uruchomiony zostanie konstruktor wyrażeń ułatwiający tworzenie warunku logicznego, który musi być spełniony, aby dane mogły być zapisane w kolumnie. Aby np. uniemożliwić wpisanie daty urodzenia wcześniejszej niż 1 stycznia 1950 roku lub późniejszej niż 1 stycznia roku 2000, należy w polu konstruktora wpisać wyrażenie >#1950-01-01# And
większy niż
=
nie mniejszy
>, a następnie przycisk Dalej (rysunek 2.17).
Rysunek 2.17. Nie tylko możemy wybrać, które pola tabeli zostaną umieszczone na formularzu, ale również opisać te pola i zmienić ich kolejność
54
Access 2010 PL • Ćwiczenia praktyczne
6. Żeby automatycznie zapisywać w bazie przychodzące
w wiadomościach e-mail dane, zaznacz pole wyboru Automatycznie przetwórz odpowiedzi i dodaj dane do tabeli Ankieta. 7. Kolejne pytanie kreatora zbierania danych będzie dotyczyło adresowania wiadomości e-mail. Aby adresować je ręcznie, kliknij Dalej. 8. Zostaw domyślny temat i treść wiadomości, kliknij Dalej. 9. Utwórz wiadomość zawierającą formularz do wprowadzania danych, zaadresuj ją do wszystkich zainteresowanych osób i wyślij (rysunek 2.18).
Rysunek 2.18. Wiadomość e-mail z automatycznie utworzonym formularzem 10. Zarządzać zbieraniem wiadomości, m.in. ponownie wysłać
wiadomość, można, klikając ikonę Zarządzaj odpowiedziami widoczną na zakładce Dane zewnętrzne.
3 Relacje Charakterystyczną cechą relacyjnych baz danych jest przechowywanie informacji, opisujących obiekty różnego typu (np. towary i ich producentów), w odrębnych, ale powiązanych ze sobą tabelach. Na rysunkach 3.1 i 3.2 pokazujemy różnicę pomiędzy sposobem przechowywania tych samych danych w arkuszu programu Excel i w bazie danych programu Access.
Rysunek 3.1. Arkusz programu Excel jest przykładem jednorodnej bazy danych — takiej, w której wszystkie dane zapisane są w jednym obiekcie (arkuszu)
Nawet ten bardzo uproszczony przykład pozwala zauważyć główną zaletę relacyjnych baz danych — dzięki podzieleniu informacji między kilka tabel do minimum została zmniejszona liczba nadmiarowych, wielokrotnie przechowywanych informacji. O ile w arkuszu Excela dane reżysera pojawiły się tyle razy, ile nakręcił filmów, o tyle w bazie programu Access, niezależnie od liczby nakręconych przez reżysera filmów, jego dane zapisane są raz, a jedynie krótki identyfikator (klucz podstawowy) reżysera znajduje się przy każdym jego filmie.
56
Access 2010 PL • Ćwiczenia praktyczne
Rysunek 3.2. W relacyjnych bazach danych informacje o obiektach różnego typu (np. filmach, ich gatunkach i reżyserach) przechowywane są w odrębnych tabelach Wielokrotne zapisywanie tych samych danych prędzej czy później prowadzi do problemów z utrzymaniem spójnego (adekwatnego do stanu rzeczywistego) obrazu danych — gdyby w naszym przykładzie reżyser zmienił nazwisko, zmiana ta musiałaby być przeprowadzona dla niewiadomej, potencjalnie dość dużej liczby filmów. W takiej sytuacji bardzo łatwo o błąd, wystarczy zmienić nazwisko w dziesięciu i zostawić niezmienione w pięciu komórkach.
Jednak użytkowników interesuje z reguły komplet informacji, np. chcieliby poznać tytuł filmu, dane jego reżysera i nazwę gatunku, do którego film należy. W relacyjnej bazie danych informacje te zapisane są w trzech odrębnych tabelach: w tabeli Film znajdują się dane o filmach, w tabeli Reżyser — dane reżyserów, a w tabeli Gatunek — nazwy gatunków filmowych. Aby informacja o tym, kto nakręcił dany film, nie została utracona, tabele te muszą być ze sobą powiązane. Związek zachodzący pomiędzy powiązanymi ze sobą tabelami w SZBD Access nazywany jest relacją łączącą te tabele. Tak jak poszczególne kolumny tabeli przechowują wartości atrybutów (cech) obiektów danego typu (np. nazwę firmy, adres koleżanki czy tytuł książki), tak relacje przedstawiają zachodzący pomiędzy obiektami dwóch różnych typów związek (np. towar został sprzedany przez firmę, koleżanka pożyczyła płyty, autor napisał książkę). Istnieją trzy typy relacji dwuargumentowych (czyli takich, które odpowiadają związkowi łączącemu dwie różne tabele). Oto one.
Rozdział 3. • Relacje
57
1. Relacje typu jeden do jednego, w których jednemu obiektowi A
odpowiada dokładnie jeden obiekt B (przykładem takiej relacji jest związek pomiędzy uczniem a przypisaną mu szafką w szatni). 2. Relacje typu jeden do wielu, w których jednemu obiektowi A odpowiada dowolna liczba obiektów B (przykładem takiej relacji jest związek pomiędzy firmą a towarami — jedna firma może produkować dowolną liczbę towarów, ale ten sam towar może być wyprodukowany tylko w jednej firmie). 3. Relacje typu wiele do wielu, w których dowolnej liczbie obiektów A odpowiada dowolna liczba obiektów B (przykładem takiej relacji jest związek pomiędzy filmami a aktorami — w każdym filmie może zagrać dowolna liczba aktorów i każdy aktor może zagrać w dowolnej liczbie filmów). Wykorzystując umiejętności zdobyte w poprzednich rozdziałach, utworzymy bazę danych działającą w środowisku SZBD Access, która będzie podstawą do ćwiczeń z następnych rozdziałów. Ć W I C Z E N I E
3.1
Projekt przykładowej bazy danych
Na potrzeby tej książki zaprojektujemy i utworzymy bazę danych Filmoteka, w której przechowywane będą podstawowe informacje o filmach i pożyczających je osobach. Zanim jednak zbudujemy nową bazę programu Access, należy zaprojektować układ jej tabel. Aby zaprojektować przykładową bazę danych: 1. Wypisz, jedną pod drugą, nazwy typów obiektów, o których informacje powinny trafić do bazy: Filmy Osoby
2. Wypisz te atrybuty obiektów, o których informacje powinny być
zapisane w bazie danych:
Film {Tytuł, Nazwisko reżysera, Imię reżysera, Nazwiska aktorów, Imiona aktorów, Gatunek, Cena, Data produkcji} Osoba {Imię, Nazwisko, Adres, Telefon, Adres e-mail}
3. Na podstawie zdobytej wiedzy o zaletach dzielenia danych
o obiektach różnego typu pomiędzy powiązane ze sobą tabele wyszukaj na liście wypisanych atrybutów te, które nie opisują bezpośrednio obiektu danego typu, i utwórz nową listę typów obiektów:
58
Access 2010 PL • Ćwiczenia praktyczne Film {Tytuł, Gatunek, Cena, Data produkcji} Osoba {Imię, Nazwisko, Adres, Telefon, Adres e-mail} Reżyser (Imię, Nazwisko} (trudno uznać imię czy nazwisko reżysera za bezpośrednie atrybuty filmu) Aktor (Imię, Nazwisko} (trudno uznać imię czy nazwisko aktora za bezpośrednie atrybuty filmu)
4. W poprzednim rozdziale omówione zostały zalety dzielenia
informacji, opisujących obiekty poszczególnych typów, na atrybuty elementarne. Korzystając z tych informacji, zmodyfikuj listę atrybutów obiektów: Film {Tytuł, Gatunek, Cena, Data produkcji} Osoba {Imię, Nazwisko, Miasto, Ulica Nr domu, Telefon, Adres e-mail} Reżyser (Imię, Nazwisko} Aktor (Imię, Nazwisko}
5. Jednym z etapów procesu normalizacji baz danych, który
dodatkowo korzystnie wpłynie na wydajność bazy danych i komfort pracy użytkowników, jest wydzielenie tabel słownikowych. Tabele tego typu przechowują ustaloną liczbę danych wykorzystywanych do określania wartości pojedynczego atrybutu obiektu nadrzędnego takiej tabeli. W efekcie tabela nadrzędna jest mniejsza, a użytkownicy mogą wybrać daną wartość z listy, zamiast wielokrotnie wpisywać ten sam ciąg znaków. W przykładowej bazie danych idealnym kandydatem do roli tabeli słownikowej jest atrybut filmu — gatunek (lista gatunków filmowych jest skończona, a prawdopodobieństwo wielokrotnego wpisywania tych samych danych dość duże): Film {Tytuł, Cena, Data produkcji) Gatunek {Nazwa} Osoba {Imię, Nazwisko, Miasto, Ulica Nr domu, Telefon, Adres e-mail} Reżyser (Imię, Nazwisko} Aktor (Imię, Nazwisko}
6. Ostatnim zadaniem jest określenie relacji łączącej poszczególne
obiekty. T Każdy film należy do jednego, określonego gatunku, ale do tego samego gatunku może należeć dowolna liczba filmów (związek typu wiele do jednego). T Każdy film został nakręcony przez jednego, określonego reżysera, ale ten sam reżyser może nakręcić dowolną liczbę filmów (związek typu wiele do jednego).
Rozdział 3. • Relacje T
T
59
W każdym filmie może zagrać dowolna liczba aktorów, a każdy aktor może zagrać w dowolnej liczbie filmów (związek typu wiele do wielu) — tę relację zaimplementujemy za pomocą charakterystycznych dla SZBD Access 2010 pól wielowartościowych. Każdy film (w tym samym czasie) może być pożyczony tylko jednej osobie, ale ta sama osoba może (jednocześnie) pożyczyć dowolną liczbę filmów (związek typu wiele do jednego) — ponieważ w bazie chcemy zapisać również datę pożyczenia i oddania filmu, tę relację zaimplementujemy za pomocą tabeli łącznikowej.
Ć W I C Z E N I E
3.2
Tabela słownikowa
Kolejność tworzenia tabel nie jest dowolna — jako pierwsze należy utworzyć tabele słownikowe, potem tabele podrzędne (tabele przechowujące dane, do których odwołują się inne tabele), a jako ostatnie — tabele nadrzędne (tabelą nadrzędną przykładowej bazy danych jest tabela Film, która odwołuje się do danych zapisanych we wszystkich pozostałych tabelach bazy danych). Aby utworzyć tabelę Gatunek: 1. Utwórz nowy projekt pustej bazy danych programu Access i nazwij go Filmoteka. 2. Korzystając z umiejętności zdobytych w poprzednim rozdziale, utwórz tabelę Gatunek. Struktura tabeli została pokazana na rysunku 3.3. Ć W I C Z E N I E
3.3
Tabele podrzędne
Po utworzeniu tabeli słownikowej przyszła pora na zbudowanie wszystkich tabel podrzędnych — ponieważ w przykładowej bazie danych nie zawierają one kolumn odwołujących się do innych tabel (nie ma ani jednej tabeli, która, będąc podrzędną w stosunku do jednej tabeli, jednocześnie byłaby nadrzędną w stosunku do innej tabeli), ich tworzenie nie różni się od opracowania tabel słownikowych.
60
Access 2010 PL • Ćwiczenia praktyczne
Rysunek 3.3. Definicja tabeli słownikowej
Aby utworzyć tabele podrzędne (tabele niezawierające kolumn kluczy obcych): 1. Utwórz tabelę Osoba (rysunek 3.4). Rysunek 3.4. Definicja tabeli podrzędnej Osoba
2. Utwórz tabelę Rezyser. Struktura tej tabeli została pokazana
na rysunku 3.5.
Rozdział 3. • Relacje
61
Rysunek 3.5. Definicja tabeli Rezyser — tworząc tę (i pozostałe tabele bazy Filmoteka) można wzorować się na tabelach dołączonej do książki bazy danych W nazwach obiektów przykładowej bazy danych nie są używane polskie znaki diakrytyczne, natomiast w ich tytułach — tak. W ten sposób baza danych będzie prawidłowo działała w komputerach z zainstalowanym systemem Windows w innej niż polska wersji językowej. 3. Ponieważ struktura tabeli Aktor jest identyczna ze strukturą
tabeli Rezyser, skopiuj tę tabelę pod nazwą Aktor, wyświetl nowo utworzoną tabelę w widoku projektu i zmień nazwę kolumny IdRezysera na IdAktora. Struktura pozostałych kolumn nie wymaga zmiany. Ć W I C Z E N I E
3.4
Tabela nadrzędna
Na tym etapie baza danych Filmoteka zawiera cztery, niepowiązane ze sobą tabele. Nadszedł czas, aby zamienić te niezwiązane ze sobą obiekty w relacyjną bazę danych, przechowującą informacje o poszczególnych filmach. Ponieważ tabela Film zawiera kolumny, wskazujące na dane zapisane w innych tabelach, jej utworzenie wymagać będzie zbudowania relacji łączących odpowiednie tabele. Aby utworzyć tabelę Film: 1. Rozpocznij tworzenie nowej tabeli w widoku projektu. 2. Utwórz kolumnę klucza podstawowego (IdFilmu) oraz kolumny przechowujące informacje o tytule danego filmu (Tytul), cenie
62
Access 2010 PL • Ćwiczenia praktyczne
zakupu (Cena), zysku, jaki uzyskaliśmy z wypożyczenia danego filmu (Zysk), i dacie produkcji (DataPr). 3. Jedną z cech charakterystycznych dla SZBD Access 2010 jest możliwość formatowania danych typu Nota. Dodaj kolejną kolumnę Opinia typu Nota i zmień wartość atrybutu Format tekstu na Tekst sformatowany (rysunek 3.6).
Rysunek 3.6. Wpisując opinie o filmach, będziemy mogli dowolnie zmieniać krój, wielkość i kolor czcionki 4. Ustaw kursor w polu Typ danych nowej kolumny i z listy
dostępnych typów wybierz Kreator odnośników… (rysunek 3.7).
Rysunek 3.7. Aby uniknąć kłopotów z niezgodnością typów łączonych kolumn różnych tabel, należy najpierw uruchomić kreator odnośników, a później (ewentualnie) zmienić nazwę kolumny
Rozdział 3. • Relacje
63
5. Ponieważ chcemy połączyć tabelę Film z tabelą Gatunek,
w odpowiedzi na pierwsze pytanie kreatora wybierz opcję Obiekt kolumna odnośnika ma pobierać wartości z tabeli lub kwerendy. 6. Na liście dostępnych tabel zaznacz tabelę Gatunek i kliknij
przycisk Dalej. 7. Zostanie wyświetlona lista kolumn tabeli Gatunek. Chociaż
tabele zawsze powinny być łączone za pomocą ich kluczy podstawowych (w tym przypadku będą to wartości pól kolumny IdGatunku), identyfikatory poszczególnych gatunków są mało opisowe (administrator musiałby zapamiętać, że np. identyfikatorem gatunku horror jest liczba 12, a komedii — 3). SZBD Access ułatwia administratorowi przeglądanie i modyfikowanie danych w połączonych tabelach, bo automatycznie zastępuje wyświetlany identyfikator związanymi z nim wartościami innych pól danej tabeli. I tak zamiast wpisywać liczbę 3 w oknie widoku arkusza danych tabeli, będziemy mogli wybrać nazwę gatunku danego filmu. Aby osiągnąć ten cel, zaznacz oba pola tabeli Gatunek i kliknij przycisk Dalej (rysunek 3.8). Rysunek 3.8. Kreator odnośników umożliwia „ukrycie” przed administratorem wykorzystanego do połączenia tabel klucza głównego i zastąpienie go dowolną, opisową wartością, np. nazwą danego gatunku filmowego 8. SZBD Access 2010 umożliwia też posortowanie danych
wykorzystywanych do łączenia tabel. Aby ułatwić administratorowi przypisywanie poszczególnych filmów do gatunków, posortuj je alfabetyczne według nazw.
64
Access 2010 PL • Ćwiczenia praktyczne
9. Odpowiadając na kolejne pytanie kreatora, upewnij się, czy
pole wyboru Ukryj kolumnę klucza (zalecane) jest zaznaczone, i kliknij przycisk Dalej — w ten sposób gatunki filmowe będą wybierane wyłącznie na podstawie nazw. 10. Ostatnie pytanie kreatora będzie dotyczyło nazwy tworzonej kolumny: T Wpisz taką samą nazwę, jaką ma łączona tabela (Gatunek), T Nie zaznaczaj pola Włącz integralność danych (jego znaczenie wyjaśniliśmy w ćwiczeniu poświęconym edytowaniu relacji), T Nie zaznaczaj pola Zezwalaj na wiele wartości (jego znaczenie wyjaśniliśmy w dalszej części rozdziału na przykładzie relacji łączącej tabele Film i Aktor), T I kliknij przycisk Zakończ. 11. Po zakończeniu pracy kreatora odnośników konieczne będzie zapisanie tabeli nadrzędnej — zapisz ją pod nazwą Film. Wynik pracy kreatora został pokazany na rysunku 3.9.
Rysunek 3.9. Zakładka Odnośnik pozwala poznać efekt pracy kreatora odnośników: w tym przypadku dane pobierane z tabeli Gatunek będą wyświetlane w polu listy do połączenia tabel wykorzystana została pierwsza kolumna (kolumna klucza podstawowego), ale dane będą pobierane z dwóch kolumn. Ponieważ szerokość pierwszej kolumny została ustawiona na 0, użytkownik zobaczy w polu listy wyłącznie dane przechowywane w drugiej kolumnie tabeli Gatunek
Rozdział 3. • Relacje
65
12. W ten sam sposób, w jaki połączyliśmy tabele Film i Gatunek,
należy połączyć tabele Film i Rezyser: T
Po ustawieniu kursora w pustym polu kolumny Typ danych z listy dostępnych typów wybierz Kreator odnośników….
T
Ponownie dane będą pobierane z innej tabeli, ale tym razem z tabeli Rezyser.
T
Aby ułatwić przeglądanie i wprowadzanie danych bezpośrednio do tabeli, z listy kolumn tabeli Aktor należy wybrać IdRezysera (klucz podstawowy powinien być wykorzystany do łączenia wszystkich tabel) oraz Nazwisko (istnieje mniejsze prawdopodobieństwo, że kilku reżyserów będzie nosić to samo nazwisko niż to samo imię). Możliwe jest również wskazanie większej liczby kolumn z tabeli połączonej, ale wtedy dane wyświetlane w polu listy będą zajmować dużo miejsca na ekranie i w efekcie, zamiast ułatwiać, będą utrudniać korzystanie z bazy danych.
T
Po posortowaniu danych według nazwisk aktorów i ukryciu pola klucza podstawowego pozostaje jeszcze podanie nazwy tworzonej kolumny odnośnika (Rezyser) i zapisanie zmian w tabeli Film. Odpowiednikiem utworzenia odnośnika do innej tabeli jest nałożenie na kolumnę ograniczenia REFERENCES (klucz obcy). W efekcie ograniczymy listę dopuszczalnych dla danej kolumny wartości do wartości przechowywanych w odpowiadającej jej kolumnie w powiązanej tabeli. Kolumny z nałożonym ograniczeniem REFERENCES mogą przechowywać wartości NULL (niewypełnione pola), o ile nie zabraniają tego inne ograniczenia. Aby SZBD Access mógł utworzyć klucz obcy, musi wcześniej być utworzona tabela, do której klucz będzie się odwoływał. Dodatkowo w tabeli tej musi znajdować się odpowiednia kolumna (lub kolumny), dla której zdefiniowano taki sam typ danych jak dla kolumny z nałożonym ograniczeniem REFERENCES. Na kolumnę taką musi być także nałożone jedno z dwóch ograniczeń: PRIMARY KEY lub UNIQUE.
66
Access 2010 PL • Ćwiczenia praktyczne
Ć W I C Z E N I E
3.5
Pola wielowartościowe
Skoro w jednym filmie gra wielu aktorów, a ten sam aktor występuje w wielu filmach, wydaje się, że niemożliwe jest utworzenie kolumny odnośnika w tabeli Film (wtedy w filmie mógłby zagrać tylko jeden aktor) ani w tabeli Aktor (wtedy z kolei aktor mógłby zagrać tylko w jednym filmie). Ponieważ wiele osób próbowało — błędnie — rozwiązać ten problem, dodając do jednej z tabel kilka kolumn (w naszym przykładzie do tabeli Film moglibyśmy dodać kolumny Aktor1, Aktor2 itd.), SZBD Access uprościł tworzenie relacji typu wiele do wielu. Umieszczenie w tabeli wielu kolumn, które odwołują się do tej samej kolumny innej tabeli, jest bardzo złym pomysłem. Nie tylko znacznie ogranicza funkcjonalność bazy (musimy z góry założyć maksymalną liczbę aktorów, którzy mogą zagrać w jednym filmie) i powoduje, że w naszej tabeli przechowywanych jest mnóstwo wartości Null (bo w większości przypadków interesuje nas tylko kilku aktorów grających w danym filmie), ale również ogromnie utrudnia tworzenie powiązanych z taką tabelą formularzy i raportów.
Aby połączyć tabele Film i Aktor: 1. Wyświetl projekt tabeli Film. 2. Dodaj kolejną kolumnę odnośnika, wiążąc ją z kolumnami IdAktora i Nazwisko tabeli Aktor. 3. Posortuj dane według nazwisk i ukryj kolumnę klucza. 4. Kończąc pracę kreatora: T zmień nazwę kolumny odnośnika na Nazwiska, T zaznacz pole Zezwalaj na wiele wartości (rysunek 3.10). Rysunek 3.10. W ten sposób w kolumnie odnośnika Nazwiska będzie można zapisywać dowolną liczbę nazwisk grających w danym filmie aktorów
Rozdział 3. • Relacje
67
5. Zamknij okno projektu tabeli Film i zapisz wprowadzone w niej
zmiany. Ć W I C Z E N I E
3.6
Edytowanie relacji
Zanim połączymy tabele Film i Osoba, zmodyfikujemy relacje utworzone między pozostałymi tabelami. W tym celu: 1. Przejdź na zakładkę Narzędzia bazy danych i kliknij przycisk Relacje. 2. Aby upewnić się, że wszystkie połączone tabele zostały wyświetlone, kliknij prawym przyciskiem myszy pusty obszar okna relacji i z menu kontekstowego wybierz opcję Pokaż wszystko. 3. Za pomocą techniki „przeciągnij i upuść” uporządkuj ikony tabel, tak aby linie obrazujące relacje nie krzyżowały się, i dopasuj rozmiar ikon poszczególnych tabel, tak by widoczne były wszystkie ich kolumny (rysunek 3.11). Rysunek 3.11. Linie łączące poszczególne tabele przedstawiają utworzone pomiędzy nimi powiązania
4. Na tym etapie relacje łączące poszczególne tabele nie
odzwierciedlają jeszcze typów powiązań (wszystkie te powiązania powinny być typu jeden do wielu). Aby określić typ relacji:
68
Access 2010 PL • Ćwiczenia praktyczne T
T
T
Kliknij prawym przyciskiem myszy linię łączącą tabele Film i Gatunek, a następnie z menu kontekstowego wybierz opcję Edytuj relację…. Zaznacz pole wyboru Wymuszaj więzy integralności — w ten sposób określony zostanie typ powiązania i SZBD Access będzie automatycznie sprawdzał, czy dane w połączonych tabelach są prawidłowe (np. czy użytkownik nie próbował przypisać filmu do nieistniejącego w bazie gatunku). Zaznacz pole wyboru Kaskadowo aktualizuj pola pokrewne — w ten sposób zmiana wartości klucza podstawowego tabeli podrzędnej zostanie automatycznie uwzględniona w tabeli nadrzędnej (jeżeli ktoś zmieni identyfikator gatunku filmowego, np. komedii z 3 na 33, zmiana ta zostanie automatycznie przeprowadzona w tabeli Film, dzięki czemu filmy, które wcześniej zostały zaklasyfikowane jako komedie, nadal będą komediami) (rysunek 3.12).
Rysunek 3.12. O ile kaskadowa aktualizacja powiązanych pól zabezpiecza przed przypadkową modyfikacją wartości kluczy podstawowych, o tyle kaskadowe usuwanie może spowodować przypadkowe usunięcie wielu danych T
T
Nie zaznaczaj pola wyboru Kaskadowo usuń rekordy pokrewne — zaznaczenie tego pola umożliwi nie tylko usunięcie gatunku, do którego zostały zaklasyfikowane pewne filmy, ale SZBD Access automatycznie wyrzuci z bazy informacje o wszystkich filmach usuwanego gatunku (jeżeli ktoś usunąłby wiersz z gatunkiem komedia, z tabeli Film zostałyby usunięte wszystkie filmy zaklasyfikowane jako komedie). Kliknij przycisk OK.
Rozdział 3. • Relacje
69
5. Linia łącząca tabele Film i Gatunek zostanie pogrubiona i,
co najważniejsze, na jej końcach wyświetlone zostaną symbole 1 i ∞, obrazujące typ powiązania. 6. Powtórz czynności opisane w punkcie 4. dla pozostałych relacji. Efekt pomyślnego wykonania ćwiczenia pokazany został na rysunku 3.13.
Rysunek 3.13. Zgodnie z założeniem projektu, jeden aktor (symbol 1) może zagrać w wielu (symbol ∞) filmach, do jednego gatunku może należeć wiele filmów, jeden reżyser może nakręcić wiele filmów, a pole wielowartościowe pozwala wielu aktorom zagrać w tym samym filmie 7. Zamknij okno relacji i zapisz wprowadzone zmiany. Ć W I C Z E N I E
3.7
Wprowadzenie przykładowych danych
Po zdefiniowaniu łączących tabele relacji należy wprowadzić przykładowe dane do tabel słownikowych i podrzędnych. Aby wprowadzić przykładowe dane do bazy: 1. Wyświetl tabelę Gatunek w widoku arkusza danych. 2. Wpisz nazwy kilku gatunków filmów. 3. Ponieważ nie planujemy podczas wpisywania danych dodawania do tabel bazy Filmoteka dodatkowych kolumn, należy ukryć kolumnę Dodaj nowe pole: T rozwiń menu Plik i kliknij przycisk Opcje, T przejdź na zakładkę Bieżąca baza danych,
70
Access 2010 PL • Ćwiczenia praktyczne
usuń zaznaczenie pola wyboru Włącz zmiany projektu w tabelach w widoku arkusza danych, T kliknij OK (żeby zmiany zaczęły obwiązywać, konieczne może być zamknięcie i ponowne otwarcie bazy danych). 4. Aby przekonać się, czy możliwe jest wpisanie filmów bez jednoczesnego określenia gatunku, reżysera czy aktora, wprowadź przykładowe dane o kilku filmach. Zwróć uwagę na możliwość formatowania wpisywanych opinii (rysunek 3.14). T
Rysunek 3.14. Przykładowe dane wprowadzone do tabeli Film 5. Przekonaj się, że chociaż pole odnośnika może zawierać wartość nieokreśloną (wartość Null), nie może zawierać
6. 7. 8. 9.
10.
wartości nieodpowiadającej jednemu z kluczy podstawowych powiązanej tabeli. Innymi słowy, niemożliwe jest zaklasyfikowanie filmu do nieistniejącego gatunku. Zamknij okno tabeli Film. Otwórz w widoku arkusza danych tabelę Rezyser. Wpisz nazwiska i imiona kilku reżyserów. Zamknij okno tabeli Rezyser i otwórz w widoku arkusza danych tabelę Aktor. Wpisz dane kilku aktorów. Zamknij okno tabeli Aktor i raz jeszcze otwórz w widoku arkusza danych tabelę Film. Ustaw kursor w polu Gatunek pierwszego z wpisanych filmów i kliknij wyświetloną z prawej strony pola strzałkę — zobaczysz listę nazw wprowadzonych gatunków filmów (rysunek 3.15). Zwróć uwagę, że niemożliwe jest dodawanie nowych rekordów do tabel podrzędnych w widoku arkusza danych tabeli nadrzędnej. Aby np. dodać nowy gatunek filmów, należy otworzyć tabelę Gatunek, nie Film.
Rozdział 3. • Relacje
71
Rysunek 3.15. Gdy mamy już dane w tabelach podrzędnych, wpisując dane do tabeli nadrzędnej, możemy się do nich odwoływać. W tym przykładzie niektóre kolumny zostały ukryte — aby ukryć wybrane kolumny, należy kliknąć ich nagłówek prawym przyciskiem myszy i z menu kontekstowego wybrać opcję Ukryj pola Ć W I C Z E N I E
3.8
Tabela łącznikowa
Tabele Film i Osoba połączone są związkiem typu wiele do wielu. Ponieważ chcemy zapisać pewne informacje (takie jak daty pożyczenia i zwrotu) o samym fakcie wypożyczenia filmu, implementacja tego związku wymaga utworzenia dodatkowej tabeli łącznikowej, w której przechowywane będą wartości kluczy podstawowych obu tabel. W ten sposób relacja typu wiele do wielu zostanie zastąpiona dwoma równorzędnymi relacjami typu wiele do jednego. Aby zbudować tabelę łącznikową: 1. Utwórz nową tabelę w widoku projektu. 2. Za pomocą kreatora odnośników utwórz relację łączącą tę tabelę z tabelą Film (tak jak poprzednio, tabele muszą być powiązane na podstawie wartości klucza podstawowego tabeli podrzędnej, ale wyświetlane powinny być alfabetycznie ułożone tytuły filmów). Ta kolumna nie powinna przechowywać wielu wartości. 3. Zapisz nowo tworzoną tabelę pod nazwą Pozyczka. W odpowiedzi na ostrzeżenie o braku zdefiniowanego klucza podstawowego kliknij przycisk Nie — tabela łącznikowa, przechowująca wyłącznie wartości kluczy podstawowych powiązanych tabel, nie wymaga dodatkowej kolumny klucza podstawowego.
72
Access 2010 PL • Ćwiczenia praktyczne
4. Za pomocą kreatora odnośników utwórz relację łączącą tę tabelę
z tabelą Osoba (tak jak poprzednio, tabele muszą być powiązane na podstawie wartości klucza podstawowego tabeli podrzędnej, ale wyświetlane powinny być alfabetycznie ułożone nazwiska osób). Również pola tej kolumny nie będą przechowywały wielu wartości. 5. Dodaj kolumny DataPozyczki i DataZwrotu typu Data/godzina
i o formacie Data długa. Nadaj obu kolumnom odpowiednie tytuły, a dla kolumny DataPozyczki dodatkowo określ wartość domyślną — wynik funkcji Now (w ten sposób datą pożyczenia automatycznie będzie bieżąca data). 6. Dodaj jeszcze kolumnę Uwagi typu Nota i zezwól na
formatowanie uwag dotyczących pożyczenia przez daną osobę wybranego filmu. 7. Na końcu zaznacz dwie pierwsze kolumny tabeli (obie kolumny
odnośników) i kliknij widoczny na wstążce przycisk Klucz podstawowy — w ten sposób kluczem tabeli Pozyczka będzie kombinacja identyfikatorów filmu i osoby (rysunek 3.16). Rysunek 3.16. Gotowy projekt tabeli łącznikowej (tabeli przechowującej informacje o pożyczonych różnym osobom filmach)
8. Zamknij okno projektu tabeli Pozyczka i wyświetl okno Relacje. 9. Kliknij prawym przyciskiem myszy wolny obszar okna relacji
i z menu kontekstowego wybierz opcję Pokaż wszystko — wyświetlone zostaną tabele Pozyczka i Osoba.
Rozdział 3. • Relacje
73
10. Wykorzystaj umiejętności zdobyte w ćwiczeniu 3.5 i zmień
relacje łączące tabele Film, Pozyczka i Osoba tak, aby SZBD wymuszał przestrzeganie więzów integralności, kaskadowo aktualizował i kaskadowo usuwał powiązane pola (rysunek 3.17).
Rysunek 3.17. Widok struktury bazy danych Filmoteka — taki układ tabel nazywany jest diagramem E/R (Encja/Relacja) Ć W I C Z E N I E
3.9
Korzystanie z tabeli łącznikowej
Dzięki tabeli łącznikowej Pozyczka w bazie danych możliwe będzie przechowywanie informacji o tym, które osoby wypożyczyły dane filmy, przy czym nie ma żadnych ograniczeń związanych z liczbą filmów, jakie może pożyczyć ta sama osoba, i liczbą osób, mogących wypożyczyć każdy film — tabele łącznikowe są powszechnie stosowane do tworzenia relacji typu wiele do wielu. Aby wprowadzić do bazy informacje o wypożyczeniu i zwrocie filmów: 1. Otwórz w widoku arkusza danych tabelę Osoba i wpisz dane znajomych. 2. Zamknij okno tabeli Osoba i otwórz w widoku arkusza danych tabelę Pozyczka.
74
Access 2010 PL • Ćwiczenia praktyczne
3. Kliknij pole Tytuł i z listy tytułów wybierz przykładowy tytuł 4.
5. 6.
7.
filmu. Przekonaj się, że niemożliwe jest zapisanie danych o wypożyczeniu filmu nieokreślonej osobie, tak samo jak niemożliwe jest wypożyczenie wskazanej osobie nieokreślonego filmu — Access nie pozwala na wpisywanie wartości Null do kolumn klucza podstawowego tabeli. Ustaw kursor w polu Nazwisko i z listy nazwisk wybierz nazwisko znajomego. Zwróć uwagę, że data wypożyczenia została automatycznie ustalona na dzisiejszą. Wpisanie daty zwrotu będzie oznaczało oddanie filmu. Wpisz przykładowe dane do tabeli. Zwróć uwagę, że: T ten sam film może być wielokrotnie wypożyczony, T ta sama osoba może pożyczyć dowolną liczbę filmów, T daty, zamiast wpisywać, można wybierać z kalendarza, T uwagi mogą być dowolnie formatowane (rysunek 3.18).
Rysunek 3.18. Tabela łącznikowa umożliwiająca odzwierciedlanie związków typu wiele do wielu
4 Kwerendy Podzielenie zapisanych w bazie danych pomiędzy odpowiednie tabele wyeliminowało dane nadmiarowe, ale utrudniło użytkownikom pobieranie interesujących ich w danym momencie informacji. Aby np. odczytać nazwisko reżysera i tytuły wyreżyserowanych przez niego filmów, trzeba odwołać się do dwóch powiązanych ze sobą tabel. Również modyfikowanie, wstawianie i usuwanie danych stało się kłopotliwe (np. niemożliwe jest usunięcie rekordu z tabeli podrzędnej, jeżeli klucz podstawowy tego rekordu występuje choć raz w tabeli nadrzędnej). Kolejny typ obiektów bazy danych programu Access — kwerendy — pozwala na zautomatyzowanie operacji pobierania i modyfikowania zapisanych w tabelach danych. Wszystkie systemy zarządzania relacyjnymi bazami danych, w tym Access, umożliwiają pobieranie i modyfikowanie danych za pomocą instrukcji strukturalnego języka zapytań (SQL), a kwerendy są właśnie zapisanymi w bazie danych instrukcjami tego języka. W zależności od rodzaju wykonywanej przez kwerendę operacji, dzieli się je na: 1. kwerendy wybierające dane (instrukcje SELECT języka SQL), 2. kwerendy krzyżowe (instrukcje SELECT … PIVOT języka SQL uzupełnione o charakterystyczną dla SZBD Access funkcję TRANSFORM), 3. kwerendy tworzące tabele (instrukcje SELECT INTO języka SQL), 4. kwerendy aktualizujące istniejące dane (instrukcje UPDATE języka SQL),
76
Access 2010 PL • Ćwiczenia praktyczne
5. kwerendy dołączające dane (instrukcje INSERT INTO języka SQL), 6. kwerendy usuwające istniejące dane (instrukcje DELETE
języka SQL).
Kwerendy wybierające dane Najczęściej wykorzystywaną i najbardziej rozbudowaną instrukcją języka SQL jest instrukcja SELECT, której w SZBD odpowiadają kwerendy wybierające dane (ten typ jest typem domyślnym nowo tworzonych kwerend). Kwerendy tego typu pobierają dane zapisane w tabelach, przekształcają je lub wyliczają na ich podstawie dane pochodne (np. na podstawie ceny towaru SZBD Access może wyliczyć wartość podatku). Ć W I C Z E N I E
4.1
Wybieranie kolumn z tabeli
Stosunkowo rzadko użytkownik jest zainteresowany wszystkimi zapisanymi w tabeli danymi o określonym obiekcie. Jeżeli np. w danym momencie chce się dowiedzieć, kto pożyczył film o określonym tytule, prawdopodobnie nie chce znać daty produkcji filmu, a jedynie jego tytuł i nazwisko osoby, która go pożyczyła. Aby za pomocą kreatora utworzyć kwerendę wybierającą dane zapisane w określonych kolumnach tabeli: 1. Uruchom bazę danych Filmoteka. 2. Przejdź na zakładkę Tworzenie i uruchom kreator kwerend. 3. Upewnij się, czy zaznaczona jest opcja Kreator prostych kwerend
i kliknij OK. 4. Na liście rozwijanej Tabele/Kwerendy wybierz tabelę źródłową
(tabelę, której dane będą pobierane przez tworzoną kwerendę). W tym przypadku będzie to tabela Film. 5. Z listy dostępnych pól wybierz kolumny Tytul i DataPr
(rysunek 4.1).
Rozdział 4. • Kwerendy
77
Rysunek 4.1. Pierwszym krokiem pracy kreatora kwerend jest wybór danych źródłowych
6. Podaj nazwę nowej kwerendy (kFilmTytul) i zakończ pracę
kreatora, otwierając kwerendę. Na ekranie zostanie wyświetlona lista tytułów filmów i dat ich produkcji. 7. Wyświetl kwerendę w widoku SQL (aby wyświetlić listę dostępnych dla kwerend widoków, należy kliknąć znajdującą się w prawym dolnym rogu okna kwerendy ikonę Widok SQL; można też kliknąć nagłówek okna kwerendy prawym przyciskiem myszy i z menu kontekstowego wybrać Widok SQL). Tworząca kwerendę instrukcja języka SQL powinna wyglądać następująco: SELECT Film.[Tytul], Film.[DataPr] FROM Film;
SZBD Access zawsze umieszcza nazwy kolumn w nawiasach kwadratowych, nawet jeżeli nie są one potrzebne. 8. Zamknij okno kwerendy. Ć W I C Z E N I E
4.2
Wyrażenia arytmetyczne
SZBD może wyliczać dane pochodne na podstawie danych zapisanych w pojedynczych polach (np. podwojoną cenę zakupu filmów, czy różnice pomiędzy ceną zakupu i sprzedaży) albo na podstawie danych zapisanych w kilku polach. Ponieważ kreator kwerend nie umożliwia tworzenia wyrażeń, tę i większość następnych kwerend przygotujemy w widoku projektu.
78
Access 2010 PL • Ćwiczenia praktyczne
Aby utworzyć kwerendę zwracającą m.in. różnicę pomiędzy ceną filmu a wpływami z jego wypożyczania: 1. Przejdź na zakładkę Tworzenie i kliknij przycisk Projekt kwerendy. 2. Dodaj do listy tabel źródłowych kwerendy tabelę Film i zamknij okno Pokazywanie tabeli. 3. Okno projektu kwerendy składa się z dwóch części: T w górnej znajdują się tabele, do których odwołuje się kwerenda, T w dolnej — definicje poszczególnych kolumn kwerendy. 4. Dodaj kolumnę do wyniku kwerendy — możesz to zrobić na kilka sposobów: T przeciągając myszą wybraną kolumnę tabeli źródłowej do dolnego okna, T dwukrotnie klikając nazwę kolumny, T wpisując nawę kolumny w wierszu Pole, T rozwijając listę możliwych do dodania kolumn. 5. Ustaw kursor w pierwszym polu wyświetlanej w dolnej części ekranu tabeli i wybierz nazwę kolumny przechowującej tytuły filmów (rysunek 4.2). Rysunek 4.2. Wybieranie kolumn źródłowych w widoku projektu tabeli jest równie łatwe, jak za pomocą kreatora kwerend
Rozdział 4. • Kwerendy
79
Symbol * oznacza „wszystkie kolumny”. Tak więc, jeżeli kwerenda ma zwrócić wszystkie dane zapisane w tabeli, możemy albo kolejno zaznaczać wszystkie kolumny, albo wybrać ten symbol. 6. Do drugiego pola przeciągnij kolumnę Cena. 7. Trzecia kolumna kwerendy będzie zwracała zaokrągloną do
liczb całkowitych cenę zakupu filmu. W tym celu w kolejnym polu wpisz CInt(Cena) — funkcja języka VBA CInt konwertuje dane przekazane jako argument jej wywołania do typu liczb całkowitych (ang. Integer). Domyślnie nazwy kolumn kwerendy odpowiadają nazwom kolumn tabel źródłowych, z których pobierane są dane. Ponieważ w tabeli Film nie ma kolumny przechowującej zaokrąglone ceny filmów, SZBD Access nadał kolumnie tej kwerendy nazwę Wyr1. Nazwę tę możemy zmienić. 8. W czwartej kolumnie kwerendy zwracane będą informacje
o zysku osiągniętym z wypożyczenia filmu — z listy kolumn tabeli źródłowej wybierz Zysk. 9. Ostatnia kolumna kwerendy będzie zwracała dane o zysku (lub stracie), wyliczone jako różnica pomiędzy ceną zakupu filmu a uzyskanym z jego wypożyczenia zyskiem. W tym celu w kolejnym polu wpisz Zysk – Cena. Projekt kwerendy pokazany został na rysunku 4.3.
Rysunek 4.3. Kwerenda zwracająca dane źródłowe i wyliczone na ich podstawie dane pochodne
80
Access 2010 PL • Ćwiczenia praktyczne
10. Aby uruchomić kwerendę, naciśnij znajdujący się na wstążce
przycisk Uruchom. Na ekranie zostaną wyświetlone dane, przypominające te, które pokazane są na rysunku 4.4.
Rysunek 4.4. Kwerenda zwraca tytuł filmu, cenę zakupu, zaokrągloną cenę zakupu, zysk i różnicę pomiędzy ceną zakupu a osiągniętym zyskiem 11. Przełącz się do widoku SQL. Tworząca kwerendę instrukcja
języka SQL powinna wyglądać następująco: SELECT Film.Tytul, Film.Cena, CInt([Cena]) AS Wyr1, Film.Zysk, [Zysk]-[Cena] AS Wyr2 FROM Film;
12. Zamknij okno kwerendy i zapisz ją pod nazwą kFilmZysk. Ć W I C Z E N I E
4.3
Literały
SZBD Access umożliwia również dodawanie do wyniku kwerend dodatkowych kolumn, zawierających we wszystkich polach tę samą, określoną wartość. Aby utworzyć kwerendę, w której tytuł filmu zostanie oddzielony od daty jego produkcji ciągiem znaków „nakręcony w”: 1. Utwórz nową kwerendę w widoku projektu. 2. Jako tabelę źródłową wskaż tabelę Film. 3. Jako pierwszą kolumnę kwerendy wybierz kolumnę Tytul. 4. W polu drugiej kolumny kwerendy wpisz ciąg znaków "nakręcony w " (w programie Access ciągi znaków muszą być umieszczane w cudzysłowach, w innym przypadku będą traktowane jak identyfikatory obiektów, nazwy zmiennych lub zastrzeżone słowa kluczowe).
Rozdział 4. • Kwerendy
81
5. Na trzecią kolumnę kwerendy wybierz kolumnę DataPr. Gotowy
projekt kwerendy został pokazany na rysunku 4.5. Rysunek 4.5. Kwerenda dodająca do zwracanych danych źródłowych tekst opisujący te dane — w tym przypadku fraza „nakręcony w” zostanie umieszczona w każdym wierszu wyniku 6. Uruchom kwerendę, a następnie przełącz się do widoku SQL.
Definicja kwerendy powinna wyglądać następująco: SELECT Film.Tytul, "nakręcony w " AS Wyr1, Film.DataPr FROM Film;
7. Zamknij okno kwerendy i zapisz ją pod nazwą kFilmDataPr. Ć W I C Z E N I E
4.4
Łączenie ciągów znaków
Zgodnie z regułami teorii relacyjnych baz danych, projektując tabelę, w poszczególnych kolumnach zapisaliśmy niepodzielne, atomowe informacje. Czasami jednak chcielibyśmy połączyć w jednej kolumnie dane przechowywane w kilku kolumnach. Aby wyświetlić adres osoby w jednej kolumnie: 1. Utwórz nową kwerendę w widoku projektu. 2. Jako tabelę źródłową wskaż tabelę Osoba. 3. Jako pierwszą kolumnę kwerendy wybierz kolumnę Nazwisko. 4. W polu drugiej kolumny kwerendy wpisz wyrażenie Miasto & " " & UlicaNrDomu — symbolem operatora konkatenacji (łączenia ciągów znaków) w SZBD Access jest znak &, pojedyncza spacja dodana pomiędzy nazwą miasta a ulicy poprawi czytelność wyniku.
82
Access 2010 PL • Ćwiczenia praktyczne
5. Uruchom kwerendę, a następnie przełącz się do widoku SQL.
Definicja kwerendy powinna wyglądać następująco: SELECT Osoba.Nazwisko, [Miasto] & " " & [UlicaNrDomu] AS Wyr1 FROM Osoba;
6. Zamknij okno kwerendy i zapisz ją pod nazwą kOsobaAdres. Ć W I C Z E N I E
4.5
Eliminowanie duplikatów
Oczywiście, w dobrze zaprojektowanej relacyjnej bazie danych te same dane nie są dublowane. Jednak typ łączących poszczególne tabele relacji powoduje, że niektóre informacje mogą być zwrócone użytkownikowi kilkakrotnie. Gdybyśmy np. chcieli wyświetlić całą zawartość tabeli Pozyczka, dane o tym samym filmie zostaną wyświetlone tyle razy, ile razy został wypożyczony, a dane każdej osoby — tyle razy, ile filmów pożyczyła. Aby wyeliminować z wyniku kwerendy duplikaty danych: 1. Utwórz nową kwerendę w widoku projektu. 2. Jako tabelę źródłową wskaż tabelę Pozyczka. 3. Na pierwszą kolumnę kwerendy wybierz kolumnę Tytul. 4. Uruchom kwerendę — w wyniku zostanie wyświetlona lista tytułów filmów, które były choć raz wypożyczone (rysunek 4.6). Rysunek 4.6. Tytuły filmów, które pożyczyło kilka osób, wyświetlone zostały wielokrotnie
5. Wyświetl kwerendę w widoku SQL. 6. Ustaw kursor za słowem SELECT i dopisz słowo kluczowe DISTINCT:
Rozdział 4. • Kwerendy
83
SELECT DISTINCT Pozyczka.Tytul FROM Pozyczka;
7. Ponownie uruchom kwerendę — tym razem duplikaty tytułów
zostały automatycznie usunięte z wyniku kwerendy (rysunek 4.7). Rysunek 4.7. Słowo kluczowe DISTINCT powoduje usunięcie z wyniku kwerendy wszystkich powtórzeń 8. Przełącz się do widoku projektu kwerendy i dodaj do niej
kolumnę Nazwisko. Uruchom kwerendę i przekonaj się, że znowu zwraca wszystkie wiersze — dzieje się tak dlatego, że teraz słowo kluczowe DISTINCT eliminuje powtórzenia kombinacji filmu i pożyczającej go osoby, a ponieważ te dwie kolumny są kluczem podstawowym tabeli Pozyczka, takich powtórzeń w niej na pewno nie było. Usuń drugą (zwracającą nazwiska) kolumnę kwerendy. 9. Zamknij okno kwerendy i zapisz ją pod nazwą kPozyczoneFilmy. Ć W I C Z E N I E
4.6
Sortowanie danych
Utworzone do tej pory kwerendy zwracały dane w takim porządku, w jakim informacje te zapisane były w tabelach źródłowych. Natomiast użytkownicy bazy danych spodziewają się informacji posortowanych według określonych kryteriów, np. tytułów, cen filmów czy nazwisk ich reżyserów. Aby posortować dane zwracane przez kwerendę: 1. Utwórz nową kwerendę w widoku projektu. 2. Jako tabelę źródłową wybierz tabelę Film. 3. Pierwszą kolumną kwerendy będzie kolumna Tytul,
drugą — Cena.
84
Access 2010 PL • Ćwiczenia praktyczne
4. Rozwiń pole Sortuj: kolumny Cena i wybierz z listy pozycję
Malejąco. 5. Uruchom kwerendę — dane o filmach zostały posortowane
od najdroższego do najtańszego filmu. 6. Wyświetl kwerendę w widoku SQL. Definicja kwerendy
powinna wyglądać następująco: SELECT Film.Tytul, Film.Cena FROM Film ORDER BY Film.Cena DESC;
7. Zapisz kwerendę pod nazwą kFilmCena. Ć W I C Z E N I E
4.7
Ograniczanie liczby wierszy
SZBD Access umożliwia nie tylko sortowanie zwracanych przez kwerendy danych, ale również ograniczenie wyników kwerendy do określonej w sposób bezwzględny lub procentowy liczby wierszy. Aby wyświetlić tytuły trzech przynoszących największe zyski filmów: 1. Utwórz nową kwerendę w widoku projektu. 2. Jako tabelę źródłową wybierz tabelę Film. 3. Pierwszą kolumną kwerendy będzie kolumna Tytul,
drugą — Zysk. 4. Rozwiń pole Sortuj: kolumny Zysk i wybierz z listy pozycję
Malejąco. 5. Na znajdującej się na wstążce liście rozwijanej Zwróć wpisz 3
(rysunek 4.8). 6. Uruchom kwerendę, a następnie przełącz się do widoku SQL.
Definicja kwerendy powinna wyglądać następująco: SELECT TOP 3 Film.Tytul, Film.Zysk FROM Film ORDER BY Film.Zysk DESC;
7. Zapisz kwerendę pod nazwą kFilmDochodowe.
Rozdział 4. • Kwerendy
85
Rysunek 4.8. W praktyce ogranicza się liczbę wcześniej posortowanych danych — w innym przypadku SZBD Access zwróciłby informacje o trzech, wybranych na podstawie pozycji wiersza w tabeli, filmach
Ć W I C Z E N I E
4.8
Wybieranie filmów na podstawie tytułów
Dotychczas utworzone kwerendy zwracały wszystkie wiersze wskazanych kolumn tabel źródłowych. Tymczasem użytkowników baz danych stosunkowo rzadko interesuje komplet przechowywanych w tabeli danych. Zamiast tego chcieliby np. dowiedzieć się, kto pożyczył film o określonym tytule, czy poznać listę filmów danego reżysera. Zrealizowanie tego zadania wymaga selekcjonowania (wybierania) danych. Operacja ta przeprowadzana jest za pomocą zdefiniowanego dla kwerendy warunku logicznego. Aby wyświetlić dane filmu o określonym tytule: 1. Utwórz nową kwerendę w widoku projektu. 2. Jako tabelę źródłową wskaż tabelę Film. 3. Na kolejne kolumny kwerendy wybierz kolumny: Tytul, Cena, Gatunek, Rezyser. 4. W polu Kryteria: kolumny Tytul wpisz warunek logiczny: Like "*life*" (operator LIKE jest operatorem sprawdzania zgodności ciągu znaków, w tym przypadku tytułów filmów, z podanym wzorcem; zapisany w cudzysłowie wzorzec jest zgodny z tytułami, które zawierają wyraz life — występujący przed i po tym słowie znak gwiazdki zastępuje dowolny ciąg znaków)1. 1
Lista wszystkich operatorów języka SQL znajduje się w rozdziale 3.
86
Access 2010 PL • Ćwiczenia praktyczne
5. Uruchom kwerendę, a następnie przełącz się do widoku SQL.
Definicja kwerendy powinna wyglądać następująco: SELECT Film.Tytul, Film.Cena, Film.Gatunek, Film.Rezyser FROM Film WHERE (((Film.Tytul) Like "*life*"));
SZBD Access umieszcza wszystkie warunki w nawiasach nawet jeżeli w tym przypadku są zbędne 6. Zapisz kwerendę pod nazwą kFilmyLife. Ć W I C Z E N I E
4.9
Wybieranie filmów na podstawie ich ceny
Aby wybrać tytuły filmów, których cena zakupy należy do przedziału od 5 do 50 zł: 1. Utwórz nową kwerendę w widoku projektu. 2. Jako tabelę źródłową wskaż tabelę Film. 3. Jako pierwszą kolumnę kwerendy wybierz Tytul, jako drugą — Cena. 4. W polu Kryteria: kolumny Cena wpisz warunek logiczny: Between 5 And 50 (operator BETWEEN ... AND sprawdza, czy dana wartość należy do określonego przedziału, i może być zastąpiony poniższą koniunkcją >=5 And = "Z" Then KeyAscii = 0 End If
Rysunek 8.5. Ponieważ ten warunek będzie automatycznie sprawdzany po naciśnięciu jakiegokolwiek klawisza, niemożliwe będzie również usuwanie błędnych danych klawiszem Delete — żeby je usunąć, trzeba będzie przenieść kursor do pola Nazwisko i nacisnąć klawisz Esc 4. Przełącz się do widoku formularza i sprawdź działanie dodanej
procedury zdarzenia — próba wpisania w polu Imie znaku specjalnego lub cyfry zakończy się niepowodzeniem. 5. Aby dodatkowo uniemożliwić wpisywanie nazwisk liczących mniej niż trzy lub więcej niż 30 znaków: T Wyświetl formularz Rezyser w widoku projektu, T Wyświetl właściwości pola tekstowego Nazwisko, przejdź do zakładki Zdarzenia i dodaj procedurę zdarzenia Przy utracie fokusu, T Tym razem procedura będzie wywoływana tylko raz — kiedy użytkownik zakończy wpisywanie nazwiska reżysera — i będzie sprawdzała długość wprowadzonego ciągu znaków; dodatkowo włączymy bardzo prostą obsługę błędów i z wprowadzonego przez użytkownika nazwiska usunięte zostaną początkowe i końcowe spacje (rysunek 8.6):
174
Access 2010 PL • Ćwiczenia praktyczne On Error Resume Next Dim intNazwisko As Integer Nazwisko.Value = Trim(Nazwisko.Value) intNazwisko = Len(Nazwisko.Value) Select Case intNazwisko Case Is < 3 MsgBox "Zbyt krótkie nazwisko" Nazwisko.Value = "" Case Is > 30 MsgBox "Zbyt długie nazwisko" Nazwisko.Value = "" End Select
Rysunek 8.6. Funkcje Trim i Len to tylko dwie z licznych funkcji języka VBA, które mogą być wykorzystane do sprawdzania poprawności wprowadzonych przez użytkownika danych 6. Zamknij okno edytora kodu oraz okno właściwości pola
tekstowego Imie, uruchom formularz i przetestuj działanie dodanych procedur. 7. Zapisz wprowadzone do formularza zmiany. Ć W I C Z E N I E
8.14
Zapobiegamy wyświetlaniu raportów, które nie zawierają danych
Raport FilmOsoba zawierał dane o tytułach filmów wypożyczonych przez osoby o podanym nazwisku. Jeżeli natomiast w bazie nie znajdowały się dane osoby o podanym nazwisku, raport zawierał komunikaty o błędzie.
Rozdział 8. • Moduły
175
Po wykonaniu ćwiczeń z bieżącego rozdziału z pewnością domyślasz się, że rozwiązaniem tego problemu będzie dodanie procedury wywoływanej podczas wyświetlania raportu, w ramach której sprawdzimy, czy raport zawiera dane i — jeżeli nie — przerwiemy jego wyświetlanie. W rzeczywistości zadanie to jest bardzo proste. Aby zapobiec wyświetlaniu raportu, który nie zawiera danych: 1. Wyświetl projekt raportu Film_Osoba. 2. Wyświetl okno właściwości raportu i przejdź do zakładki Zdarzenia. 3. Jednym ze zdarzeń raportu jest zdarzenie, które zachodzi, gdy użytkownik próbuje otworzyć raport niezawierający danych. Ustaw kursor w polu Przy braku danych i kliknij znajdujący się z prawej strony wielokropek. 4. Utworzona zostanie deklaracja procedury zdarzenia Report_NoData. Zauważ, że jedynym argumentem tej procedury jest specjalny argument Cancel. Wykonywanie procedur zdarzeń, w których występuje atrybut Cancel, może być w łatwy sposób przerwane — wystarczy ustawić jego wartość na True. Aby poinformować użytkownika o przyczynie niewyświetlenia raportu, należy jeszcze wyświetlić odpowiedni komunikat (rysunek 8.7): Private Sub Report_NoData(Cancel As Integer) MsgBox "Brak filmów pożyczonych przez osobę o podanym nazwisku" _ , vbInformation + vbOKOnly, "Ostrzeżenie" Cancel = True End Sub
Rysunek 8.7. Procedura zdarzenia wywoływanego za każdym razem, gdy użytkownik podejmie próbę otwarcia niezawierającego żadnych danych raportu 5. Zapisz wprowadzone zmiany i przetestuj ich działanie.
176
Access 2010 PL • Ćwiczenia praktyczne
Ć W I C Z E N I E
8.15
Numerujemy zwracane przez kwerendę wiersze
Ponumerowanie wyników kwerendy to jedno z najczęstszych i — niestety — dość trudnych (wymagających znajomości klas i metod SZBD Access) zadań, które stoją przed użytkownikami programu Access. Ponieważ zaimplementowana w SZBD wersja języka SQL nie zawiera funkcji rankingu, musimy to zrobić z pomocą kodu VBA. Aby ponumerować wiersze kwerendy kFilmy5do50: 1. W pierwszej kolejności dodamy do tabeli Film kolumnę, w której będziemy zapisywali numery zwracanych przez kwerendę wierszy — w tym celu wyświetl projekt tabeli Film i dodaj do niej kolumnę Numer typu Liczba całkowita. 2. Dodaj kolumnę Numer do kwerendy kFilmy5do50. 3. Uruchom edytor VBA i w module Test utwórz nową procedurę numeruj. 4. W ramach procedury musimy uruchomić kwerendę kFilmy5do50 — wymaga to: T Zadeklarowania zmiennej typu Database i przypisania jej bieżącej bazy danych: Dim db As Database Set db = CurrentDb T
Zadeklarowania zmiennej typu Object i przypisania jej kwerendy kFilmy5do50 — właśnie do tego potrzebna była zmienna db: Dim rs As Object Set rs = db.OpenRecordset("kFilmy5do50")
5. Następnie w pętli będziemy zwiększać o 1 wartość zmiennej pomocniczej licz i wstawiać jej wartość do kolejnych pól
kolumny Numer. Operację tę będziemy powtarzać tak długo, aż ponumerujemy wszystkie zwracane przez kwerendę wiersze: Dim licz As Integer licz = 1 rs.MoveFirst Do While Not rs.EOF rs.Edit rs!numer = licz rs.Update rs.MoveNext licz = licz + 1 Loop
Rozdział 8. • Moduły
177
6. Zamknij okno edytora kodu — pozostało jeszcze dodanie
przycisku, który będzie uruchamiać naszą procedurę. Uruchamiając kwerendę kFilmy5do50 przez dwukrotne kliknięcie jej nazwy w okienku nawigacji, nie włączymy naszej procedury i w rezultacie kolumna Numer będzie zawierała błędne dane. 7. Wyświetl projekt formularza Film, rozwiń listę wszystkich
dostępnych formantów i usuń zaznaczenie pola wyboru Użyj kreatorów formantów. 8. Dodaj nowy przycisk z prawej strony pola Cena filmu. 9. Zmień nazwę przycisku na cmdNumeruj i tytuł na Numeruj. 10. Dodaj do tego przycisku procedurę zdarzenia Przy kliknięciu. W ramach tej procedury należy: T wywołać procedurę numeruj: Call numeruj T
otworzyć kwerendę kFilmy5do50: DoCmd.OpenQuery ("kFilmy5do50")
11. Przetestuj działanie przycisku i wywoływanej za jego pomocą
procedury — zwróć uwagę, że numeracja zawsze jest prawidłowa, czyli po zmianie cen filmów jest ona każdorazowo modyfikowana.
178
Access 2010 PL • Ćwiczenia praktyczne