Access

  MS Access 2010+  |  DAO. Data Access Objects  |   VBA 7.0

• DAO. Obiekt Index

Obiekty Index definiują kolejność rekordów pobieranych z tabel bazy danych oraz określają, czy mogą powtarzać się takie same rekordy; zapewniają jednocześnie efektywny dostęp do danych. W przypadku zewnętrznych baz danych obiekty Index opisują indeksy tabel zewnętrznych (tylko obszary robocze Microsoft Jet).

Zastosowanie obiektu Index

W aparacie bazy danych Microsoft Jet indeksy są wykorzystywane podczas sprzęgania tabel i tworzenia obiektów Recordset. Indeksy określają kolejność, w której obiekty Recordset typu tabela zwracają rekordy, ale nie określają kolejności, w jakiej aparat bazy danych Microsoft Jet przechowuje rekordy w tabelach bazowych, ani kolejności, w jakiej rekordy są zwracane przez inne typy obiektów Recordset.

Obiekt DAO Index

Dla obiektu Index można:

  • Określić, czy obiekty Field indeksu wymagają wartości różnych od Null, wykorzystując do tego właściwość Required, a następnie określić, czy wartościom Null mają odpowiadać pozycje w indeksie, wykorzystując do tego właściwość IgnoreNulls.
  • Określić sposób uporządkowania i unikatowość pozycji w obiekcie Index, wykorzystując właściwości PrimaryUnique.

Zarządzanie wszystkimi indeksami tabeli bazowej w aparacie bazy danych Microsoft Jet odbywa się automatycznie. Indeksy są aktualizowane zawsze przy wykonywaniu operacji wstawiania, zmiany lub usuwania rekordów z tabel bazowych. Po utworzeniu bazy danych należy co jakiś czas wywoływać metodę CompactDatabase w celu uzyskania aktualnej statystyki dotyczącej indeksów.

Podczas dostępu do obiektu Recordset typu tabela kolejność rekordów jest określana za pomocą właściwości Index. Należy ustawić tę właściwość na wartość właściwości Name istniejącego obiektu Index z kolekcji Indexes. Ta kolekcja jest zawarta w obiekcie TableDef odpowiadającym zapełnianemu obiektowi Recordset.

Uwaga. Tworzenie indeksów dla tabel nie jest konieczne, ale w przypadku nie indeksowanych tabel o dużych rozmiarach dostęp do określonego rekordu lub wykonywanie sprzężeń może trwać bardzo długo. Z kolei zbyt duża liczba indeksów może spowolnić aktualizację bazy danych ze względu na konieczność dokonywania odpowiednich korekt we wszystkich indeksach tabel.

Właściwość Attributes każdego z obiektów Field indeksu określa kolejność zwracanych rekordów i w efekcie określa, która technika dostępu będzie stosowana dla tego indeksu.

Każdy obiekt Field z kolekcji Fields obiektu Index jest składnikiem indeksu. Aby zdefiniować nowy obiekt Index, należy przed dołączeniem go do kolekcji ustawić jego właściwości, aby w ten sposób obiekt Index stał się gotowy do dalszego stosowania.

Uwaga. Ustawienia właściwości Name istniejącego obiektu Index można modyfikować tylko wtedy, gdy właściwość Updatable zawierającego go obiektu TableDef jest ustawiona na True.

Po określeniu klucza głównego dla tabeli aparat bazy danych Microsoft Jet automatycznie zdefiniuje go jako indeks podstawowy. Indeks podstawowy składa się z jednego lub wielu pól, które jednoznacznie identyfikują wszystkie rekordy w tabeli w z góry ustalonej kolejności. Ponieważ indeks podstawowy musi być unikatowy, aparat bazy danych Microsoft Jet automatycznie ustawi właściwość Unique podstawowego obiektu Index na wartość True. Jeśli indeks podstawowy składa się z więcej niż jednego pola, wartość każdego z tych pól może być powtórzona, ale kombinacja wartości wszystkich pól indeksu musi być unikatowa. Indeks podstawowy składa się z klucza tabeli i zawsze jest złożony z tych pól, które składają się na klucz podstawowy.

Uwaga. Należy upewnić się, że dane są zgodne z atrybutami nowego indeksu. Jeśli indeks wymaga wartości unikatowych, należy sprawdzić, czy nie istnieją powtarzające się rekordy danych. Jeśli takie rekordy istnieją, aparat bazy danych Microsoft Jet nie będzie mógł utworzyć indeksu. W tej sytuacji próba użycia metody Append w stosunku do nowego indeksu spowoduje wystąpienie błędu przechwytywalnego.

Po utworzeniu związku, który wymusza integralność referencyjną, aparat bazy danych Microsoft Jet automatycznie utworzy indeks z właściwością Foreign ustawioną jako klucz obcy w tabeli wskazującej. Po określeniu związku pomiędzy tabelami aparat bazy danych sprawdza, czy operacje dodawania rekordów lub inne zmiany dokonywane w bazie danych nie naruszają tego związku. Jeśli w obiekcie Relation właściwość Attributes dopuszcza wykonywanie aktualizacji kaskadowychusuwania kaskadowego aparat bazy danych Microsoft Jet automatycznie wykona aktualizację lub usunięcie rekordów w powiązanych tabelach.

Aby utworzyć nowy obiekt Index

  1. Użyj metody CreateIndex na obiekcie TableDef.
  2. Użyj metody CreateField na obiekcie Index w celu utworzenia obiektu Field dla każdego pola (kolumny) włączanego do obiektu Index.
  3. Jeśli jest to konieczne, ustaw właściwości obiektu Index.
  4. Dodaj obiekt Field do kolekcji Fields.
  5. Dodaj obiekt Index do kolekcji Indexes.

Uwaga. Właściwość Clustered jest ignorowana w przypadku baz danych korzystających z aparatu bazy danych Microsoft Jet, który nie dopuszcza istnienia indeksów klastrowych.

Słownik użytych terminów.


• obszar roboczy Microsoft Jet
Obszar roboczy wykorzystujący aparat bazy danych Microsoft Jet w celu uzyskiwania dostępu do źródła danych. Źródłem danych może być plik bazy danych Microsoft Jet (.mdb), baza danych ODBC, jak np. baza danych Paradox, lub baza danych ISAM.
• obszar roboczy ODBCDirect
Obszar roboczy wykorzystujący technologię ODBCDirect w celu uzyskiwania bezpośredniego dostępu do źródeł danych ODBC, z pominięciem aparatu bazy danych Microsoft Jet.
• aparat bazy danych Microsoft Jet
System zarządzania bazą danych pobierający i zapamiętujący dane w bazach danych systemowych i użytkownika. Aparat bazy danych Microsoft Jet może być traktowany jako składnik zarządzający danymi wbudowany w inne systemy dostępu do danych, takie jak Microsoft Access i Visual Basic.
• Null
Wartość oznaczająca brakującą lub nieznaną daną. Wartość Null można wprowadzać w pola, których zawartość nie jest znana, oraz w wyrażeniach i kwerendach. W języku Visual Basic słowo kluczowe Null oznacza wartość Null. Niektóre pola, na przykład te, które zdefiniowane są jako zawierające klucz podstawowy, nie mogą zawierać wartości Null.
• tabela bazowa
Tabela w bazie danych Microsoft Jet. Tabela definiuje strukturę relacyjnej bazy danych i jest obiektem, w którym dane przechowywane są w rekordach i polach. Strukturę tabeli bazowej można zmieniać, korzystając z obiektów DAO lub instrukcji definicji danych języka SQL. Dane w tabeli bazowej można modyfikować za pomocą obiektów Recordset lub kwerend funkcjonalnych.
• sprzężenie
Operacja w bazie danych, na przykład równosprzężenie, sprzężenie rozszerzone lub samosprzężenie, łącząca niektóre lub wszystkie rekordy z dwóch lub więcej tabel. Ogólnie, sprzężenie odwołuje się do logicznego powiązania pól tych samych typów w dwóch różnych tabelach. Sprzężenie można zrealizować za pomocą instrukcji SQL.
Przy definiowaniu związku między dwoma tabelami sprzężenie jest tworzone przez określenie pól z tabeli podstawowej i obcej. Przy dodawaniu tabeli do kwerendy sprzężenie pomiędzy odpowiednimi polami należy utworzyć w instrukcji języka SQL definiującej kwerendę.
• klucz podstawowy
Jedno lub więcej pól, których wartość jednoznacznie identyfikuje każdy rekord w tabeli. W związku, klucz podstawowy służy do powiązania rekordów w jednej tabeli z rekordami z innej tabeli. Klucz podstawowy jest nazywany kluczem obcym, jeśli odwołuje się do innej tabeli. Na przykład, w tabeli Pracownicy kluczem podstawowym może być numer dowodu osobistego.
• integralność referencyjna
Reguły wykorzystywane do ustalenia i zachowywania związków pomiędzy tabelami istotnymi przy dodawaniu, zmienianiu lub usuwaniu rekordów. Wymuszanie integralności referencyjnej uniemożliwia użytkownikowi dodawanie rekordów do tabeli sprzężonej, dla której nie ma klucza podstawowego, dokonywanie zmian wartości w tabeli podstawowej, prowadzących do powstawania w tabeli sprzężonej rekordów osieroconych oraz usuwanie rekordów z tabeli podstawowej, gdy w tabeli sprzężonej istnieją odpowiadające im rekordy.
Jeżeli dla związku wybrana zostanie opcja dbRelationDeleteCascade lub dbRelationUpdateCascade, aparat bazy danych Microsoft Jet umożliwi dokonywanie zmian i usuwanie, ale będzie zmieniać lub usuwać powiązane rekordy tak, by te reguły były zachowane.
• klucz obcy
Jedno lub więcej pól tabeli odwołujących się do pola lub pól klucza podstawowego w innej tabeli. Klucz obcy wskazuje, w jaki sposób tabele są powiązane dane w polach klucza podstawowego i obcego muszą być zgodne. Na przykład, spis dopuszczalnych numerów części mógłby zawierać klucz obcy do tabeli stanów magazynowych zawierającej odesłania do dopuszczalnych numerów części. Klucz obcy jest wykorzystywany do utrzymywania integralności referencyjnej w bazie danych.
• aktualizacja kaskadowa
Jest to opcja, która powoduje, że w związkach wymuszających integralność referencyjną zmiana klucza podstawowego w rekordzie tabeli podstawowej powoduje automatyczne uaktualnienie klucza obcego we wszystkich powiązanych z nim rekordach w tabelach obcych.
Załóżmy na przykład, że między tabelami: Klienci (podstawowa) i Zamówienia (obca) został utworzony związek z włączoną opcją kaskadowej aktualizacji. Jeżeli klucz podstawowy w rekordzie z tabeli Klienci zostanie zmieniony, to wszystkie zamówienia pochodzące od tego klienta, znajdujące się w tabeli Zamówienia, także zostaną zmienione.
• usuwanie kaskadowe
Jest to opcja, która powoduje, że w związkach wymuszających integralność referencyjną usunięcie rekordu z tabeli podstawowej powoduje automatyczne usunięcie wszystkich powiązanych z nim rekordów z tabel obcych.
Załóżmy na przykład, że między tabelami: Klienci (podstawowa) i Zamówienia (obca) został utworzony związek z włączoną opcją usuwania kaskadowego. W takim przypadku usunięcie rekordu z tabeli Klienci spowoduje także usunięcie z tabeli Zamówienia wszystkich rekordów związanych z tym klientem.