Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
Microsoft Access.
Podrcznik administratora
Autor: Helen Feddema
Tumaczenie: Rafa Joca
ISBN: 83-246-0279-8
Tytu oryginau: Expert One-on-One
Microsoft Access Application Development
Format: B5, stron: 588
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
1 O autorce ...................................................................................................................................................11
1 Wprowadzenie .........................................................................................................................................13
17
Spis treci
265
377
Spis treci
Skorowidz ...............................................................................................................................................573
Aplikacja to co znacznie wicej ni tylko baza danych. Kada osoba znajca cho troch
Accessa moe utworzy baz danych, ale baza danych ze zbiorem niepowizanych ze sob
tabel, kwerend, formularzy i raportw to nie aplikacja. Aplikacja skada si z bazy danych
lub prawdopodobnie kilku baz danych zawierajcych znormalizowane tabele z odpowiednimi zwizkami midzy nimi, kwerend filtrujcych i sortujcych dane, formularzy
dodajcych i edytujcych dane, raportw wywietlajcych dane i prawdopodobnie tabeli lub
wykresw przestawnych analizujcych dane. Poczenie wszystkich tych elementw odbywa si dziki inteligentnie napisanemu kodowi VBA (ang. Visual Basic for Applications). Niniejszy rozdzia skupia si na przygotowaniach do wykonania aplikacji (pobranie i analiza
informacji od klienta) i wykonaniu tabel przechowujcych dane aplikacji.
Wikszo ksiek na temat Accessa przekazuje mnstwo informacji na temat tabel bazy danych (lub innych obiektw bazodanowych), ale rzadko informuje o sprawach najwaniejszych:
w jaki sposb podzieli surowe dane uzyskane od klienta na odpowiednie tabele, z jakiego
typu danych skorzysta dla poszczeglnych pl i jakie zwizki midzy tabelami utworzy,
by powstaa wydajna i dobrze zintegrowana aplikacja. Dziki kilku sesjom z klientem na
zasadzie zadawania pyta i odpowiadania na nie przedstawi, w jaki sposb wydoby
najistotniejsze informacje pomocne przy kreowaniu odpowiednich tabel i zwizkw.
Zawsze atwiej mi byo zrozumie pewien proces, gdy przygldaam si, jak robi to kto
inny. Prba wykonania zadania po przeczytaniu tylko i wycznie suchej dokumentacji
technicznej jest czsto znacznie trudniejsza. Z tego powodu w tym rozdziale wyjani, co
robi, gdy przygotowuj si do utworzenia aplikacji i jej tabel. Kolejne rozdziay powicone
bd wykonywaniu formularzy, kwerend i raportw. Oczywicie pewnych informacji technicznych nie da si unikn, ale zostan one przedstawione naprzemiennie z opisami zada do
wykonania. Wyjanienia znajd si na og po zadaniach do wykonania, a nie na odwrt.
Czasem wystarczy zobaczy, jak kto poprawnie wykonuje pewne zadanie, by mc samemu
wykonywa je prawidowo. Wywody czysto teoretyczne rzadko prowadz do poprawnego
wykonania zada.
D:\ROBOCZ~1\MAKIET~1\MICROS~1.POD\11DRUK~1\r01_r.doc
19
20
Aby zacz tworzy aplikacj w Accessie, trzeba speni dwa warunki: naley uwiadomi
sobie, jakie zadania ma wykonywa aplikacja i jakie wyniki zwraca; trzeba mie te odpowiedni ilo rzeczywistych danych. Zamiast po prostu poprosi klienta o list zada, jakie
aplikacja musi przeprowadzi, na og sama zadaj serie pyta, dziki ktrym potrafi wydoby najwaniejsze dla mnie informacje. Typowa sesja pyta i odpowiedzi zostaa przedstawiona w kolejnym podrozdziale. Jeli jednak istnieje aktualnie wykorzystywana baza
danych i dostpne s wydruki raportw oraz zrzuty ekranowe formularzy, znacznie atwiej
zorientowa si, jakie zadania naley obecnie wykona.
Aby mc osign najlepsze wyniki, trzeba mie dostp do duych iloci rzeczywistych
danych, na przykad informacji o elektronicznych ksikach zawartych w bazie danych wykorzystywanej w rozdziale 9 Modyfikacja istniejcej aplikacji. Jeeli ma si dostp do wystarczajco duej liczby reprezentatywnych danych i klienta, ktry chtnie odpowiada na
pytania, okrelenie potrzebnych tabel i ich pl nie powinno nastrcza duych problemw.
Po uzyskaniu tych informacji wykonanie w Accessie tabel i zwizkw midzy nimi, a take
kwerend, formularzy, raportw i kodu VBA powinno doprowadzi do powstania aplikacji,
ktrej oczekiwa klient.
Co ciekawe, czsto jestem proszona o rozpoczcie pracy nad aplikacj dla klienta, cho nie
otrzymaam adnych danych. Czasem trudno przekona klienta do przedstawionej wczeniej
koncepcji, ale uzyskanie rzeczywistych danych (w formie elektronicznej lub papierowej)
jest wane, by mc poprawnie wykona tabele i ich pola. Jeli sami (jako programici) musimy
wymyli dane, by co zaczo dziaa po utworzeniu tabel i innych obiektw, prawdopodobnie na pniejszym etapie bdziemy zmuszeni dokona z pewnoci bardzo gbokich
zmian w tabelach. Aby tego wszystkiego unikn, najlepiej dysponowa reprezentatywnymi danymi wprost od klienta.
Istniej sytuacje, w ktrych uzyskanie danych od klienta jest po prostu niemoliwe. Pierwsza
sytuacja dotyczy firmy dopiero rozkrcajcej biznes, ktra nie ma adnych danych historycznych.
21
Druga dotyczy firm, ktrych dane s poufne. W takich sytuacjach warto postara si, by
wymylone dane testowe byy zgodne z informacjami od klienta uzyskanymi w trakcie rozmw. Minimalizuje si wtedy ryzyko dokonywania poprawek w przyszoci.
Gdy uzyskao si dane w postaci elektronicznej lub papierowej, najlepiej uy ich jako surowego materiau, ktry pomaga w okreleniu pl potrzebnych w trakcie projektowania tabel i innych komponentw. Nie warto stosowa tych danych jako gotowych komponentw i ywcem
kopiowa ich struktury do aplikacji. Przygldajc si rzeczywistym danym, nietrudno zauway, czy zawieraj unikatowe identyfikatory produktw czy nie. Jeli istnieje taki unikatowy numer produktu, powinien sta si on kluczem gwnym tabeli produktw w przeciwnym
razie warto utworzy pole z automatyczn numeracj. Jeli klienci maj wiele adresw,
trzeba wykona powizan tabel z danymi adresowymi (jedno z zaoe normalizacji). Jeeli
klienci zawsze maj tylko jeden adres, jego dane mona w sposb bezporedni zapamita
w tabeli klientw. W wikszoci sytuacji, nawet jeli otrzymao si baz danych z tabelami
Accessa, trzeba dokona pewnych modyfikacji ze wzgldu na normalizacj, utworzy tabele pomocnicze i sowniki wykorzystywane jako rda danych dla list rozwijanych.
22
Pierwszym zadaniem w trakcie opracowywania bazy danych jest okrelenie jej elementw i zasad ich wzajemnej wsppracy. (W literaturze bazodanowej czsto stosuje si termin techniczny encja, ale my moemy pozosta przy mniej technicznym okreleniu element).
By moe klient korzysta obecnie z innej bazy danych. W zalenoci od osoby, ktra tworzya oryginaln baz danych, moe si to okaza wiksz przeszkod ni pomoc.
Jako przykad sposobu okrelania elementw, z ktrymi aplikacja musi sobie radzi, przeledzimy spotkanie z hipotetycznym klientem dajcym dostarczenia aplikacji pomocnej w jego
biznesie (firmie zabawkarskiej). Oto kilka podstawowych pyta zadawanych klientowi.
P:
Czym si zajmujecie?
O:
Sprzedajemy zabawki.
Potrzebujemy tabeli z zabawkami.
P:
O:
P:
O:
P:
O:
23
P:
Czy materiay kupujecie od innych dostawcw ni zabawki do odsprzeday, czy moe jeden dostawca sprzedaje wam materiay i gotowe zabawki?
O:
Wikszo naszych dostawcw sprzedaje nam wycznie gotowe zabawki. Cz sprzedaje tylko materiay. Jedynie kilku sprzedaje zarwno zabawki, jak i materiay.
Wszystkich dostawcw mona przechowywa w jednej tabeli z odpowiednimi
polami typu Tak/Nie, wskazujcymi, czy sprzedaj gotowe zabawki, czy materiay,
czy oba te elementy.
P:
Wasne zabawki tworzycie w warsztacie lub fabryce, czy te zlecacie ich wytwarzanie
innej firmie?
O:
P:
O:
Tylko jeden.
Nie jest potrzebna tabela powizana dla warsztatw.
P:
O:
P:
O:
P:
O:
P:
O:
Tak.
Potrzebujemy tabeli klientw oraz tabeli potencjalnych klientw.
P:
O:
Oboma.
Tabela listy mailingowej powinna zawiera adresy korespondencyjne i adresy e-mail.
24
O:
Po tej prostej serii pyta i odpowiedzi wiemy ju, e aplikacja potrzebuje tabel dla nastpujcych elementw (s to encje aplikacji):
n
zabawki,
kategorie,
dostawcy,
klienci,
adresy dostaw,
lista mailingowa,
materiay,
naprawy,
pracownicy,
zamwienia.
Dodatkowo potrzebnych bdzie kilka powizanych tabel przechowujcych dane zwizane z gwnymi tabelami. Co wicej, pojawi si tak zwane sowniki (tabele powizane)
wymagane do zapewnienia spjnoci danych. Stosuje si je do wypeniania rozwijanych list
wyboru.
25
Rysunek 1.1.
W wikszoci przypadkw najlepiej jest wybra opcj Widok projektu i zacz tworzy
pola tabeli. Pozostae opcje przydaj si w pewnych szczeglnych sytuacjach. Warto rozway,
czy tabela jest jedn z tabel standardowych (wtedy przydatnym skrtem staje si opcja
Kreator tabel), czy raczej nie (wtedy najlepszy wybr to Widok projektu). Wszystkie opcje
zostay dokadniej omwione w kolejnych podrozdziaach.
n
Opcja Widok arkusza danych ten wybr nie ma zbyt wiele do zaoferowania.
Nowa tabela zostaje otwarta w widoku arkusza danych i mona rozpocz wpisywanie
danych do pierwszego wiersza. Aby nada nazwy polom w tym widoku, trzeba
klikn je kilka razy (pocztkowo zawieraj nazwy Polen) a do jego zaznaczenia,
a nastpnie wpisa now nazw. Jest to znacznie mniej wygodne rozwizanie od
podawania nazw pl w widoku projektu. Access zgaduje typ danych na podstawie
informacji wpisanych w pierwszym wierszu. Czasem si myli, wic i tak trzeba
poprawia typy pl w widoku projektu. Na przykadowej tabeli przedstawionej
na rysunkach 1.2 i 1.3 po przejciu do widoku projektu nietrudno zauway, i pole
ToyID nie zostao rozpoznane jako pole klucza, natomiast pola przechowujce ceny
s typu Liczba zamiast Walutowy.
Rysunek 1.2.
Gdy tworzy si now tabel w widoku arkusza danych, wpisanie tekstu w polu
powoduje utworzenie pola typu Tekst; wpisanie liczby powoduje utworzenie pola
typu Liczba; wpisanie liczby ze znakiem dolara lub dopisanie tekstu z (w zalenoci
od ustawie regionalnych) powoduje powstanie pola typu Walutowy; wpisanie
daty w rozpoznawalnym formacie spowoduje powstanie pola typu Data/Godzina.
Jeli trzeba utworzy pole innego typu (na przykad Tak/Nie, Nota lub Obiekt
OLE), trzeba sign do widoku projektu.
26
Rysunek 1.3.
n
Rysunek 1.4.
Opcja Kreator tabel przydatna jako skrt przy tworzeniu standardowych tabel,
na przykad tabeli nazw klientw i danych adresowych. Do tabel tych naley
podchodzi z rezerw, gdy czsto nie s one znormalizowane. Przykadowo
tabela Kontakty przedstawiona na rysunku 1.5 zawiera kilka pl z numerami
telefonw (prawdopodobnie w celu dopasowania jej do listy kontaktw programu
Outlook), co w zalenoci od kontaktu moe prowadzi do utworzenia zbyt wielu
lub zbyt maej liczby pl z numerami telefonw. Poza pewnymi rzadkimi wyjtkami
numery telefonw i identyfikatory powinny znale si w powizanej tabeli, ktra
pozwala utworzy dokadnie tyle elementw, ile jest aktualnie potrzebnych.
Rysunek 1.5.
n
27
28
Rysunek 1.6.
Tworzenie tabel
Zaczn od tabeli tblToys, ktra bdzie gwn tabel przechowujc informacje o zabawkach
sprzedawanych klientom (oraz dla nich produkowanych). Poniewa kreator tabel oferuje
tabel Produkty, zacznijmy od niej i zmodyfikujmy j wedug wasnych potrzeb. Rysunek
1.7 przedstawia tabel Produkty w kreatorze tabel. Wybraam wikszo standardowych pl,
aby uatwi sobie wykonanie tabeli zabawek.
Rysunek 1.7.
Okno Kreator tabel zawiera przycisk umoliwiajcy zmian nazwy pola. Zmian nazwy
mona rwnie przeprowadzi na pniejszym etapie, otwierajc widok projektu i modyfikujc zawarte tam pola. Po wybraniu pl (i ewentualnej zmianie ich nazw) kliknij przycisk
Dalej, aby przej do nastpnego etapu kreatora, w ktrym podaje si nazw tabeli (w tym
przypadku tblToys) i okrela, czy klucz podstawowy ma zosta wybrany przez Accessa,
czy sami go okrelimy. Wybierz opcj Nie, samodzielnie ustawi klucz podstawowy, poniewa chcemy mie pen kontrol nad wyborem pola klucza.
29
Rysunek 1.8.
Ponowne kliknicie przycisku Dalej powoduje wywietlenie zapytania, czy chce si doczy
now tabel do innych tabel bazy danych. Poniewa jest to nowa tabela, po prostu jeszcze
raz kliknij przycisk Dalej. Z ostatniego ekranu kreatora wybierz opcj Modyfikuj projekt
tabeli, aby otworzy now tabel w widoku projektu, dziki ktremu mona uszczegowi
jej struktur.
Jeli nie ustawi si relacji midzy tabelami w kreatorze tabel, zawsze mona zrobi
to pniej w oknie relacji w zasadzie wiele osb preferuje wykonywanie tego
zadania wanie w tym oknie, poniewa dostarcza ono znacznie bardziej intuicyjny
interfejs.
Pierwszy krok polega na ustaleniu maski wprowadzania dla pola ToyID, aby
zapewni wpisywanie w nim danych zgodnych ze specyfikacj uzyskan od klienta.
Aby utworzy mask wprowadzania, mona klikn przycisk z wielokropkiem po
prawej stronie pola tekstowego maski (otworzy si wtedy kreator maski) lub te
od razu wpisa szablon maski. Poniewa kreator masek nie zawiera standardowo
odpowiedniej opcji, musimy wpisa mask w sposb bezporedni. Ponisza tabela
przedstawia znaki, z jakich mona skorzysta w celu ograniczenia wartoci
moliwych do wpisania w polu tekstowym.
Przypumy, e dla przykadowej tabeli zabawek klient poinformowa o stosowaniu dwch
wielkich liter i trzech cyfr do identyfikacji poszczeglnych zabawek. Potrzebujemy wic
znaku >, by zamieni wpisywane litery na wielkie, nastpnie dwa znaki L i trzy zera. Pole maski
wprowadzania powinno zatem zawiera poniszy tekst:
>LL000
30
&
.,:;- /
<
>
PASSWORD
Poza standardowymi polami z kreatora tabel potrzebujemy kilku dodatkowych pl przechowujcych dane zwizane z produkowanymi zabawkami. Rysunek 1.9 przedstawia tabel z dodatkowymi polami. W tabeli pojawia si kolejny identyfikator, VendorProductID, ale nie stosujemy dla niego maski, gdy rni dostawcy stosuj odmienne formaty identyfikatorw.
Informacje na temat materiaw nie s przechowywane w tej tabeli, ale w innej, ktra dopiero zostanie utworzona.
Kolejny krok to utworzenie tabel tblVendors i tblCategories, ktre zostan powizane z tabel tblToys. Po wybraniu standardowej tabeli kategorii z kreatora tabel kliknij przycisk
Relacje, aby powiza t tabel z polem CategoryID tabeli tblToys (patrz rysunek 1.10).
Wybierz rodkow opcj w oknie kolejnego kreatora (patrz rysunek 1.11), poniewa jedna
kategoria zabawek bdzie dotyczya wielu rekordw z tabeli tblToys.
Teraz okno kreatora tabeli informuje, e tabela tblCategories jest powizana relacj z tabel tblToys (patrz rysunek 1.12).
31
Rysunek 1.9.
Rysunek 1.10.
Istnieje relacja midzy tabelami tblCategories i tblToys, ktr mona zobaczy w oknie
relacji (patrz rysunek 1.13).
Cho w oknie relacji kreatora tabel zostaa wybrana opcja Jeden rekord w tabeli tblCategories bdzie pasowa do wielu rekordw tabeli tblToys, tak naprawd nie powsta zwizek
jeden do wielu midzy tymi tabelami, mimo e tak wanie powinno si sta. Jest to jeden
32
Rysunek 1.11.
Rysunek 1.12.
Rysunek 1.13.
z powodw, dla ktrych relacje warto okrela w oknie relacji, a nie w kreatorze. W dalszej
czci rozdziau dokadnie przedstawi, w jaki sposb zmodyfikowa typy relacji ustawione
przez kreatora tabel.
Powrmy do tworzenia tabel. Tabel tblVendors mona utworzy, korzystajc z kreatora
i predefiniowanej tabeli dostawcy. Nastpnie naley poczy t tabel z polem VendorID tabeli
tblToys. Kreator nie wykonuje wszystkich zada wymaganych do poprawnego powizania tabel. Jeli chce si ustawi tabele tblCategories i tblVendors jako surowe rda sownikowe,
aby wartoci byy wybierane tylko z powizanych tabel, trzeba to zrobi samemu. Wicej informacji na ten temat znajduje si w kolejnym podrozdziale.
33
W trakcie tworzenia pl tabeli naley okreli odpowiedni typ danych dla kadego pola, aby
zapewni wprowadzanie w danym polu jedynie poprawnych informacji (nie uda si wpisa tekstu do pola numerycznego!) i uatwi sortowanie oraz filtracj. Ponisza tabela wymienia typy
danych dostpne w Accessie wraz z krtkim komentarzem. Gwny typ danych to typ, ktry
wida na licie rozwijanej w trakcie tworzenia lub edycji pola; niektre typy (na przykad Liczba
i Autonumerowanie) maj podtypy, ktre ustawia si za pomoc waciwoci Rozmiar pola.
Gwny
typ pola
Opis
Komentarz
Tekst
Nota
Bajt
Liczba
cakowita
Liczba
cakowita
duga
Pojedyncza
precyzja
Wartoci od 3,402823E38
do 1,401298E45 dla liczb
ujemnych i od 1,401298E45
do 3,402823E38 dla liczb
dodatnich
Dokadny do 7 miejsc
po przecinku.
Podwjna
precyzja
Wartoci od
1,79769313486231E308
do 4,94065645841247E324
dla liczb ujemnych i od
4,94065645841247E324
do 1,79769313486231E308
dla liczb dodatnich
Dokadny do 15 miejsc
po przecinku.
Liczba
Podtypy
Uywany jedynie
w zreplikowanych bazach danych.
34
Podtypy
Opis
Komentarz
Dziesitne
Wartoci od 10^281
do 10^281
Dokadny do 28 miejsc
po przecinku.
Data/Godzina
Walutowy
AutoLiczba
numerowanie cakowita
duga
Automatycznie zwikszana
Taki sam typ danych jak Liczba
warto uywana jako unikatowy cakowita duga. Uywany
identyfikator rekordu
w tworzeniu relacji. Mog pojawi
si w dziury w numeracji, jeli rekord
zosta utworzony, a pniej usunity.
Obiekt OLE
Dokumenty utworzone
w programach wspierajcych
mechanizm OLE (na przykad
Word lub Excel)
Hipercze
Kreator
odnonikw
Niezalenie, czy korzystam z kreatora, czy widoku projektu, nie stosuj pl stworzonych
kreatorem odnonikw. Zamiast tego uywam tabeli powizanej w listach rozwijanych, ustawiajc odpowiedni waciwo dla tych formantw na formularzu. Powd takiego postpowania wynika z faktu, i zastosowanie kreatora odnonikw (na przykad dla VendorID)
uniemoliwia wywietlenie wartoci tego pola w widoku arkusza danych zostanie wywietlona nazwa dostawcy z tabeli powizanej. Aby zobaczy identyfikator dostawcy, trzeba
zmieni typ pola. Co wicej, typ danych kreatora odnonikw zawsze powoduje zastosowanie
listy rozwijanej na formularzu, cho czasem sytuacja wymaga zastosowania pola tekstowego,
poniewa warto jest tylko odczytywana.
Rysunek 1.14 przedstawia tabel tblVendors wykonan przy uyciu kreatora tabel.
35
Rysunek 1.14.
Mona uy klawisza F6 jako skrtu do przechodzenia midzy polem tabeli w widoku
projektu a zbiorem waciwoci. Ten klawisz jest szczeglnie przydatny, gdy ustawia
si waciwo rozmiaru pola dla pl numerycznych.
Poniewa klient powiedzia, e dostawcy mog sprzedawa zarwno gotowe zabawki, jak
i materiay do ich produkcji, tabela potrzebuje dwch pl typu Tak/Nie, aby mc wskaza, czy
dostawca sprzedaje zabawki, materiay, czy obie te rzeczy naraz. Dodaam wic te pola, ustawiam domyln warto pola SellsToys na Tak (poniewa klient poinformowa, i wikszo
dostawcw sprzedaje zabawki) i domyln warto pola SellsMaterials na Nie.
Cho Access umoliwia stosowanie spacji (i wikszoci znakw przestankowych)
w nazwach pl (zauwa ukonik w nazwie pola Country/Region z tabeli tblVendors),
osobicie staram si unika spacji i innych nietypowych znakw (poza podkreleniem),
aby unikn problemw z okrelaniem pl w kodzie i poleceniach SQL, a take
w celu zapewnienia zgodnoci w trakcie eksportu danych z tabel do innych
programw, ktre mog nie dopuszcza spacji w nazwach pl.
Czsto w trakcie tworzenia tabel zdaj sobie spraw, i musz klientom zada
dodatkowe pytania. Bardzo rzadko zna si wszystkie potrzebne informacje po
pierwszym spotkaniu. Warto spotyka si z klientem od czasu do czasu, by rozwia
wtpliwoci co do przyszej struktury aplikacji. Na tym etapie pojawio si pytanie,
czy wszyscy dostawcy maj swoje siedziby w Stanach Zjednoczonych. Gdyby tak
byo, mona by pozby si pola Country/Region i naoy odpowiednie maski na
skrty nazw stanw i kody pocztowe. Jeli jednak dostawcy pochodziliby z wielu
krajw, pole krajw musiaoby pozosta (ale usuwam z niego ukonik). Poza tym
36
Czy wszyscy dostawcy znajduj si w Stanach Zjednoczonych? Czy niektrzy znajduj si w innych krajach?
O:
Czy potrzebujecie tylko jednego numeru telefonu i jednego numeru faksu? Czy dostawcy mog mie wicej ni jeden numer telefonu? Jak wyglda sprawa z adresami
e-mail?
O:
P:
O:
Rysunek 1.15.
37
Powizane tabele wymagaj jedynie pola VendorID oraz odpowiednio pl opisu telefonu
i numeru telefonu oraz adresu e-mail. Pole VendorID powinno by typu Liczba cakowita
duga, aby pasowao do typu pola VendorID z tabeli tblVendors. W momencie zapisu nie
naley tworzy pola klucza; VendorID jest kluczem obcym w tabelach tblVendorPhones
i tblVendorEMails (definicja klucza obcego znajduje si w dalszej czci rozdziau). Poniewa dostawcy mog znajdowa si poza Stanami Zjednoczonymi, nie trzeba tworzy maski
wprowadzania dla numerw telefonw. Rysunek 1.16 przedstawia widok projektu obu tabel.
Zostan one powizane relacj z tabel tblVendors w oknie Relacje w dalszej czci rozdziau.
Tabela tblVendorPhones zawiera pole numeru telefonu i dodatkowe pole okrelajce typ numeru (subowy, domowy, faks itp.). Dla kadego dostawcy bdzie mona okreli dowoln
liczb numerw telefonw.
Rysunek 1.16.
Kontynuujemy prace nad tabelami aplikacji dla firmy zabawkarskiej. Tabel tblCustomers
mona utworzy na podstawie przykadowej tabeli Kontrahenci z kreatora tabel. Wystarczy
jedynie zmieni nazwy poszczeglnych pl w sposb przedstawiony na rysunku 1.17.
Podobnie jak w przypadku tabeli dostawcw, take teraz mamy kilka dodatkowych pyta do
klienta.
P:
Czy potrzebujecie tylko jednego numeru telefonu i jednego numeru faksu? Czy dostawcy
mog mie wicej ni jeden numer telefonu? Jak wyglda sprawa z adresami e-mail?
O:
Niektrzy dostawcy maj numery telefonw komrkowych i wiele adresw e-mail. W zasadzie niektrzy klienci maj nawet wasne witryny internetowe.
Trzeba usun pola telefonu i adresu e-mail z tabeli tblVendors i utworzy osobne
powizane tabele przechowujce te informacje. Musimy te doda pole WebSite
typu Hipercze.
38
Rysunek 1.17.
P:
Czy wszyscy klienci s z USA, czy moe klientami s rwnie obywatele innych
pastw?
O:
Rysunek 1.18.
Rysunek 1.19.
39
40
Rysunek 1.20.
Po przyjrzeniu si pocztkowej wersji tabeli doszam do wniosku, e na licie moe si znajdowa kilka osb z tej samej firmy, wic informacje o firmie warto umieci w osobnej tabeli
i poczy obie tabele za pomoc pola CompanyID. Z drugiej strony pewne osoby na licie adresowej mog nie by powizane z adn firm, wic warto pozostawi dane adresowe i doda
pole CompanyID wskazujce w razie potrzeby na odpowiedni rekord tabeli tblMailingListCompanies. Rysunek 1.21 przedstawia zmodyfikowan tabel tblMailingList oraz now tabel
tblMailingListCompanies. W trakcie wprowadzania nowego wpisu do listy adresowej pola
adresowe z tabeli tblMailingList bd dostpne tylko wtedy, gdy nie zostanie wybrana adna
firma z pola CompanyID. W przypadku wybrania firmy uyjemy jej adresu do wysyania reklam.
Klienci zapewne te bd otrzymywa katalogi i reklamy, ale nie oznacza to, i caa lista adresowa musi znajdowa si w tabeli tblCustomers moemy zastosowa uni, by poczy
dane z tabel tblCustomers i tblMailingList w momencie wysyania listw. (Wicej informacji na temat unii znajduje si w rozdziale 4, Sortowanie i filtrowanie danych za pomoc
kwerend.).
Dla pl daty zalecam wybranie takiego formatu, ktry wywietla wszystkie cztery cyfry roku,
aby unikn problemw z okrelaniem, czy dany rok dotyczy XX lub XXI wieku. Dla poszczeglnych pl mona wybra jeden ze standardowych formatw, uywajc waciwoci
formatu lub wpisa format bezporednio, na przykad d/m/rrrr. Wicej informacji na temat
formatu daty mona znale w pomocy programu Access. Ewentualnie mona wczy
wywietlanie czterocyfrowego roku w sposb globalny (przesania to wszystkie ustawienia
z waciwoci formatu), uywajc okna dialogowego Opcje wywoywanego z menu Narzdzia.
41
Rysunek 1.21.
Naley przej do zakadki Oglne i wczy odpowiedni opcj z sekcji Uywanie czterocyfrowego formatu roku (patrz rysunek 1.22). Gdy ju znajdujesz si na tej stronie, wycz
opcje zwizane z autokorekt nazw. Autokorekta to nic wicej jak tylko problemy, poniewa
nie dokonuje wszystkich potrzebnych modyfikacji, a czasem zmienia co wtedy, gdy nie powinna tego robi. W rozdziale 9, Modyfikacja istniejcej aplikacji. przedstawiam lepszy
sposb zmiany nazw obiektw bazy danych, ktry korzysta z mojego dodatku LNC Rename.
Rysunek 1.22.
42
Rysunek 1.23.
Rysunek 1.24.
43
Access nie zawiera adnego szablonu dla tabeli napraw (tblRepairs), wic utworzyam now
tabel bezporednio w widoku projektu, dodajc pola przedstawione na rysunku 1.25.
Rysunek 1.25.
Jest kilka wyrazw, ktrych nie warto stosowa jako nazwy pl. S to m.in.: Data, Rok,
Liczba, Numer itp. Naley bowiem unika wszelkich wyrazw, ktre s wbudowanymi
funkcjami Accessa, waciwociami lub sowami kluczowymi, aby uchroni si przed
potencjalnymi problemami w kodzie VBA lub innych miejscach. Warto wtedy rozszerzy
nazw pola, piszc na przykad RokWydania lub DataZamwienia.
Poniewa w trakcie napraw zuywa si materiay, potrzebujemy kolejnej tabeli (tblRepairMaterials), ktra zawiera list materiaw uywanych w trakcie napraw wraz z iloci kadego materiau. Tabel t przedstawia rysunek 1.26.
Tabela tblEmployees bazuje na domylnej tabeli Pracownicy z kreatora tabel, z ktrej zostay
usunite zbyteczne pola. Firma klienta stosuje numeryczn identyfikacj pracownikw. Poniewa pracownicy maj ju przydzielone identyfikatory, nie moemy zastosowa pola z automatycznym numerowaniem. Pole EmployeeID bdzie wic polem tekstowym wypenianym istniejcymi numerami pracownikw. Identyfikatory dla nowych pracownikw bdzie wyliczaa
odpowiednia procedura formularza. Rysunek 1.27 przedstawia tabel tblEmployees.
Ostatni z gwnych tabel jest tblOrders; ona take bazuje na szablonie (Zamwienia) z kreatora tabel. Zostay z niej jednak usunite dane adresowe. Zamiast nich pojawio si pole
ShipAddressID wskazujce odpowiedni adres z tabeli tblShippingAddresses. Potrzebujemy
te pola ToyID, aby zidentyfikowa zakupion zabawk, i pola ToyQuantity okrelajcego
liczb sztuk (co ciekawe, tego elementu brakuje w oryginalnym szablonie). Tworzon tabel
przedstawia rysunek 1.28.
44
Rysunek 1.26.
Rysunek 1.27.
45
Rysunek 1.28.
na rysunku 1.29. (Dla numeru SSN zostaa okrelona maska wprowadzania). Umieszczajc
te informacje w osobnej tabeli, mona zapewni dostp do nich jedynie wybranym pracownikom, uywajc uprawnie na poziomie obiektu dla zabezpieczonej bazy danych. Nawet
jeli nie chce si zabezpiecza bazy danych, warto poufne informacje umieci w innej tabeli, by nie byy widoczne w trakcie typowych prac nad gwn tabel pracownikw.
Rysunek 1.29.
Jedno z pl tabeli zamwie (pole ShippingMethodID) wymaga tabeli powizanej odnoszcej si do sposobw przesyki zamwionego towaru. Tabel tblShippingMethods utworzyam rcznie. Jej struktur przedstawia rysunek 1.30.
46
Rysunek 1.30.
Zastosowanie typu Autonumerowanie dla pola ShippingMethodID umoliwia wybr sposobu dostawy z grupy opcji formularza (w Accessie przyciski grupy opcji stosuj wartoci cakowite).
Wybrana warto jest cile powizana z nazw sposobu dostawy z tabeli tblShippingMethods.
Oznacza to, e tabela nie powinna zawiera wielu pl dotyczcych podobnych informacji,
na przykad wielu numerw telefonw lub wielu adresw. W pewnych sytuacjach (na og
po zaimportowaniu tabel z plikw tekstowych) powtarzajce si dane mog znajdowa si
w jednym polu i by oddzielone przecinkami (na przykad wszystkie stopnie naukowe).
Problemy pojawiajce si po umieszczeniu rnych informacji w jednym polu s raczej
oczywiste: gdy wszystkie stopnie przechowuje si w jednym polu, a chce si wywietli tylko
osoby ze stopniem doktora, trzeba si bdzie sporo natrudzi, piszc zapytanie wydobywajce
odpowiednie informacje. Co wicej, moliwe jest, e zwrcone dane nie bd tymi, ktrych
si oczekiwao, z powodu le postawionych znakw przestankowych w danych rdowych.
47
Kilka szablonw tabel z kreatora tabel amie pierwsz posta normaln, na przykad tabela
Kontrahenci zawiera wiele pl z numerami telefonw. Zamiast przechowywa wiele pl
dotyczcych telefonw w tabelach tblVendors i tblCustomers, utworzyam osobne tabele
zawierajce numery telefonw i adresy e-mail dostawcw i klientw: tblCustomerPhones,
tblCustomerEMails, tblVendorPhones, tblVendorEMails. Rozbicie informacji na kilka tabel
ma dwa aspekty praktyczne: gwarantuje moliwo dodania kolejnego numeru telefonu lub
adresu e-mail (jeli istniayby tylko pola numeru telefonu stacjonarnego i faksu, gdzie wpisaoby si numer telefonu komrkowego?) i uatwia korzystanie z zebranych informacji w innych
miejscach bazy danych (aby pobra wszystkie numery wybranego klienta, wystarczy ograniczy pobieranie danych z tabeli tblCustomerPhones do konkretnej wartoci pola CustomerID).
Powtarzajce si dane z jednego pola (jak we wczeniejszym przykadzie ze stopniami naukowymi) powinny zosta przeniesione do osobnej tabeli, by zwikszy dokadno wprowadzania danych (uytkownicy powinni wybiera stopnie naukowe z tabeli pogldowej,
zamiast je wpisywa) i zapewni moliwo okrelenia dowolnie duej liczby stopni naukowych dla jednej osoby.
Istniej dwa sposoby pojawiania si redundancji danych w bazie danych: pierwszy polega
na wpisaniu tych samych danych w rnych rekordach tabeli. Taka sytuacja wystpiaby,
gdyby uy oryginalnego szablonu tabeli zamwie z adresami dostaw i wpisa kilka zamwie
dotyczcych tego samego uytkownika. Jeli dane tego samego klienta wpisze si w trzech rnych rekordach, zachodzi duplikacja danych. Uniknam takiej sytuacji, umieszczajc adresy
dostaw w osobnej tabeli (tblShippingAddresses) i stosujc pole ShipAddressID w tabeli
tblOrders. Pole to powizane jest z polem o takiej samej nazwie z tabeli tblShippingAddresses, wic unika si wielokrotnego wpisywania tych samych danych do wielu rekordw. Co
wicej, daje to gwarancj, e zmiana adresu dostaw przez klienta bdzie wymagaa modyfikacji bazy danych tylko w jednym miejscu zamiast we wszystkich rekordach zamwie
zawierajcych adres klienta.
Redundancja danych pojawia si te wtedy, gdy te same informacje znajduj si w dwch
rnych tabelach. Na przykad dla tabel klientw i zamwie informacje na temat adresu
osoby kupujcej nie powinny znale si w obu tych tabelach. Naley albo umieci dane
adresowe kupujcego w osobnej tabeli i poczy je zwizkiem jeden do jednego z tabel
tblCustomers za pomoc pola CustomerID, albo umieci je w tabeli klientw i usun z tabeli
zamwie. Podobna sytuacja dotyczy adresw dostaw (nie powinna nastpi ich duplikacja
w obu tabelach). W przedstawionej aplikacji umieszczenie danych dostaw w osobnej tabeli
jest szczeglnie istotne, gdy jeden klient moe stosowa wiele takich adresw.
W pewnych sytuacjach w celach archiwalnych mona zapamita rekord z danymi
dostawy uywanymi w trakcie skadania zamwienia nawet jeli ten adres
ulegnie potem zmianie. W takiej sytuacji tabela tblOrders powinna zawiera dane
adresowe dostawy oraz pole ShipAddressID. Gdy adres dostawy zostaje wybrany
na formularzu, dotyczce go szczegowe dane adresowe naley pobra z tabeli
tblShippingAddresses i zapisa do pl adresowych tabeli tblOrders. Metoda ta
eliminuje potrzeb wpisywania adresu dostaw w kadym rekordzie, ale zachowuje
stary adres nawet wtedy, gdy klient zmieni go w terminie pniejszym.
48
49
Kreator tabel umoliwia wstpne okrelenie zwizkw (relacji) midzy tabelami, ale nie wykonuje wszystkich wymaganych zada. Nawet jeli okreli si, e jeden rekord z pierwszej
tabeli moe dopasowywa si do wielu rekordw drugiej tabeli, nie jest to jeszcze zwizek
typu jeden do wielu. Okrelenia odpowiedniego zwizku trzeba dokona rcznie w oknie Relacje. Omwi trzy rodzaje zwizkw lub relacji, jakie mog zosta wykonane w bazie danych
Access, a nastpnie przedstawi sposoby ich ustawiania w oknie Relacje.
Zacznijmy od zdefiniowania kilku terminw uywanych przy okrelaniu zwizkw midzy
tabelami.
n
50
tblToys
n tblCustomers
tblCustomerEMails
n tblCustomers
tblCustomerPhones
n tblCustomers
tblOrders
n tblEmployees
tblRepairs
n tblMailingListCompanies
tblMailingList
n tblMaterials
tblRepairMaterials
n tblMaterials
tblToyMaterials
n tblRepairs
tblRepairMaterials
n tblShippingAddresses
n tblShippingMethods
n tblToys
tblOrders
tblOrders
tblToyMaterials
n tblVendors
tblMaterials
n tblVendors
tblToys
n tblVendors
tblVendorEMails
n tblVendors
tblVendorPhones
51
Jeli w trakcie prby utworzenia relacji pojawi si komunikat bdu o treci: Microsoft
Access nie moe utworzy tej relacji i wymusi wizw integralnoci, oznacza to, e
dane w jednej z tabel ami zasady integralnoci referencyjnej (na przykad rekord z tabeli
tblOrders moe nie zawiera wartoci w polu CustomerID). Naley wtedy poprawi dane
i ponownie sprbowa utworzy relacj.
Podobnie komunikat o bdzie: Relacja musi dotyczy takiej samej liczby pl o takich samych
typach danych wskazuje, e zapewne doszo do prby powizania pl rnych typw.
Naley wic zmieni typ danych jednego z pl (warto pamita, i automatyczne numerowanie wymaga w drugim polu typu dugiej liczby cakowitej) i ponownie sprbowa utworzy
relacj.
Jako przykad sposobu tworzenia zwizku jeden do wielu w oknie Relacje (pozostae typy
zwizkw tworzy si bardzo podobnie) dokonajmy powizania tabel tblCustomers i tblOrders. Zacznijmy od otwarcia okna Relacje i przecignicia do niego tabel tblCustomers
i tblOrders z okna bazy danych (ewentualnie mona je wybra, uywajc okna dialogowego
Pokazywanie tabeli wywoywanego z menu podrcznego). Zwr uwag na to, e pole CustomerID z tabeli tblCustomers zostao pogrubione, poniewa jest kluczem gwnym tej tabeli. Odpowiadajce mu pole CustomerID z tabeli tblOrders nie zostao pogrubione, poniewa jest
jedynie kluczem obcym. Aby utworzy zwizek, przecignij pole CustomerID z tabeli tblCustomers do pola o tej samej nazwie z tabeli tblOrders (patrz rysunek 1.31).
Rysunek 1.31.
Po zwolnieniu przycisku myszy pojawi si okno dialogowe Edytowanie relacji. Na dole okna
znajduje si ramka, w ktrej Access wywietla typ relacji; na og wykrywa j poprawnie.
Jeli w ramce na dole okna nie pojawi si poprawny typ relacji na przykad
zamiast jeden do wielu pojawi si inny tekst (np. Nieokrelona) prawdopodobnie
prbowao si poczy ze pola lub poczyo si poprawne pola, ale
o nieodpowiednich typach. Po naprawieniu bdu Access powinien wywietli
poprawny typ zwizku.
Gdy relacja zostaa wykryta poprawnie jako jeden do wielu, wystarczy tylko wczy opcje
Wymuszaj wizy integralnoci i Kaskadowo aktualizuj pola pokrewne i klikn przycisk
Utwrz (patrz rysunek 1.32).
52
Rysunek 1.32.
Pojawia si linia czca pole CustomerID z tabeli tblCustomers z polem klucza obcego
z tabeli tblOrders (patrz rysunek 1.33). Warto zauway, e po lewej stronie linii znajduje
si liczba 1 (wskazujca, i tabela tblCustomers jest tabel podstawow), a po prawej stronie
znak (oznaczajcy tabel powizan).
Rysunek 1.33.
53
Rysunek 1.34.
tblToyMaterials tblMaterials,
n tblRepairs
tblRepairMaterials tblMaterials.
Gdy utworzy si dwa zwizki typu jeden do wielu, uzyska si jeden zwizek wiele do wielu.
Rysunek 1.35 przedstawia oba wymienione powyej zwizki wiele do wielu w oknie Relacje.
atwo zauway dwa zestawy tabel podstawowych, midzy ktrymi znajduje si tabela czca; tabela tblMaterials jest tabel podstawow w obu zwizkach wiele do wielu.
Rysunek 1.35.
54
Skoro powstay odpowiednie tabele i zwizki midzy nimi dla bazy danych sklepu z zabawkami, moemy przystpi do tworzenia formularzy sucych do wpisywania i edycji danych
oraz kwerend do sortowania i filtracji.