Jak stworzyć bazę danych w Microsoft Access od podstaw?
Stwórz bazę danych w Microsoft Access na przykładzie obsługi klientów, zamówień i produktów. Poznaj zasady projektowania tabel, relacji i formularzy. Dowiedz się, jak porządkować dane, tworzyć kwerendy i raporty sprzedaży oraz unikać typowych błędów.
Planowanie bazy danych: wymagania, zakres i scenariusz firmowy (klienci–zamówienia–produkty)
Zanim utworzysz pustą bazę danych w Microsoft Access, określ, jaki problem ma ona rozwiązywać. Samo założenie pliku nie uporządkuje sprzedaży, jeśli nie wiadomo, kto będzie wprowadzać informacje, co należy rejestrować i jakie wyniki mają być dostępne. Dobrym punktem wyjścia jest konkretny cel: przechowywanie danych klientów i historii ich zamówień oraz ustalanie, jakie produkty sprzedano i za jaką kwotę.
Określ wymagania na podstawie codziennej pracy
Planowanie zacznij od opisania obecnego sposobu obsługi zamówień. Sprawdź, skąd pochodzą dane: z wiadomości e-mail, arkuszy kalkulacyjnych, formularzy internetowych czy dokumentów papierowych. Wskaż też powtarzające się trudności, na przykład wielokrotne wpisywanie danych tego samego klienta, brak informacji o stanie zamówienia albo czasochłonne przygotowywanie zestawień sprzedaży.
Arkusz kalkulacyjny sprawdza się przy prostych listach i doraźnych obliczeniach. Baza danych w Accessie jest przydatna wtedy, gdy informacje są ze sobą powiązane i regularnie wykorzystywane w różnych zadaniach: podczas przyjmowania zamówienia, wyszukiwania historii klienta czy analizowania sprzedaży. Nie zastępuje jednak automatycznie rozbudowanego systemu handlowego, magazynowego lub księgowego.
Aby ustalić wymagania, odpowiedz na kilka pytań:
- Kto będzie korzystać z bazy? Jedna osoba czy kilka osób pracujących równocześnie? Czy wszyscy mają wykonywać te same czynności?
- Jakie informacje są niezbędne? Czy obsługujesz firmy, konsumentów, czy obie grupy? Czy potrzebujesz adresu dostawy, danych do faktury i kontaktu do osoby zamawiającej?
- Jak przebiega obsługa zamówienia? Kiedy uznajesz je za przyjęte, zrealizowane lub anulowane? Czy dopuszczasz zmianę zamówienia po jego przyjęciu?
- Na jakie pytania baza ma odpowiadać? Na przykład: które zamówienia czekają na realizację, ile dany klient zamówił w miesiącu i które produkty sprzedają się najczęściej.
- Jak będzie wyglądać utrzymanie bazy? Kto odpowiada za poprawność informacji, dostęp do pliku i wykonywanie kopii zapasowych?
Ustal także przewidywaną liczbę klientów i zamówień oraz tempo przyrostu danych. Access może być dobrym wyborem dla niewielkiego rozwiązania biurowego, ale duża liczba jednoczesnych użytkowników, praca przez internet lub rozbudowane wymagania dotyczące uprawnień mogą wymagać innej architektury. Warto rozstrzygnąć to przed rozpoczęciem projektu.
Opisz scenariusz: klient składa zamówienie na produkty
Przyjmijmy, że baza ma wspierać niewielką działalność handlową. Pracownik przyjmuje zamówienie od klienta, wskazuje wybrane produkty i ich ilości, a następnie śledzi realizację. Ten sam klient może wracać z kolejnymi zamówieniami, a dany produkt może pojawiać się w zamówieniach różnych klientów.
Na etapie planowania rozróżnij trzy obszary informacji. Klient to odbiorca zakupu i związane z nim dane potrzebne do obsługi. Zamówienie opisuje konkretne zdarzenie handlowe: kiedy nastąpiło, kogo dotyczy i na jakim jest etapie. Produkt jest elementem oferty, który można zamówić. Nie trzeba jeszcze ustalać technicznego zapisu tych informacji — najpierw należy zrozumieć ich znaczenie w pracy firmy.
Sprawdź również mniej oczywiste sytuacje. Jedno zamówienie może obejmować kilka produktów w różnych ilościach. Cena uzgodniona przy sprzedaży może różnić się od aktualnej ceny katalogowej, dlatego późniejsza zmiana cennika nie powinna zmieniać wartości historycznego zamówienia. Podobnie adres dostawy może być inny niż adres klienta. Takie ustalenia są regułami biznesowymi: opisują, jak baza ma odzwierciedlać rzeczywisty proces, niezależnie od sposobu jej wykonania w Accessie.
Wyznacz zakres pierwszej wersji
Pierwsza wersja bazy powinna obsługiwać jeden spójny proces. W tym przykładzie wystarczy ewidencja klientów, katalog produktów, rejestrowanie zamówień z ich zawartością oraz sprawdzanie statusu i wartości sprzedaży. Obsługę stanów magazynowych, płatności, zwrotów czy wystawianie faktur można pozostawić poza zakresem, jeśli nie są niezbędne do osiągnięcia głównego celu.
Zapisz wyraźnie zarówno to, co baza ma robić, jak i to, czego nie będzie obsługiwać. Jeżeli nie kontroluje dostępności towaru, samo zapisanie zamówienia nie oznacza rezerwacji produktu. Jeśli nie rejestruje płatności, status „zrealizowane” nie powinien być traktowany jako potwierdzenie zapłaty. Takie rozróżnienia ograniczają błędne oczekiwania użytkowników.
Na koniec określ kryterium odbioru pierwszej wersji: użytkownik powinien móc zarejestrować klienta, przyjąć od niego zamówienie obejmujące kilka produktów, odnaleźć je później i sprawdzić jego wartość oraz stan realizacji. Ten krótki scenariusz pozwoli ocenić, czy baza rzeczywiście wspiera pracę, zamiast jedynie gromadzić dane.
Projekt tabel: encje, pola i dobór typów danych w Microsoft Access
Projektowanie tabel polega na przełożeniu potrzeb firmy na konkretne miejsca przechowywania danych. W Cognity często słyszymy pytania, jak praktycznie podejść do projektowania tabel w Microsoft Access – odpowiadamy na nie także na blogu.
W Microsoft Access tabela opisuje jeden rodzaj obiektu lub zdarzenia, na przykład klientów albo zamówienia. Taki obiekt nazywamy encją. Każdy wiersz tabeli, czyli rekord, reprezentuje pojedynczy przypadek, a kolumny — nazywane polami — przechowują jego cechy, takie jak nazwa klienta, data zamówienia czy cena produktu.
Jakie tabele przygotować dla klientów, zamówień i produktów?
W prostej bazie sprzedażowej warto przewidzieć cztery tabele. Oprócz klientów, zamówień i produktów potrzebne są pozycje zamówienia, ponieważ jeden zakup może obejmować kilka różnych produktów.
- Klienci — dane identyfikacyjne i kontaktowe: identyfikator klienta, nazwa, NIP, adres e-mail, telefon oraz elementy adresu, np. miejscowość i kod pocztowy.
- Zamówienia — informacje dotyczące całego zamówienia: jego identyfikator, klient, data złożenia, status i ewentualne uwagi.
- Produkty — dane oferty: identyfikator produktu, nazwa, opis, aktualna cena oraz informacja, czy produkt jest dostępny w sprzedaży.
- Pozycje zamówienia — szczegóły kupowanych produktów: wskazanie zamówienia i produktu, ilość oraz cena jednostkowa obowiązująca przy sprzedaży.
Cena w pozycji zamówienia ma inne znaczenie niż aktualna cena w katalogu produktów. Pozwala zachować warunki historycznej transakcji, nawet gdy później zmienisz cennik. Już na etapie projektu warto również ustalić, czy zapisujesz ceny netto, czy brutto, i konsekwentnie stosować tę zasadę.
Dobór typów danych do pól
Krótki tekst służy do przechowywania nazw, adresów e-mail, numerów telefonów, kodów pocztowych i numerów NIP. Mieści do 255 znaków. Numer telefonu czy NIP nie powinien mieć typu liczbowego: nie wykonujesz na nim obliczeń, a zapis może zawierać zera na początku, znak plus lub separatory. Dla rozbudowanych opisów produktów i uwag do zamówień wybierz Długi tekst.
Liczba jest właściwa dla wartości używanych w obliczeniach, na przykład ilości zamówionego towaru. Jej właściwość Rozmiar pola określa zakres i sposób przechowywania wartości. Dla produktów sprzedawanych wyłącznie na sztuki wystarczy odpowiedni wariant całkowitoliczbowy. Jeśli sprzedajesz towar na wagę lub metry, potrzebujesz wariantu obsługującego części ułamkowe, z precyzją dobraną do przyjętych jednostek.
Do cen i innych kwot wybieraj typ Waluta. Przechowuje wartości ze stałą precyzją czterech miejsc po przecinku i jest przeznaczony do danych finansowych. Samo ustawienie symbolu waluty w formacie pola liczbowego zmienia jedynie wygląd danych, nie ich typ.
Data/Godzina nadaje się do dat złożenia zamówienia, płatności czy wysyłki. Dzięki niemu Access prawidłowo porządkuje daty i pozwala wykonywać na nich obliczenia. Typ Tak/Nie wykorzystaj dla cech dwustanowych, np. „Produkt aktywny”. Status zamówienia obejmujący kilka etapów nie jest informacją dwustanową.
Autonumerowanie pozwala automatycznie nadawać nowym rekordom identyfikatory. Nie należy jednak traktować go jako ciągłej numeracji dokumentów handlowych — w wygenerowanych wartościach mogą pojawiać się luki.
Tworzenie tabeli w widoku projektu
Aby zdefiniować strukturę, na karcie Tworzenie wybierz Projekt tabeli. W kolejnych wierszach wpisz nazwy pól, przypisz typy danych i opcjonalnie dodaj opisy wyjaśniające ich przeznaczenie. W dolnej części okna ustaw właściwości wybranego pola, np. maksymalną długość tekstu lub format wyświetlania daty.
Stosuj jednoznaczne nazwy, takie jak DataZamowienia i CenaJednostkowa, zamiast ogólnych określeń „Data” czy „Wartość”. Przed zapisaniem tabeli sprawdź, czy każde pole ma jasne znaczenie oraz czy jego typ pomieści rzeczywiste dane. Format wyświetlania nie zastępuje właściwego typu danych — to rozróżnienie ma znaczenie dla późniejszych obliczeń, sortowania i wyszukiwania.
Klucze podstawowe i obce: indeksy, unikalność i integralność danych
W bazie obsługującej klientów, zamówienia i produkty każdy rekord musi dać się jednoznacznie rozpoznać. Sama nazwa klienta lub produktu nie wystarczy: może się powtarzać albo zmienić. Dlatego stosuje się klucze podstawowe, które identyfikują rekordy, oraz klucze obce, które wskazują rekordy w innych tabelach. Indeksy pełnią inną funkcję — usprawniają wyszukiwanie, a odpowiednio skonfigurowane także zapobiegają duplikatom.
Klucz podstawowy — jednoznaczny identyfikator rekordu
Klucz podstawowy nie może zawierać wartości pustych (Null) ani powtarzających się. W tabeli Klienci może nim być pole KlientID, w tabeli Zamówienia — ZamówienieID, a w tabeli Produkty — ProduktID. Każda tabela może mieć tylko jeden klucz podstawowy, ale może on obejmować jedno pole lub kilka pól jednocześnie.
W prostej bazie Access wygodnym rozwiązaniem jest pojedynczy identyfikator typu Autonumerowanie. Program nadaje jego wartość przy dodawaniu rekordu, więc użytkownik nie musi pilnować kolejnych numerów. Taki identyfikator powinien pozostać technicznym oznaczeniem rekordu, a nie numerem dokumentu sprzedaży. Luki w numeracji, na przykład po usunięciu rekordu, są normalne.
Aby ustawić klucz podstawowy, otwórz tabelę w widoku projektu, zaznacz odpowiednie pole i wybierz polecenie Klucz podstawowy na wstążce. Access automatycznie utworzy dla niego indeks unikatowy. Jeżeli tabela zawiera już dane, wartości w wybranym polu muszą spełniać wymagania unikalności i nie mogą być puste.
Klucz obcy — wskazanie powiązanego rekordu
W tabeli Zamówienia pole KlientID pełni rolę klucza obcego: przechowuje identyfikator klienta, do którego należy zamówienie. Ta sama wartość może wystąpić w nim wielokrotnie, ponieważ jeden klient może złożyć wiele zamówień. Nie należy więc nadawać temu polu ograniczenia unikalności.
Klucz obcy musi mieć typ danych zgodny z polem, na które wskazuje. Dla typowego klucza podstawowego Autonumerowanie o rozmiarze Liczba całkowita długa odpowiadającym mu kluczem obcym jest pole typu Liczba z rozmiarem Liczba całkowita długa. Klucz obcy nie powinien sam generować numerów — ma przechowywać identyfikator istniejącego rekordu.
Indeksy — kiedy dopuszczać duplikaty?
We właściwościach pola w widoku projektu ustawienie Indeksowane pozwala określić, czy Access ma tworzyć indeks i czy wartości mogą się powtarzać.
| Ustawienie | Zastosowanie | Przykład |
|---|---|---|
| Nie | Brak indeksu dla pola, które nie wymaga szybkiego wyszukiwania ani kontroli unikalności. | Uwagi do zamówienia |
| Tak (Duplikaty OK) | Sprawniejsze wyszukiwanie z dopuszczeniem powtarzających się wartości. | KlientID w tabeli Zamówienia |
| Tak (Bez duplikatów) | Odrzucanie powtórzeń tej samej wartości. | Kod produktu, jeśli każdy produkt musi mieć odrębny kod |
Indeks unikatowy może chronić również pole, które nie jest kluczem podstawowym. Nie zastępuje jednak wymogu uzupełnienia danych — obowiązkowość takiego pola ustala się osobno, właściwością Wymagane. Nie warto też indeksować wszystkich pól: indeksy zajmują miejsce i zwiększają koszt dodawania oraz aktualizowania rekordów.
Co klucze i indeksy rzeczywiście zabezpieczają?
Klucz podstawowy zapobiega niejednoznacznej identyfikacji rekordów, a indeks unikatowy blokuje duplikaty w wybranym polu lub zestawie pól. Samo dodanie pola KlientID do tabeli Zamówienia nie gwarantuje jednak, że wpisany numer należy do istniejącego klienta. Taką kontrolę zapewnia dopiero relacja z włączoną integralnością referencyjną. To odrębny mechanizm, którego nie zastąpi ani zgodność nazw pól, ani zwykły indeks.
Relacje między tabelami: konfiguracja, integralność referencyjna i kaskadowe aktualizacje/usuwanie
Relacje określają, jak rekordy z poszczególnych tabel są ze sobą powiązane. W bazie sprzedażowej pozwalają przypisać zamówienie do klienta, a pozycję zamówienia — do konkretnego zamówienia i produktu. Poprawnie skonfigurowane powiązania nie tylko ułatwiają łączenie danych, lecz także pomagają zapobiegać zapisom bez logicznego uzasadnienia, na przykład zamówieniu wskazującemu klienta, którego nie ma w bazie.
Jakie relacje zastosować w bazie klientów, zamówień i produktów?
Najczęściej wykorzystywana jest relacja jeden-do-wielu: jeden klient może mieć wiele zamówień, ale każde zamówienie jest przypisane do jednego klienta. Relacja jeden-do-jednego przydaje się rzadziej, na przykład wtedy, gdy dodatkowe dane jednego rekordu są przechowywane oddzielnie. Z kolei relacja wiele-do-wielu wymaga tabeli pośredniej: jedno zamówienie może obejmować wiele produktów, a ten sam produkt może pojawiać się w wielu zamówieniach.
W omawianym scenariuszu tabelą pośrednią są PozycjeZamowienia. W oknie relacji należy więc utworzyć trzy powiązania typu jeden-do-wielu:
- Klienci → Zamowienia — przez pole KlientID.
- Zamowienia → PozycjeZamowienia — przez pole ZamowienieID.
- Produkty → PozycjeZamowienia — przez pole ProduktID.
Nie łącz tabel Zamowienia i Produkty bezpośrednio. To rekordy pozycji wskazują, które produkty należą do danego zamówienia.
Konfiguracja relacji w Microsoft Access
Na szkoleniach Cognity pokazujemy, jak skonfigurować relacje między tabelami krok po kroku — poniżej przedstawiamy skrót tej procedury.
Otwórz bazę, a następnie wybierz Narzędzia bazy danych → Relacje. Dodaj potrzebne tabele do widoku; zależnie od wersji Accessa służy do tego polecenie Dodaj tabele lub Pokaż tabelę. Przed zmianami zamknij otwarte tabele oraz korzystające z nich formularze, aby uniknąć blokady modyfikacji.
- Przeciągnij pole KlientID z tabeli Klienci na pole KlientID w tabeli Zamowienia.
- W oknie edycji relacji sprawdź nazwy tabel i łączonych pól.
- Zaznacz Wymuszaj więzy integralności, a następnie kliknij Utwórz.
- Analogicznie połącz Zamowienia z PozycjeZamowienia oraz Produkty z PozycjeZamowienia.
Przy prawidłowo utworzonej relacji jeden-do-wielu z wymuszaniem więzów integralności Access wyświetla przy linii połączenia oznaczenia 1 i ∞. Pole po stronie „1” musi mieć unikalne wartości, a łączone pola — zgodne typy danych. Typowy przypadek to Autonumerowanie po stronie nadrzędnej i Liczba z rozmiarem pola Długa liczba całkowita po stronie podrzędnej.
Co zapewnia integralność referencyjna?
Integralność referencyjna chroni przed rekordami osieroconymi, czyli takimi, które wskazują nieistniejący rekord nadrzędny. Po jej włączeniu Access nie pozwoli zapisać zamówienia z nieistniejącym KlientID. Domyślnie zablokuje również usunięcie klienta, do którego przypisano zamówienia, oraz zmianę jego identyfikatora, jeżeli naruszyłaby ona powiązania.
Nie oznacza to jednak, że każde zamówienie automatycznie musi mieć wskazanego klienta. Jeżeli pole KlientID dopuszcza wartość Null, same więzy integralności nie zabronią pozostawienia go pustego — obowiązkowość pola jest osobnym ustawieniem.
Jeśli Access odmawia włączenia więzów integralności, sprawdź zgodność pól oraz istniejące dane. Przyczyną mogą być na przykład zamówienia zawierające identyfikatory klientów, których nie ma w tabeli Klienci. Takie niespójności trzeba usunąć przed aktywowaniem zabezpieczenia.
Aktualizacje i usuwanie kaskadowe — kiedy je włączyć?
Kaskadowo aktualizuj pola pokrewne oznacza, że zmiana wartości klucza w rekordzie nadrzędnym zostanie przeniesiona do powiązanych rekordów podrzędnych. Opcja nie synchronizuje wszystkich danych klienta — dotyczy wyłącznie pól tworzących powiązanie. Przy kluczu typu Autonumerowanie nie ma praktycznego zastosowania, ponieważ jego wartości nie można ręcznie zmienić.
Kaskadowo usuń rekordy pokrewne pozwala wraz z rekordem nadrzędnym usunąć rekordy zależne. Może być uzasadnione między zamówieniem a jego pozycjami, jeśli przyjęte zasady dopuszczają trwałe usuwanie zamówień. Jest natomiast ryzykowne między klientem a zamówieniami: usunięcie klienta może skasować jego historię zakupów, a przy kolejnych relacjach kaskadowych także pozycje tych zamówień.
W bazie przechowującej historię sprzedaży bezpieczniej pozostawić usuwanie kaskadowe wyłączone dla klientów i produktów, a nieużywane rekordy oznaczać jako nieaktywne. Działanie każdej kaskady sprawdź na kopii bazy — szczególnie wtedy, gdy usunięcie jednego rekordu może uruchomić zmiany w kilku tabelach.
Normalizacja danych (1NF–3NF): rozbijanie tabel i eliminacja redundancji na przykładzie
Jeśli adres klienta jest zapisany w każdym wierszu zamówienia, jego zmiana wymaga poprawienia wielu rekordów. Pominięcie choćby jednego pozostawia sprzeczne informacje. Normalizacja porządkuje dane tak, aby każdy fakt był przechowywany we właściwym miejscu, a jego powielanie nie powodowało błędów podczas dodawania, edycji i usuwania rekordów. W Microsoft Access nie jest to pojedyncza funkcja programu, lecz sposób projektowania tabel.
Przyjmijmy, że punktem wyjścia jest jedna tabela sprzedaży: numer zamówienia, data, identyfikator i nazwa klienta, jego bieżący adres oraz lista produktów z ilościami i cenami. Taki układ przypomina arkusz kalkulacyjny, ale utrudnia wyszukiwanie produktów i wiarygodne obliczanie wartości zamówień.
Pierwsza postać normalna (1NF): jedna wartość w jednym polu
Pole zawierające zapis „monitor, klawiatura, mysz” łączy kilka produktów w jednej komórce. Podobny problem tworzą kolumny Produkt1, Produkt2 i Produkt3: liczba możliwych pozycji zależy wtedy od liczby przygotowanych pól.
W 1NF usuwamy powtarzające się grupy i zapisujemy pojedyncze wartości w polach. Każdy produkt zamówienia trafia do osobnego wiersza, wraz z ilością i ceną sprzedaży. Zamówienie obejmujące trzy produkty zajmuje więc trzy wiersze, zamiast jednego rekordu z listą produktów. Każdy wiersz musi też dać się jednoznacznie zidentyfikować.
Na tym etapie data zamówienia i dane klienta nadal powtarzają się przy każdym produkcie. Pierwsza postać normalna usuwa problem wielowartościowych pól, ale nie eliminuje wszystkich zbędnych powtórzeń.
Druga postać normalna (2NF): dane zależne od całego klucza
Załóżmy na potrzeby przykładu, że dany produkt występuje w zamówieniu tylko raz. Wiersz identyfikuje wtedy para IDZamowienia + IDProduktu. Data zamówienia zależy jednak wyłącznie od numeru zamówienia, a nazwa produktu — wyłącznie od identyfikatora produktu. Żadna z tych informacji nie opisuje całej pary.
Druga postać normalna wymaga spełnienia 1NF oraz usunięcia zależności pól niekluczowych od tylko części klucza złożonego. Dlatego rozdzielamy dane na:
- Zamówienia — informacje dotyczące całego zamówienia, takie jak data i dane klienta.
- Produkty — informacje opisujące produkt, np. jego nazwa.
- PozycjeZamowien — produkt w konkretnym zamówieniu, jego ilość oraz uzgodniona cena sprzedaży.
Dodanie kolejnej pozycji nie wymaga już ponownego zapisywania daty zamówienia ani nazwy produktu. Samo dodanie pola typu Autonumerowanie do pierwotnej tabeli nie rozwiązałoby tych problemów — nie zmieniłoby zależności między informacjami.
Trzecia postać normalna (3NF): dane opisują właściwy obiekt
W tabeli Zamówienia mogą nadal znajdować się identyfikator klienta, jego nazwa i bieżący adres. Nazwa oraz adres opisują klienta, nie zamówienie. Powstaje zależność pośrednia: zamówienie wskazuje klienta, a klient wyznacza swoje dane.
Aby uzyskać 3NF, po spełnieniu 2NF usuwamy takie zależności przechodnie pól niekluczowych od klucza. Dane klienta przenosimy do tabeli Klienci, a w zamówieniu pozostawiamy jego identyfikator. Uproszczony wynik wygląda następująco:
| Tabela | Przykładowe pola |
|---|---|
| Klienci | IDKlienta, NazwaKlienta, AdresBiezacy |
| Zamówienia | IDZamowienia, DataZamowienia, IDKlienta |
| Produkty | IDProduktu, NazwaProduktu |
| PozycjeZamowien | IDZamowienia, IDProduktu, Ilosc, CenaSprzedazy |
Redundancja a dane historyczne
Normalizacja nie oznacza usuwania każdej podobnie wyglądającej informacji. Cena sprzedaży w pozycji zamówienia jest innym faktem niż aktualna cena katalogowa produktu. Powinna pozostać przy pozycji, aby późniejsza zmiana cennika nie zmieniała wartości wcześniejszych transakcji. Analogicznie adres dostawy obowiązujący dla konkretnego zamówienia może być przechowywany niezależnie od bieżącego adresu klienta.
Praktyczny test projektu jest prosty: czy można dodać produkt bez tworzenia zamówienia, zmienić nazwę klienta w jednym miejscu i usunąć zamówienie bez utraty kartoteki produktu? Jeżeli tak, rozdzielenie danych usuwa typowe anomalie wprowadzania, aktualizacji i usuwania, zamiast jedynie zwiększać liczbę tabel.
6. Formularze do wprowadzania danych: formularze główne, podformularze i walidacja
Pracownik rejestrujący zamówienie powinien móc wybrać klienta, dodać produkty i podać ich ilości na jednym ekranie — bez otwierania kilku tabel. W Microsoft Access taką obsługę zapewniają formularze powiązane z danymi. Pokazują wybrane pola w czytelnym układzie, ułatwiają edycję i pozwalają wychwycić błędy przed zapisaniem rekordu.
Formularz główny i podformularz — dwa poziomy jednego zamówienia
W scenariuszu klienci–zamówienia–produkty formularz główny służy do obsługi pojedynczego zamówienia. Zawiera na przykład numer zamówienia, datę oraz pole wyboru klienta. Osadzony w nim podformularz pokazuje pozycje tego zamówienia: wybrane produkty, ilości i ceny sprzedaży. Powinien być powiązany z pozycjami zamówień, a nie bezpośrednio z katalogiem produktów.
Formularz główny najwygodniej wyświetlać jako pojedynczy formularz. Dla podformularza sprawdza się widok arkusza danych lub formularza ciągłego, ponieważ pozwala przeglądać kilka pozycji jednocześnie. Formularz ciągły daje większą swobodę rozmieszczania kontrolek, natomiast arkusz danych przypomina tabelę i jest wygodny przy szybkim wpisywaniu kolejnych wierszy.
Jak przygotować formularz zamówienia w Accessie?
Na początek można skorzystać z polecenia Kreator formularzy na karcie Tworzenie. Pozwala ono wskazać źródło danych i pola, które mają być dostępne dla użytkownika. Przy poprawnie zdefiniowanych relacjach kreator może również zaproponować układ formularza z podformularzem.
- Utwórz formularz główny oparty na tabeli zamówień. Dodaj pola potrzebne do rejestracji zamówienia, pomijając zbędne informacje techniczne.
- Przygotuj podformularz pozycji zamówienia i umieść go w formularzu głównym za pomocą kontrolki podformularza.
- Sprawdź powiązanie obu formularzy. We właściwościach kontrolki podformularza ustaw pola łączące rekord nadrzędny z podrzędnymi — zwykle identyfikator zamówienia po obu stronach.
- Przetestuj przechodzenie między zamówieniami. Podformularz powinien pokazywać wyłącznie pozycje aktualnie wybranego zamówienia.
Poprawne połączenie ma znaczenie także podczas dodawania danych: Access przypisuje nowej pozycji identyfikator bieżącego zamówienia. Użytkownik nie musi wpisywać go ręcznie. Zanim jednak zacznie dodawać pozycje, rekord zamówienia musi zostać zapisany — przejście do podformularza zwykle wywołuje taki zapis automatycznie, o ile dane spełniają wymagane warunki.
Pola kombi zamiast ręcznego wpisywania identyfikatorów
Do wyboru klienta i produktu zastosuj pola kombi, czyli kontrolki z listą rozwijaną. Użytkownik widzi nazwę, natomiast formularz zapisuje odpowiadający jej identyfikator. Kolumnę z identyfikatorem można ukryć, pozostawiając ją kolumną związaną kontrolki.
Jeżeli wybór ma obejmować wyłącznie istniejące rekordy, ustaw właściwość Ogranicz do listy na Tak. Gdy nazwy produktów lub klientów mogą się powtarzać, pokaż dodatkową kolumnę ułatwiającą rozpoznanie właściwej pozycji, na przykład kod produktu. To skuteczniejsze niż oczekiwanie, że użytkownik będzie pamiętał numery rekordów.
Walidacja: kontroluj dane i jasno opisuj błędy
Walidacja formularza powinna odpowiadać regułom przyjętym w firmie. Dla pola ilości można ustawić Regułę poprawności >0, a jako Tekst reguły poprawności wpisać: „Podaj ilość większą od zera”. Sam warunek liczbowy nie zastępuje jednak sprawdzenia, czy wymagane pole zostało wypełnione.
Reguły dotyczące kilku pól jednocześnie, takie jak kontrola daty realizacji względem daty zamówienia, można obsłużyć w zdarzeniu formularza Przed aktualizacją, przy użyciu makra lub VBA. W razie błędu należy anulować zapis i wskazać użytkownikowi, co powinien poprawić. Nie warto opierać kontroli wyłącznie na przycisku „Zapisz”, ponieważ Access może zapisywać rekord również podczas przechodzenia do innego rekordu lub zamykania formularza.
Kontrole w formularzu ułatwiają pracę, ale nie zastępują zabezpieczeń na poziomie tabel. Dane mogą być modyfikowane także poza tym ekranem. Przed udostępnieniem formularza sprawdź więc zarówno poprawne zamówienie z kilkoma pozycjami, jak i próby wpisania zerowej ilości, pominięcia klienta czy wybrania produktu spoza listy. Ustaw też logiczną kolejność przechodzenia klawiszem Tab i zablokuj edycję pól, których użytkownik nie powinien zmieniać.
7. Kwerendy i raporty: zapytania wybierające, parametryczne, podsumowania oraz raporty sprzedaży
Aby sprawdzić, co kupił konkretny klient, ile wyniosła sprzedaż w danym miesiącu lub które produkty zamawiano najczęściej, nie trzeba przeglądać wszystkich rekordów ręcznie. W Microsoft Access służą do tego kwerendy: pobierają dane, łączą informacje z powiązanych tabel, filtrują wyniki i wykonują obliczenia. Raporty nadają tym wynikom czytelną formę — odpowiednią do przeglądania, drukowania lub eksportu do PDF.
Kwerenda wybierająca — potrzebne dane w jednym widoku
Kwerenda wybierająca pokazuje wybrane informacje bez zmieniania danych źródłowych. W bazie obsługującej klientów, zamówienia i produkty może wyświetlać na przykład numer zamówienia, datę zakupu, klienta, nazwę produktu oraz zamówioną ilość. Pozwala też ograniczyć wyniki do zamówień o określonym statusie i uporządkować je od najnowszych.
Aby przygotować takie zestawienie, na karcie Tworzenie wybierz Projekt kwerendy, dodaj potrzebne tabele, a następnie przenieś wybrane pola do siatki projektu. Określ kryteria i sposób sortowania, po czym uruchom kwerendę. Sprawdź, czy połączenia między źródłami danych odpowiadają istniejącym relacjom — nieprawidłowe połączenie może zwielokrotnić wyniki.
Zwróć uwagę, co przedstawia pojedynczy wiersz zestawienia. Jeżeli uwzględniasz pozycje zamówień, jedno zamówienie zawierające kilka produktów pojawi się w kilku wierszach. To prawidłowe, ale liczba wierszy nie będzie wtedy liczbą zamówień.
Kwerenda parametryczna — jedno zapytanie, różne kryteria
Kwerenda parametryczna pozwala podać warunek dopiero podczas uruchamiania. Zamiast za każdym razem edytować projekt, użytkownik wpisuje na przykład identyfikator klienta albo datę początkową i końcową zestawienia. Jest to szczególnie przydatne przy cyklicznym sprawdzaniu sprzedaży za różne okresy.
Parametry możesz wykorzystać w kryteriach kwerendy wybierającej. W oknie Parametry zadeklaruj ich typy, zwłaszcza dla dat i liczb. Dzięki temu Access będzie interpretować podawane wartości zgodnie z ich przeznaczeniem. Komunikaty wyświetlane użytkownikowi powinny jednoznacznie wskazywać, jakiej informacji oczekujesz.
Podsumowania — od pozycji zamówień do wyników sprzedaży
Gdy potrzebujesz wyników zbiorczych, włącz w projekcie kwerendy funkcję Sumy. Pozwala ona grupować dane, na przykład według klienta, produktu lub okresu, i wykonywać obliczenia dla każdej grupy. Najczęstsze zastosowania to:
- sumowanie — obliczanie wartości sprzedaży lub łącznej liczby sprzedanych sztuk;
- zliczanie — ustalanie liczby rekordów spełniających przyjęte warunki;
- wyznaczanie średniej — analizowanie przeciętnej wartości wybranej miary.
Wartość pozycji zamówienia obliczaj na podstawie ilości i ceny zapisanej dla danej transakcji, z uwzględnieniem rabatu, jeśli występuje. Aktualna cena produktu mogłaby zniekształcić historyczną sprzedaż. Ustal również, czy zestawienie obejmuje kwoty netto czy brutto oraz jak traktuje zamówienia anulowane i zwroty.
Raport sprzedaży — czytelna prezentacja wyników
Sprawdzoną kwerendę wykorzystaj jako źródło danych raportu. Na karcie Tworzenie uruchom Kreator raportów, wybierz pola, ustal grupowanie i kolejność sortowania. Raport może pokazywać szczegóły zamówień albo wyłącznie zbiorczą sprzedaż według klientów czy produktów. Dodaj sumy dla grup oraz sumę końcową, jeśli są potrzebne odbiorcy.
Przed udostępnieniem zestawienia sprawdź je w podglądzie wydruku: szerokość kolumn, podziały stron, format kwot i czytelność nagłówków. Umieść w raporcie okres analizy oraz informację, co obejmują prezentowane wartości. Porównaj też kilka wyników z zamówieniami źródłowymi — poprawny wygląd raportu nie gwarantuje poprawności obliczeń.
Najczęstsze błędy początkujących w Access i jak ich unikać
Początkujący użytkownicy Access często skupiają się na tym, czy baza przyjmuje dane i wyświetla wyniki. To jednak za mało, by bezpiecznie obsługiwać zamówienia. Problemy ujawniają się przy przypadkowym usunięciu rekordów, równoczesnej pracy kilku osób albo zmianie cen produktów. Warto więc od początku zadbać nie tylko o działanie bazy, lecz także o sposób jej użytkowania.
Traktowanie bazy jak arkusza kalkulacyjnego
W Excelu łatwo przygotować kopię arkusza na kolejny miesiąc. W Access tworzenie osobnych tabel z zamówieniami na styczeń, luty i marzec zwykle utrudnia wyszukiwanie oraz analizę sprzedaży. Okres powinien wynikać z daty zapisanej przy zamówieniu, a nie z nazwy tabeli. Podobnie nie warto tworzyć oddzielnej bazy dla każdego klienta, jeśli wszystkie mają obsługiwać ten sam proces.
Eksperymentowanie na jedynej kopii danych
Zmiana struktury tabeli, ponowny import czy uruchomienie kwerendy usuwającej mogą mieć skutki, których nie da się odwrócić zwykłym poleceniem „Cofnij”. Nowe rozwiązania sprawdzaj na kopii testowej, a przed operacjami masowymi wykonuj kopię zapasową. Jeśli zamierzasz zmienić lub usunąć wiele rekordów, najpierw sprawdź ich zakres za pomocą zapytania wybierającego.
Kopie przechowuj również poza dyskiem, na którym znajduje się działająca baza. Przy zwykłym kopiowaniu pliku upewnij się, że wszyscy użytkownicy zamknęli bazę. Sprawdzaj też możliwość odtworzenia danych — samo istnienie pliku zapasowego nie daje jeszcze pewności, że będzie użyteczny.
Udostępnianie jednego pliku wszystkim użytkownikom
Rozwiązanie wygodne dla jednej osoby nie musi sprawdzić się w zespole. Przy pracy wieloosobowej typowym podejściem jest podział bazy na część z danymi oraz część z interfejsem, zawierającą między innymi formularze i raporty. Każdy użytkownik pracuje wtedy na własnej lokalnej kopii interfejsu, połączonej ze wspólnymi danymi.
Nie traktuj folderu synchronizowanego przez OneDrive lub podobną usługę jako miejsca do równoczesnej pracy nad tym samym plikiem Access. Synchronizacja plików nie zastępuje mechanizmów współdzielenia bazy i może prowadzić do konfliktów kopii.
Sprawdzanie wyłącznie poprawnych przypadków
Test, w którym jeden klient składa jedno zamówienie na jeden produkt, niewiele mówi o niezawodności rozwiązania. Sprawdź także anulowane zamówienie, brak wymaganej informacji, ponowny import tych samych danych oraz próbę jednoczesnej edycji rekordu przez dwie osoby. W scenariuszu sprzedażowym zweryfikuj również, czy zmiana bieżącej ceny produktu nie zmienia wartości historycznych zamówień. Takie próby pomagają wykryć błędy, zanim wpłyną na rzeczywiste rozliczenia. W Cognity łączymy teorię z praktyką — dlatego zagadnienia testowania baz danych rozwijamy także w formie ćwiczeń na szkoleniach.
Mylenie wygodnego interfejsu z ochroną danych
Ukrycie tabel lub przycisków ogranicza ryzyko przypadkowych zmian, ale nie stanowi pełnej kontroli dostępu. Dostęp do pliku powinien być ograniczony odpowiednimi uprawnieniami do folderu. Nie włączaj też automatycznie aktywnej zawartości w bazach pochodzących z nieznanego źródła. Jeśli rozwiązanie wymaga szczegółowych uprawnień użytkowników, pracy przez internet lub obsługi dużej liczby jednoczesnych operacji, rozważ przechowywanie danych w bazie serwerowej. Access może wówczas nadal służyć jako interfejs aplikacji.
Najczęściej zadawane pytania i odpowiedzi odnośnie Jak stworzyć bazę danych w Microsoft Access od podstaw?
Tworzenie bazy danych w Microsoft Access zacznij od określenia celu, zakresu informacji i sposobu pracy użytkowników. Zapisz, jakie czynności baza ma obsługiwać oraz na jakie pytania ma odpowiadać, na przykład o historię zakupów klienta lub wartość sprzedaży. Dopiero potem projektuj tabele. Pierwszą wersję ogranicz do jednego procesu, który można sprawdzić od początku do końca.
Prosta baza zamówień w Accessie potrzebuje czterech tabel: Klienci, Zamówienia, Produkty i Pozycje zamówienia. Każda przechowuje inny rodzaj informacji:
- Klienci — dane identyfikacyjne i kontaktowe odbiorców.
- Zamówienia — klienta, datę i status zakupu.
- Produkty — dane oferty i aktualne ceny.
- Pozycje zamówienia — wskazanie zamówienia i produktu, ilość oraz cenę sprzedaży.
Tabela pozycji pozwala zapisać wiele produktów w jednym zamówieniu bez tworzenia kolejnych kolumn typu Produkt1 i Produkt2.
Dla telefonu, NIP-u i kodu pocztowego w Accessie wybierz typ Krótki tekst, a nie Liczba. Te wartości służą do identyfikacji lub kontaktu, nie do obliczeń. Zapis tekstowy pozwala zachować początkowe zera, znak plus i separatory. Sam format wyświetlania pola liczbowego nie zastępuje właściwego typu danych, dlatego ustaw go już podczas projektowania tabeli.
Access może odmawiać włączenia więzów integralności z powodu niezgodnych typów pól, braku unikalności klucza nadrzędnego lub niespójnych danych. Przed ponowną próbą sprawdź:
- Czy łączone pola mają zgodne typy i rozmiary.
- Czy pole po stronie „jeden” zawiera wyłącznie unikalne wartości.
- Czy rekordy podrzędne nie wskazują nieistniejących rekordów nadrzędnych.
W wykrywaniu ostatniego problemu pomaga Kreator kwerend wyszukujących niedopasowane dane. Błędne identyfikatory zweryfikuj przed usuwaniem rekordów.
Aby aktualizacja cennika nie zmieniała starych zamówień, zapisuj cenę sprzedaży osobno w każdej pozycji zamówienia. Po wybraniu produktu w formularzu skopiuj jego aktualną cenę do tego pola. Wartość transakcji obliczaj z zapisanej ceny i ilości, a nie z bieżącej ceny katalogowej. Cena historyczna opisuje konkretną sprzedaż, więc jej przechowywanie nie jest zbędnym powielaniem danych.
Formularz zamówienia z kilkoma produktami przygotuj jako formularz główny z podformularzem pozycji zamówienia. Formularz główny powinien obsługiwać dane całego zamówienia, a podformularz jego produkty, ilości i ceny. Połącz oba przez identyfikator zamówienia. Do wyboru produktów zastosuj pola kombi, które wyświetlają nazwy, ale zapisują identyfikatory. Sprawdź, czy po przejściu do innego zamówienia podformularz pokazuje wyłącznie właściwe pozycje.
Kwerenda pokazuje to samo zamówienie kilka razy, gdy każdy wiersz wyniku przedstawia osobną pozycję tego zamówienia. Po połączeniu zamówień z ich pozycjami taki wynik jest prawidłowy: wspólne dane zamówienia pojawiają się przy kolejnych produktach. Nie traktuj więc liczby wierszy jako liczby zamówień. Jeśli jednak powtórzenia nie odpowiadają rzeczywistej zawartości zamówienia, sprawdź połączenia tabel w projekcie kwerendy.
Kilka osób może korzystać z bazy Access jednocześnie, ale zalecanym rozwiązaniem jest podział bazy na wspólne dane i lokalne kopie interfejsu. Każdy użytkownik pracuje wtedy we własnym pliku z formularzami i raportami, połączonym ze wspólnymi tabelami. Folder synchronizowany przez OneDrive nie zastępuje takiego współdzielenia. Przy większych wymaganiach dotyczących dostępu lub równoczesnych operacji rozważ bazę serwerową z interfejsem w Accessie.