Obiekty dostępu do danych (Data Access Objects) - przegląd

System obiektów dostępu do danych (Data Access Objects, DAO) pozwala na stosowanie języka programowania w celu uzyskiwania dostępu i manipulowania danymi zawartymi w lokalnych lub zdalnych bazach danych oraz w celu zarządzania bazami danych, ich obiektami i strukturą.

Modele obiektów

System DAO dostarcza dwóch odrębnych środowisk baz danych, czyli "obszarów roboczych".

•	Obszary robocze Microsoft Jet pozwalają na uzyskiwanie dostępu do danych zawartych w bazach danych Microsoft Jet, bazach danych ODBC dołączonych do aparatu Microsoft Jet i źródłach danych dostępnych poprzez instalowalny sterownik ISAM w innych formatach, takich jak Paradox lub Lotus 1-2-3.

•	Obszary robocze ODBCDirect pozwalają na uzyskiwanie dostępu do serwerów baz danych poprzez mechanizm ODBC, bez konieczności ładowania aparatu bazy danych Microsoft Jet.

Stosowanie obszaru roboczego Microsoft Jet jest wskazane, gdy otwierana jest baza danych Microsoft Jet (plik .mdb) lub inna baza danych ISAM lub jeśli niezbędne jest skorzystanie z takich unikatowych cech aparatu Microsoft Jet, jak wrażliwość łączenia ze sobą danych z baz danych o różnych formatach.

Obszar roboczy ODBCDirect stanowi alternatywę w sytuacji, gdy konieczne jest jedynie wykonywanie na serwerze, np. Microsoft SQL Server, kwerend lub przechowywanych procedur lub jeśli aplikacja klienta wymaga specyficznych możliwości ODBC, takich jak aktualizacja grupowa lub wykonywanie kwerendy asynchronicznej.

Obiekty DAO

Istnieje 17 różnych typów obiektów DAO. Użytkownik może zadeklarować nowe zmienne obiektowe DAO dowolnego typu obiektowego.

Na przykład, poniższy kod w języku Visual Basic for Applications (VBA) tworzy zmienne obiektowe dla obiektu Database, obiektu Recordset typu zestaw dynamiczny i obiektu Field:

Dim dbsPrzykład As Database

Dim rstPrzykład As Recordset

Dim fldPrzykład As Field

Set dbsPrzykład = OpenDatabase("Biblio.mdb")

Set rstPrzykład = dbsPrzykład.OpenRecordset( _ 	"Autorzy", dbOpenDynaset)

Set fldPrzykład = rstPrzykład.Fields("Au_ID")

Kolekcje DAO

Każdy typ obiektowy DAO inny niż DBEngine posiada dodatkowo odpowiadającą mu kolekcję. Kolekcja zawiera wszystkie istniejące obiekty tego typu. Na przykład, kolekcja Recordsets zawiera wszystkie otwarte obiekty typu Recordset. Każda kolekcja jest "własnością" innego obiektu, występującego na wyższym poziomie w hierarchii. Obiekt typu Database "posiada" kolekcję Recordsets. Oprócz obiektów typu Connection i Error, każdy obiekt DAO posiada kolekcję Properties.

Większość obiektów DAO posiada domyślne kolekcje i właściwości. Na przykład, domyślną kolekcją obiektu Recordset jest kolekcja Fields, a domyślną właściwością obiektu typu Field jest właściwość Value. Wykorzystywanie elementów domyślnych pozwala na uproszczenie kodu programu. Na przykład, poniższy kod programu ustawia wartość pola PubID bieżącego rekordu:

rstPrzykład!PubID=99

Obiekty DBEngine i Workspace

Wszystkie obiekty DAO pochodzą od obiektu DBEngine. Ustawienie właściwości DefaultType obiektu DBEngine umożliwia określenie typu obszaru roboczego (Microsoft Jet lub ODBCDirect) tworzonego podczas kolejnych wywołań metody CreateWorkspace. Można też przesłonić tę właściwość argumentem typ w samej metodzie CreateWorkspace. Kiedy aplikacja użytkownika tworzy obszar roboczy, do pamięci ładowana jest jednocześnie właściwa biblioteka — aparat bazy danych Microsoft Jet lub ODBC.

Użytkownik może otwierać dodatkowe obiekty Workspace, stosownie do potrzeb. Z każdym obiektem Workspace związany jest identyfikator użytkownika i hasło.

Stosowanie obszaru roboczego Microsoft Jet

Otwieranie bazy danych

Aby otworzyć bazę danych, należy otworzyć istniejący obiekt Database lub utworzyć nowy. Obiekt ten może reprezentować bazę danych Microsoft Jet (plik .mdb), bazę danych ISAM (na przykład Paradox) lub bazę danych ODBC dołączoną poprzez aparat bazy danych Microsoft Jet (zwaną również "bazą danych ODBC dołączoną do aparatu Microsoft Jet").

Język definiowania danych

Aby modyfikować strukturę bazy danych, można stosować zmienne obiektowe i inne elementy DDL. Użytkownik może na przykład dodać nowy obiekt Field w istniejącej tabeli za pomocą poniższego kodu programu:

Dim dbs As Database, tdf As TableDef, fld As Field

' Otwórz bazę danych.

Set dbs = OpenDatabase("Biblio.mdb")

' Otwórz obiekt TableDef.

Set tdf = dbs.TableDefs("Autorzy")

' Utwórz nowe pole.

Set fld = tdf.CreateField("Adres", dbText, 20)

' Dołącz pole do kolekcji Fields obiektu TableDef.

tdf.Fields.Append fld

Powyższy kod programu tworzy nową zmienną obiektową typu obiektowego Field i dodaje ją do obiektu TableDef za pomocą metody Append. W związku z tym, że obiekt TableDef zawiera definicję tabeli, tabela ta od tej chwili ma pole o nazwie Address pozwalające na wprowadzanie danych. W podobny sposób można tworzyć nowe tabele i indeksy.

Manipulowanie danymi

System DAO udostępnia bogaty zestaw narzędzi służących do manipulowania danymi. Do wygodnego wystosowywania kwerend do bazy danych i manipulowania wynikowym zestawem rekordów można utworzyć obiekt Recordset. Metoda OpenRecordset przyjmuje jako argument określający źródło danych ciąg SQL lub nazwę obiektu QueryDef (przechowywana kwerenda); obiekt Recordset może też być otwarty z obiektu QueryDef lub TableDef, z wykorzystaniem takiego obiektu jako źródła danych dla obiektu Recordset. Wynikowy obiekt Recordset posiada bogaty zbiór właściwości i metod służących do przeglądania i modyfikowania danych.

Obiekt Recordset jest dostępny w czterech różnych typach — tabelowym, zestaw dynamiczny, progresywnym i utrwalonym.

Transakcje

Wszystkie obiekty Database otwarte w obiekcie Workspace współdzielą jeden zasięg transakcji. Oznacza to, że jeśli dla obiektu Workspace zostanie zastosowana metoda BeginTrans, będzie ona dotyczyła wszystkich baz danych otwartych w tym obiekcie Workspace. W ten sam sposób zastosowanie metody CommitTrans dla obiektu Workspace dotyczy wszystkich baz danych otwartych w tym obiekcie Workspace.

Replikacja

Do tworzenia i zarządzania replikami głównej bazy danych Microsoft Jet (zwanej wzorcem) można stosować mechanizm replikacji bazy danych. Wykorzystując metodę Synchronize, można okresowo aktualizować całość lub część replik, albo też kopiować nowe dane z jednej repliki do drugiej. Ponadto możliwe jest ograniczanie aktualizacji jedynie do wybranych rekordów, wykorzystując do tego właściwość ReplicaFilter, a następnie synchronizując te rekordy za pomocą metody PopulatePartial.

Bezpieczeństwo

Użytkownik ma możliwość ograniczania dostępu do jednej lub więcej baz danych typu .mdb lub ich tabel, wykorzystując ustawienia dotyczące bezpieczeństwa określane i zarządzane przez aparat bazy danych Microsoft Jet. W kodzie aplikacji użytkownika można tworzyć obiekty typu Group i User, aby zdefiniować zasięg i poziom uprawnień dostępnych indywidualnym użytkownikom w stosunku do poszczególnych obiektów. Na przykład, można przydzielić zezwolenia dla określonego użytkownika tak, aby mógł uzyskiwać dostęp w trybie tylko_do_odczytu do jednej tabeli, a pełny dostęp do innych.

Stosowanie modelu obiektowego ODBCDirect

Łączenie się z bazą danych

Obiekt Connection jest podobny do obiektu Database. W rzeczywistości obiekty Connection i Database reprezentują różne odwołania do tego samego obiektu, natomiast właściwości każdego z tych obiektów pozwalają na uzyskanie odwołania do odpowiadającego mu obiektu drugiego typu, co upraszcza zadanie konwersji aplikacji klienta ODBC, stosującej zamiast ODBCDirect obszaru roboczego Microsoft Jet. Metoda OpenConnection służy do nawiązywania połączeń ze źródłem danych ODBC. Wynikowy obiekt Connection zawiera informacje o konkretnym połączeniu, takie jak nazwa serwera, nazwa źródła danych i inne.

Kwerendy

W obszarze roboczym ODBCDirect system DAO nie umożliwia stosowania przechowywanych kwerend, jednak skompilowana kwerenda może być utworzona jako obiekt QueryDef i wykorzystywana do wykonywania kwerend funkcjonalnych, a także do wykonywania na serwerze przechowywanych tam procedur. Właściwość Prepare umożliwia decydowanie, czy przed wykonaniem kwerendy na serwerze ma zostać w oparciu o obiekt QueryDef utworzona prywatna, tymczasowo przechowywana procedura.

Kwerendy parametryczne również mogą być przekazywane do serwera. Służą do tego obiekty Parameter dla obiektu QueryDef. Określenie, czy obiekt Parameter dotyczy wejścia, wyjścia czy obu kierunków, umożliwia właściwość Direction. Właściwość ta umożliwia również przyjmowanie przez obiekt Parametr wartości zwracanych przez przechowywaną procedurę.

Manipulowanie danymi

Tworzenie obiektu Recordset jest wygodnym sposobem wykonywania kwerend w stosunku do bazy danych i manipulowanie wynikowym zestawem rekordów. Jako argument określający źródło danych metoda OpenRecordset akceptuje zarówno ciąg SQL, jak i obiekt QueryDef (przechowywana kwerenda). Wynikowy obiekt Recordset posiada bogaty zbiór właściwości i metod, które umożliwiają przeglądanie i modyfikowanie danych.

Obiekt Recordset jest dostępny w czterech typach — zmiennym, zestaw dynamiczny, progresywnym i utrwalonym — odpowiadających typom kursorów ODBC — zmiennemu, dynamicznemu, progresywnemu i statycznemu.

Dla aplikacji klienta wymagających pracy z kursorem bez blokowania na serwerze lub bez potrzeby aktualizacji po jednym rekordzie naraz dostępna jest biblioteka kursorów aktualizacji grupowej. Klient przechowuje informacje o aktualizacjach dokonanych na wielu rekordach w lokalnym buforze (czyli "grupie" rekordów), a następnie wydaje polecenie aktualizacji grupy.

Asynchroniczne wykonywanie metod

Metody Execute, MoveLast, OpenConnection i OpenRecordset mają opcję dbRunAsync. Pozwala to aplikacjom klienta na wykonywanie innych zadań (jak na przykład ładowanie formularzy) podczas wykonywania jednej z tych metod. Właściwość StillExecuting umożliwia sprawdzanie stanu zadania i ewentualne zakończenie zadania asynchronicznego za pomocą metody Cancel.


Metody dostępu do danych - zestawienie według obiektów

Niniejszy opis grupuje wszystkie metody DAO według obiektów. Aby dowiedzieć się, czy dana metoda jest dostępna w obszarze roboczym Microsoft Jet czy ODBC, należy sprawdzić temat Pomocy właściwy dla tej metody.

Connection Container — brak metod Database DBEngine Document Error — brak metod Field Group Index	Parameter — brak metod Property — brak metod QueryDef Recordset Relation TableDef User Workspace


Metody dostępu do danych w obszarach roboczych Microsoft Jet

Niniejszy opis zawiera alfabetyczny spis wszystkich metod DAO dostępnych w obszarach roboczych Microsoft Jet (pliki baz danych ISAM).

A-C

AddNew Append AppendChunk BeginTrans CancelUpdate Clone Close CommitTrans CompactDatabase CopyQueryDef	CreateDatabase CreateField CreateGroup CreateIndex CreateProperty CreateQueryDef CreateRelation CreateTableDef CreateUser CreateWorkspace
D-M

Delete Edit Execute FillCache FindFirst FindLast FindNext FindPrevious GetChunk	GetRows Idle MakeReplica Move MoveFirst MoveLast MoveNext MovePrevious
N-Z

NewPassword OpenDatabase OpenRecordset PopulatePartial Refresh RefreshLink RegisterDatabase	RepairDatabase Requery Rollback Seek SetOption Synchronize Update


Metody dostępu do danych w obszarach roboczych ODBCDirect

Niniejszy opis zawiera alfabetyczny spis wszystkich metod DAO dostępnych w obszarach roboczych ODBCDirect.

A-C

AddNew Append AppendChunk BeginTrans Cancel CancelUpdate	Clone Close CommitTrans CreateQueryDef CreateWorkspace
D-M

Delete Edit Execute GetChunk GetRows	Move MoveFirst MoveLast MoveNext MovePrevious
N-Z

NextRecordset OpenConnection OpenDatabase OpenRecordset Refresh	RegisterDatabase Requery Rollback Update


Model obiektów dostępu do danych w obszarach roboczych Microsoft Jet


Model obiektów dostępu do danych w obszarach roboczych ODBCDirect


Obiekty dostępu do danych i ich kolekcje - opis

Obiekty DAO i ich kolekcje dostarczają struktury programowe służące do tworzenia i manipulowania składnikami systemu baz danych. Obiekty i kolekcje posiadają właściwości opisujące cechy składników baz danych i metody stosowane do manipulowania nimi. Te obiekty te i kolekcje łącznie tworzą hierarchiczny model struktury bazy danych, którym można programowo sterować.

Pomiędzy obiektami i kolekcjami mogą zachodzić relacje zawierania się dwóch różnych typów: obiekty mogą zawierać zero lub więcej kolekcji różnych typów; kolekcje zawierają zero lub więcej obiektów, ale tego samego typu. Obiekty i kolekcje są podobnymi elementami, istnieją jednak różnice powodujące różne traktowanie tych dwóch typów relacji pomiędzy nimi.

W poniższej tabeli typ kolekcji w pierwszej kolumnie zawiera typ obiektu w drugiej kolumnie. Trzecia kolumna opisuje, co reprezentuje każdy z typów obiektów.

Kolekcja	Obiekt	Opis
Connections	Connection	Informacje o połączeniu ze źródłem danych ODBC (tylko obszary robocze ODBCDirect
Containers	Container	Pojemnik na informacje o predefiniowanym typie obiektu (tylko obszary robocze Microsoft Jet)
Databases	Database	Otwarta baza danych
brak	DBEngine	Aparat bazy danych Microsoft Jet
Documents	Document	Informacje o zapisanym, predefiniowanym obiekcie (tylko obszary robocze Microsoft Jet)
Errors	Error	Informacje o dowolnych błędach związanych z tym obiektem
Fields	Field	Kolumna będąca częścią tabeli, kwerendy, indeksu, relacji lub zestawu rekordów
Groups	Group	Grupa kont użytkowników (tylko obszary robocze Microsoft Jet)
Indexes	Index	Predefiniowana kolejność i unikatowość wartości w tabeli (tylko obszary robocze Microsoft Jet)
Parameters	Parameter	Parametr dla kwerendy parametrycznej
Properties	Property	Właściwość wbudowana lub zdefiniowana przez użytkownika
QueryDefs	QueryDef	Zapisana definicja kwerendy
Recordsets	Recordset	Rekordy z tabeli bazowej lub kwerendy
Relations	Relation	Związek między polami tabel i kwerend (tylko obszary robocze Microsoft Jet)
TableDefs	TableDef	Zapisana definicja tabeli (tylko obszary robocze Microsoft Jet)
Users	User	Konto użytkownika (tylko obszary robocze Microsoft Jet)
Workspaces	Workspace	Sesja aparatu bazy danych Microsoft Jet


Właściwości dostępu do danych - zestawienie według obiektów

Niniejszy opis grupuje wszystkie właściwości DAO według obiektów lub kolekcji. Aby dowiedzieć się, czy dana właściwość jest dostępna w obszarze roboczym Microsoft Jet czy ODBC, należy sprawdzić temat Pomocy odpowiedni dla tej właściwości.

Connection Container Database DBEngine Document Error Field Group Index	Parameter Property QueryDef Recordset Relation TableDef User Workspace


Właściwości dostępu do danych w obszarach roboczych Microsoft Jet

Niniejszy opis zawiera alfabetyczny spis wszystkich właściwości DAO dostępnych w obszarach roboczych Microsoft Jet.

A-C

AbsolutePosition AllowZeroLength AllPermissions Attributes  BOF Bookmark Bookmarkable  CacheSize	CacheStart Clustered CollatingOrder ConflictTable Connect Container Count
D-H

DataUpdatable DateCreated DefaultUser DefaultPassword DefaultValue  Description DesignMasterID DistinctCount EditMode	EOF FieldSize Filter Foreign ForeignName ForeignTable HelpContext HelpFile
I-O

IgnoreNulls Index Inherit Inherited IniPath IsolateODBCTrans KeepLocal LastModified LastUpdated LockEdits	LoginTimeout LogMessages MaxRecords Name NoMatch Number ODBCTimeout OrdinalPosition Owner
P-R

PartialReplica Password PercentPosition Permissions PID Primary QueryTimeout RecordCount	RecordsAffected Replicable ReplicableBool ReplicaFilter ReplicaID Required Restartable ReturnsRecords
S-Z

Size Sort Source SourceField SourceTable SourceTableName SQL SystemDB Table Transactions	Type Unique Updatable UserName V1xNullBehavior ValidateOnSet ValidationRule ValidationText Value Version


Właściwości dostępu do danych w obszarach roboczych ODBCDirect

Niniejszy opis zawiera alfabetyczny spis wszystkich metod DAO dostępnych w obszarach roboczych ODBCDirect.

A-D

AbsolutePosition Attributes BatchCollisionCount BatchCollisions BatchSize BOF  Bookmark Bookmarkable CacheSize	Connect Connection Count  Database DataUpdatable DefaultCursorDriver DefaultType Description Direction
E-Q

EditMode EOF FieldSize HelpContext HelpFile LastModified LockEdits  LoginTimeout LogMessages	MaxRecords Name Number ODBCTimeout OrdinalPosition OriginalValue  PercentPosition Prepare QueryTimeout
R-Z

RecordCount RecordsAffected RecordStatus Restartable  Size Source SourceField SourceTable SQL	StillExecuting Transactions Type Updatable  UpdateOptions UserName Value Version VisibleValue


Co nowego w DAO?

System DAO 3.5 wprowadza nowy tryb połączenia klient/serwer zwany "ODBCDirect". ODBCDirect nawiązuje połączenie bezpośrednio ze źródła danych ODBC, pomijając ładowanie do pamięci aparatu bazy danych Microsoft Jet, i jest przydatny w sytuacjach, gdy niezbędne są specyficzne cechy ODBC.

Ponadto, w bazach danych Microsoft Jet istnieją nowe interfejsy, aby umożliwić korzystanie z nowej funkcji aparatu Microsoft Jet, jaką jest częściowa replikacja.

Uwaga   Za pośrednictwem połączenia ODBCDirect można wysyłać kwerendy DAO do różnych serwerów bazy danych, przy czym serwery te mogą rozpoznawać różne dialekty języka SQL. W związku z tym, dla języka Microsoft Jet SQL nie opracowano pomocy kontekstowej, choć nadal dostępne są, poprzez menu Pomoc, tematy dotyczące tego języka. Dlatego też, przed przystąpieniem do korzystania z połączeń ODBCDirect lub z kwerend przekazujących w aplikacjach typu klient/serwer podłączonych do aparatu Micosoft Jet warto zapoznać się z dokumentacją opisującą dialekt SQL używanego serwera bazy danych.

Nowe interfejsy DAO 3.5 dla obszarów roboczych ODBCDirect

•	Obiekt Connection — Połączenie z bazą danych ODBC.

•	Metoda Cancel (obiekty Connection, QueryDef i Recordset) — Anuluje wykonanie operacji asynchronicznej.

•	Metoda NextRecordset (obiekty Recordset) — Pobiera kolejny zestaw rekordów (jeśli istnieją) zwracanych przez kwerendę zwracającą wiele zestawów rekordów w wywołaniu metody OpenRecordset i wskazuje, czy pomyślnie odczytano z bazy danych kolejny zestaw rekordów.

•	Metoda OpenConnection (obiekty Workspace) — Otwiera obiekt typu Connection dla źródła danych ODBC.

•	Właściwość BatchCollisionCount (obiekty Recordset) — Zwraca liczbę rekordów, które nie zostały uaktualnione podczas ostatniej aktualizacji grupowej.

•	Właściwość BatchCollisions (obiekty Recordset) — Zwraca tablicę zakładek wskazujących wiersze, które spowodowały kolizje podczas ostatniej aktualizacji grupowej.

•	Właściwość BatchSize (obiekty Recordset) — Ustawia lub zwraca liczbę instrukcji odesłanych do serwera w każdej grupie.

•	Właściwość Connection (obiekty Database i Recordset) — Zwraca obiekt Connection odpowiadający obiektowi Database lub który jest właścicielem obiektu Recordset.

•	Właściwość Database (obiekty Connection) — Zwraca nazwę obiektu Database odpowiadającą obiektowi Connection.

•	Właściwość DefaultCursorDriver (obiekty Workspace) — Ustawia lub zwraca typ sterownika kursora stosowanego dla obiektów Recordset w obszarze ODBCDirect.

•	Właściwość DefaultType (obiekt DBEngine) — Wskazuje, jaki typ obszaru roboczego (Microsoft Jet czy ODBCDirect) będzie utworzony przez najbliższe wywołanie metody CreateWorkspace.

•	Właściwość Direction (obiekty Parameter) — Wskazuje, czy obiekt Parameter reprezentuje parametr wejściowy, wyjściowy czy wejściowo-wyjściowy albo czy parametr jest wartością zwracaną z przechowywanej procedury.

•	Właściwość MaxRecords (obiekty QueryDef) — Ustawia lub zwraca maksymalną liczbę rekordów zwracanych przez kwerendę.

•	Właściwość OriginalValue (obiekty Field) — Zwraca wartość obiektu Field w bazie danych istniejącą w chwili gdy rozpoczęła się ostatnia aktualizacja grupowa.

•	Właściwość Prepare (obiekty QueryDef) — Zwraca wartość wskazującą, czy kwerenda powinna być wykonana na serwerze jako tymczasowo przechowywana procedura przygotowana uprzednio do uruchomienia funkcją SQLPrepare ODBC, czy też wykonana przy użyciu funkcji SQLExecDirect ODBC.

•	Właściwość RecordStatus (obiekty Recordset) — Zwraca wartość wskazującą status aktualizacji bieżącego rekordu, jeśli jest to częścią aktualizacji grupowej.

•	Właściwość StillExecuting (obiekty Connection, QueryDef i Recordset) — Zwraca wartość wskazującą, czy została zakończona operacja asynchroniczna.

•	Właściwość UpdateOptions (obiekty Recordset) — Zwraca wartość wskazującą, w jaki sposób podczas aktualizacji grupowej konstruowana jest dla każdego rekordu klauzula WHERE oraz jak powinna być przeprowadzona aktualizacja.

•	Właściwość VisibleValue (obiekty Recordset) — Zwraca wartość pamiętaną obecnie w bazie danych, która jest nowsza od wartości właściwości OriginalValue, jak to określił konflikt aktualizacji grupowej.

Nowe możliwości ODBCDirect

Połączenia z serwerami

Nowy obiekt Connection, dostępny tylko w modelu obiektów ODBCDirect, zawiera informacje o połączeniu ze źródłem danych ODBC, takie jak nazwa serwera, nazwa źródła danych i inne. Jest on podobny do obiektu Database, i dla użytkownika, który kiedykolwiek otwierał obiekt Database dla źródła danych ODBC, nie jest czymś nowym. W rzeczywistości obiekt Connection i obiekt Database reprezentują różne odwołania do tego samego obiektu, a nowe właściwości każdego z tych typów obiektów pozwalają na uzyskanie odwołania do drugiego, odpowiadającego mu obiektu. Upraszcza to konwersję istniejącej aplikacji klienta ODBC korzystającej z Microsoft Jet na korzystającą z ODBCDirect.

Aktualizacje grupowe

Dla aplikacji klienta wymagających pracy z kursorem bez blokowania na serwerze lub bez potrzeby aktualizacji po jednym rekordzie naraz dostępna jest biblioteka aktualizacji grupowej. Klient przechowuje informacje o aktualizacjach dokonanych na wielu rekordach w lokalnym buforze (czyli "grupie" rekordów), a następnie wydaje polecenie aktualizacji grupy.

Z powodu odstępu czasu pomiędzy otwarciem obiektu Recordset a wysłaniem grupy uaktualnionych danych z tego obiektu Recordset do serwera inni użytkownicy mają możliwość wprowadzenia zmian w oryginalnych danych, tak że wysyłane zmiany "kolidują" ze zmianami wprowadzonymi przez innych użytkowników. Po wykonaniu aktualizacji grupowej użytkownik dysponuje kilkoma nowymi funkcjami pomagającymi określić miejsca wystąpienia kolizji oraz umożliwiającymi rozwiązywanie tych kolizji.

Asynchroniczne wykonywanie metod

Metody Execute, MoveLast, OpenConnection i OpenRecordset mają opcję dbRunAsync. Pozwala to aplikacjom klienta na wykonywanie innych zadań (jak na przykład ładowanie formularzy) podczas wykonywania jednej z tych metod. Możliwe jest także sprawdzanie stanu zadania i ewentualne zakończenie zadania asynchronicznego.

Obsługa kursorów ODBC po stronie klienta

Cztery różne typy obiektów Recordset obsługują następujące typy kursorów ODBC:

Kursor ODBC	Typ obiektu Recordset
zmienny	dbOpenDynamic (nowy w DAO 3.5)
dynamiczny	dbOpenDynaset
progresywny	dbOpenForwardOnly (nowy w DAO 3.5)
statyczny	dbOpenSnapshot
Nowe interfejsy DAO 3.5 dla aparatu bazy danych Microsoft Jet

•	Metoda PopulatePartial (obiekty Database) — Synchronizuje zmiany dokonane w replice częściowej z repliką pełną, czyści wszystkie rekordy w replice częściowej, a następnie ponownie wypełnia replikę częściową bazując na bieżących filtrach repliki.

•	Metoda SetOption (obiekt DBEngine) — Przesłania wartości rejestrów dotyczące aparatu bazy danych Microsoft Jet na czas istnienia bieżącego wystąpienia DAO.

•	Właściwość FieldSize (obiekty Field) — Występuje zamiast metody FieldSize. Składniowo ich użycie jest identyczne, dzięki czemu modyfikacja ta nie wymaga zmian w istniejących programach.

•	Właściwość MaxRecords (obiekty QueryDef) — Ustawia lub zwraca maksymalną liczbę rekordów zwracanych przez kwerendę.

•	Właściwość ReplicaFilter (obiekty TableDef) — Zwraca wartość wskazującą, który podzbiór rekordów jest replikowany z repliki pełnej do tej tabeli.

•	Właściwość PartialReplica (obiekty Relation) — Wskazuje, który obiekt Relation należy uwzględnić podczas wypełniania repliki częściowej z repliki pełnej.

Nowe możliwości aparatu bazy danych Microsoft Jet

Częściowa replikacja

Wersja 3.5 aparatu bazy danych Microsoft Jet pozwala użytkownikom na replikowanie części tabeli zamiast całej tabeli (dopuszczalne są jedynie ograniczenia na wiersze, a nie na kolumny). Istnieją dwa typy filtrów stosowanych w replikach częściowych — filtr typu Boolean I filtr oparty na związku. Filtry typu Boolean wybierają jedynie te wiersze, które spełniają określone kryterium, aby ograniczyć w ten sposób replikowane wiersze tabeli. W DAO filtr tego typu jest reprezentowany przez właściwość ReplicaFilter obiektu TableDef. Filtry oparte na związku do ograniczenia liczby replikowanych wierszy tabeli wymuszają związek między częściowo replikowanymi tabelami. W DAO istnieje możliwość ustawienia właściwości PartialReplica obiektu Relation, dzięki czemu ten obiekt Relation może być wykorzystany w replice częściowej.

Nowy typ obiektów Recordset

W DAO 3.5 dla metody OpenRecordset dostępny jest nowa wartość argumentu typ: dbOpenForwardOnly. Nowy typ obiektów Recordset zachowuje się w ten sam sposób, co znany z wersji 3.0 DAO obiekt Recordset typu utrwalonego otwarty z opcją dbForwardOnly.

Przesłanianie rejestru w czasie wykonywania programu

Nowa metoda SetOption pozwala na przesłonięcie ustawień rejestru dotyczących aparatu Microsoft Jet na czas wykonywania programu. Umożliwia to precyzyjne dostrojenie wydajności przetwarzania kwerend przez aparat Microsoft Jet, ustawienie limitów czasu i innych parametrów.


Możliwości poprzednich wersji DAO
Możliwości z poprzednich wersji DAO

Programy Microsoft Access wersja 1.x i 2.0 oraz Microsoft Visual Basic wersja 3.0 wykorzystują wcześniejsze wersje biblioteki DAO. Niektóre obiekty, metody właściwości i instrukcje pochodzące z wcześniejszych wersji zostały uznane za "przestarzałe", ale wciąż są one obsługiwane celem zachowania zgodności z istniejącymi programami użytkowymi.

Poniżej przedstawiono listę metod, właściwości, obiektów i instrukcji biblioteki DAO, które zostały zastąpione bardziej efektywnymi, elastyczniejszymi i łatwiejszymi w użyciu cechami. Każda cecha z poniższej listy posiada odpowiednią cechę zastępczą.

Cecha przestarzała	Cecha zastępcza
Wszystkie metody CreateDynaset	Metoda OpenRecordset
Wszystkie metody CreateSnapshot	Metoda OpenRecordset
Wszystkie metody ListFields	Kolekcja Fields
Wszystkie metody ListIndexes	Kolekcja Indexes
Instrukcja CompactDatabase	Metoda DBEngine.CompactDatabase
Instrukcja CreateDatabase	Metoda DBEngine.CreateDatabase
Metoda DBEngine.FreeLocks	Metoda DBEngine.Idle
Metoda DBEngine.SetDefaultWorkspace	Właściwości DBEngine.DefaultUser i DBEngine.Password
Metoda DBEngine.SetDataAccessOption	Właściwość DBEngine.IniPath
Metoda Database.BeginTrans	Metoda Workspace.BeginTrans
Metoda Database.CommitTrans	Metoda Workspace.CommitTrans
Metoda Database.Rollback	Metoda Workspace.Rollback
Metoda Database.DeleteQuerydef	Metoda Delete
Metoda Database.ExecuteSQL	Metoda Execute
Metoda Database.ListTables	Kolekcja Tabledefs
Metoda Database.OpenQuerydef	Kolekcja Querydefs
Metoda Database.OpenTable	Metoda OpenRecordset
Metoda FieldSize	Właściwość FieldSize
Właściwość Index.Fields	Kolekcja Index.Fields
Instrukcja OpenDatabase	Metoda DBEngine.OpenDatabase
Metoda Querydef.ListParameters	Kolekcja Parameters
Obiekt Snapshot	Obiekt Recordset
Obiekt Dynaset	Obiekt Recordset
Obiekt Table	Obiekt Recordset


Container - obiekt (DAO)
Container - obiekt

Obiekt Container grupuje obiekty Document podobnego typu.

Użycie

Każdy obiekt Database posiada kolekcję Containers, zawierającą wbudowane obiekty Container. Aplikacje mogą definiować własne typy dokumentów oraz odpowiadające im kontenery (tylko w bazach danych Microsoft Jet); jednak takie obiekty nie zawsze mogą współpracować z DAO.

Niektóre z obiektów Container są zdefiniowane przez aparat bazy danych Microsoft Jet, podczas gdy inne mogą być definiowane przez inne aplikacje. Poniższa tabela zawiera listę nazw wszystkich obiektów Container zdefiniowanych przez aparat bazy danych Microsoft Jet oraz typów przechowywanych w nich danych.

Nazwa kontenera	Przechowuje dane dotyczące
Databases	zapisanych baz danych
Tables	zapisanych tabeli i kwerend
Relations	zapisanych związków
Uwaga   Nie należy mylić obiektów Container umieszczonych w powyższej tabeli z kolekcjami o takich samych nazwach. Obiekt bazy danych Container odnosi się do wszystkich zapisanych obiektów bazy danych, a kolekcja Databases tylko do obiektów bazy danych otwartych w konkretnym obszarze roboczym.

Każdy obiekt Container posiada kolekcję Documents, zawierającą obiekty Document, które opisują wystąpienia wbudowanych obiektów typu określonego przez Container. Obiekt Container jest zazwyczaj wykorzystywany jako bezpośrednie łącze umożliwiające dostęp do danych przechowywanych w obiekcie Document. Kolekcja Containers może być również wykorzystana do ustawienia zabezpieczenia dla wszystkich obiektów Document danego typu.

Dla istniejącego obiektu Container można:

•	Odczytać wstępnie zdefiniowaną nazwę obiektu Container, wykorzystując jego właściwość Name.

•	Ustawić lub odczytać właściciela obiektu Container, wykorzystując właściwość Owner. Aby ustawić właściwość Owner, należy mieć uprawnienia do zapisu dla tego obiektu Container, a właściwość ta musi być ustawiana na nazwę istniejącego obiektu User lub Group.

•	Ustawić uprawnienia dostępu do obiektu Container, wykorzystując właściwości Permissions i UserName. Ustawienia tych uprawnień są dziedziczone przez każdy obiekt Document utworzony w kolekcji Documents obiektu Container.

Ponieważ obiekty Container są wbudowane, tworzenie nowych lub kasowanie istniejących obiektów Container nie jest możliwe.

Aby odwołać się do obiektu Container w kolekcji poprzez jego numer porządkowy lub ustawienia właściwości Name, należy użyć jednej z następujących form składniowych:

Containers(0)

Containers("nazwa")

Containers![nazwa]


Containers - kolekcja (DAO)
Containers - kolekcja

Kolekcja Containers zawiera wszystkie obiekty typu Container, które są zdefiniowane w bazie danych (tylko w bazach danych Microsoft Jet).

Użycie

Każdy obiekt Database posiada kolekcję Containers złożoną z wbudowanych obiektów Container. Niektóre obiekty Container są zdefiniowane przez aparat bazy danych Microsoft Jet podczas gdy inne mogą być zdefiniowane przez inne aplikacje.


Podsumowanie informacji o obiekcie Container i kolekcji Containers (DAO)
Podsumowanie informacji o obiekcie Container i kolekcji Containers

Obiekt Container

Obiekt Container nie zawiera żadnej metody; zawiera natomiast następujące kolekcje i właściwości:

Kolekcje

Documents (domyślna)

Properties

Właściwości

AllPermissions

Inherit

Name

Owner

Permissions

UserName

Kolekcja Containers

Kolekcja Containers występuje w każdym obiekcie Database w bazie danych Microsoft Jet i zawiera jedną metodę i jedną właściwość:

Metoda

Refresh

Właściwość

Count


Database - obiekt (DAO)
Database - obiekt

Obiekt Database reprezentuje otwartą bazę danych.

Użycie

Obiekt Database oraz jego metody i właściwości należy wykorzystywać do wykonywania działań na otwartej bazie danych. Dla bazy danych dowolnego typu można:

•	Uruchomić kwerendę funkcjonalną, wykorzystując metodę Execute.

•	Nawiązać połączenie ze źródłem danych ODBC, ustawiając właściwość Connect.

•	Ograniczyć czas oczekiwania na wykonanie kwerendy dotyczącej źródła danych ODBC, ustawiając właściwość QueryTimeout.

•	Określić maksymalną liczbę rekordów, które zostały zmienione przez kwerendę funkcjonalną, wykorzystując właściwość RecordsAffected.

•	Wykonać kwerendę wybierającą i utworzyć obiekt Recordset, wykorzystując metodę OpenRecordset.

•	Określić, w której wersji aparatu bazy danych została utworzona konkretna baza danych, wykorzystując właściwość Version.

W przypadku bazy danych Microsoft Jet (plik .mdb), do wykonywania działań na obiekcie Database, takich jak tworzenie, modyfikacja lub odczytywanie danych dotyczących jego tabel, kwerend i związków, można również wykorzystywać inne metody, właściwości i kolekcje. Można na przykład:

•	Utworzyć tabele i związki, wykorzystując odpowiednio metody CreateTableDef i CreateRelation.

•	Utworzyć nowe właściwości Database, wykorzystując metodę CreateProperty.

•	Utworzyć obiekt trwały lub tymczasową kwerendę, wykorzystując metodę CreateQueryDef.

•	Utworzyć i zsynchronizować pełne lub częściowe repliki bazy danych, wykorzystując metody MakeReplica, Synchronize i PopulatePartial.

•	Określić alfabetyczny porządek sortowania dla pól znakowych w różnych językach, ustawiając właściwość CollatingOrder.

W obszarze roboczym ODBCDirect można:

•	Uzyskać odwołanie do obiektu Connection, odpowiadającego obiektowi Database, wykorzystując właściwość Connection.

Uwaga   Pełną listę metod, właściwości i kolekcji dostępnych w obiekcie Database w obszarze roboczym Microsoft Jet lub ODBCDirect można znaleźć pod hasłem Podsumowanie informacji.

Aby utworzyć trwały obiekt Database, który zostanie automatycznie dodany do kolekcji Databases, a następnie zapisany na dysk, należy użyć metody CreateDatabase.

Jeśli wykorzystywana jest metoda OpenDatabase, określenie obiektu DBEngine nie jest konieczne.

Otwarcie bazy danych z tabelami połączonymi nie ustanawia automatycznie łączy do określonych plików zewnętrznych lub do źródła danych ODBC dołączonego do aparatu Microsoft Jet. Należy odwołać się do obiektów TableDef lub Field odpowiedniej tabeli lub otworzyć obiekt Recordset. Jeśli ustanowienie połączeń do tych tabel nie jest możliwe, wystąpi błąd przechwytywalny. Przyczyną może być również brak uprawnień dostępu do bazy danych lub otwarcie bazy danych przez innego użytkownika w trybie wyłączności. W takich przypadkach również wygenerowany zostanie błąd przechwytywalny.

Wykorzystując metodę OpenDatabase, zewnętrzną bazę danych (taką jak FoxPro, dBASE i Paradox) można otworzyć bezpośrednio, zamiast otwierania bazy danych Microsoft Jet, posiadającej łącza do tabel takiej bazy danych.

Uwaga   Nie jest wskazane otwieranie obiektu Database bezpośrednio w połączonym z aparatem Microsoft Jet źródle danych ODBC, takim jak Microsoft SQL Server, ponieważ wydajność kwerendy jest mniejsza niż przy wykorzystywaniu tabel połączonych. Jakkolwiek przy otwieraniu obiektu Database bezpośrednio w zewnętrznym pliku bazy danych ISAM, takiej jak FoxPro, Paradox i innej, problem wydajności kwerendy nie istnieje.

Jeśli wykonana zostanie procedura deklarująca obiekt Database, lokalne obiekty Database zostaną zamknięte razem ze wszystkimi otwartymi obiektami Recordset. Wszystkie nie zapisane zmiany będą utracone, a transakcje nie zakończone będą wycofane. Przed zakończeniem działania procedury, która lokalnie deklaruje te zmienne obiektowe, każda aktywna transakcja i edycja powinny być zakończone, a obiekty Recordset i Database zamknięte.

Jeśli w obiekcie Workspace jest wykorzystywana jedna z metod obsługujących transakcje (BeginTrans, CommitTrans lub Rollback), te transakcje zostaną zastosowane do wszystkich baz danych otwartych w tym obiekcie Workspace, z którego był otwarty obiekt Database. Jeśli stosowane transakcje mają być niezależne, należy najpierw otworzyć dodatkowy obiekt Workspace, a następnie otworzyć inny obiekt Database w tym obiekcie Workspace.

Uwaga   To samo źródło danych można otworzyć więcej niż raz, tworząc powtarzające się nazwy w kolekcji Databases. Należy przypisać obiekty Database do zmiennych obiektowych i odwoływać się do nich poprzez nazwę zmiennej.


Databases - kolekcja (DAO)
Databases - kolekcja

Kolekcja Databases zawiera wszystkie otwarte lub utworzone w obiekcie Workspace obiekty Database.

Użycie

Jeśli jest otwierany istniejący obiekt Database lub tworzony nowy z obiektu Workspace, jest on automatycznie dodawany do kolekcji Databases. Po zamknięciu obiektu Database za pomocą metody Close jest on usuwany z kolekcji Databases, ale nie jest kasowany z dysku. Przed zamknięciem obiektu Database należy zamknąć wszystkie otwarte obiekty Recordset.

W obszarze roboczym Microsoft Jet ustawiana dla bazy danych właściwość Name jest ciągiem znaków oznaczającym ścieżkę pliku bazy danych. W obszarze roboczym ODBCDirect właściwość Name jest nazwą odpowiedniego obiektu Connection.

Aby odwołać się do obiektu Database w kolekcji poprzez jego numer porządkowy lub ustawienie właściwości Name, należy użyć jednej z następujących form składniowych:

Databases(0)

Databases("nazwa")

Databases![nazwa]

Uwaga   To samego źródło danych lub tę samą bazę danych można otworzyć więcej niż raz, tworząc powtarzające się nazwy w kolekcji Databases. Należy przypisać obiekty Database do zmiennych obiektowych i odwoływać się do nich poprzez nazwę zmiennej.


Podsumowanie informacji o obiekcie Database i kolekcji Databases (DAO)
Podsumowanie informacji o obiekcie Database i kolekcji Databases

Obiekt Database

Obiekt Database zawiera następujące kolekcje, metody i właściwości:

Legenda:

Cecha dostępna jedynie w obszarach roboczych Microsoft Jet.

Cecha dostępna jedynie w obszarach roboczych ODBCDirect.

Kolekcje

Containers

Properties

QueryDefs

Recordsets (domyślna dla [image])

Relations

TableDefs (domyślna dla [image])

Metody

Close

CreateProperty

CreateQueryDef

CreateRelation

CreateTableDef

Execute

MakeReplica

NewPassword

OpenRecordset

PopulatePartial

Synchronize

Właściwości

CollatingOrder

Connect

Connection

DesignMasterID

Name

QueryTimeout

RecordsAffected

Replicable (definiowana przez użytkownika)

ReplicaID

Updatable

V1xNullBehavior

Version

Kolekcja Databases

Kolekcja Databases występuje w każdym obiekcie Workspace i zawiera jedną metodę i jedną właściwość:

Metoda

Refresh

Właściwość

Count


DBEngine - obiekt (DAO)
DBEngine - obiekt

Obiekt DBEngine jest w obiektowym modelu DAO obiektem najwyższego poziomu.

Użycie

Obiekt DBEngine zawiera i kontroluje wszystkie inne obiekty w hierarchii obiektów DAO. Nie można utworzyć dodatkowych obiektów DBEngine. Obiekt DBEngine nie jest elementem żadnej kolekcji.

Uwaga   Odwoływanie się do źródła danych ODBC, realizowane bezpośrednio poprzez DAO, jest nazywane “obszarem roboczym ODBCDirect", w odróżnieniu od źródła danych ODBC, do którego odwoływanie się nie następuje bezpośrednio, ale poprzez aparat bazy danych Microsoft Jet z wykorzystaniem "obszaru roboczego Microsoft Jet". Każda metoda dostępu do danych ODBC wymaga jednego z dwóch typów obiektu Workspace. W celu wybrania domyślnego typu obiektu Workspace, który będzie tworzony z obiektu DBEngine, należy ustawić właściwość DefaultType. Typ obiektu Workspace i skojarzone z nim źródło danych określają, których obiektów, metod i właściwości można używać.

Dla każdego typu bazy danych i połączenia można:

•	Uzyskać numer wersji DAO, wykorzystując właściwość Version.

•	Uzyskać lub ustawić limit czasu logowania dla ODBC, wykorzystując właściwość LoginTimeout, oraz dostarczyć informacje dotyczące ODBC do aparatu bazy danych Microsoft Jet, wykorzystując metodę RegisterDatabase. Te własności można wykorzystywać niezależnie od tego, czy wykorzystywane jest połączenie do źródła danych ODBC poprzez aparat Microsoft Jet czy poprzez obszar roboczy ODBCDirect.

•	Ustawić domyślny typ połączenia z bazą danych, wykorzystując właściwość DefaultType, tak aby tworzone następnie obiekty Workspace używały aparatu Microsoft Jet lub ODBCDirect.

•	Ustawić identyfikator użytkownika i hasło dla domyślnego obiektu Workspace, wykorzystując właściwości DefaultPassword i DefaultUser.

•	Utworzyć nowy obiekt Workspace, wykorzystując metodę CreateWorkspace. Aby przesłonić ustawienia właściwości DefaultType, DefaultPassword i DefaultUser, można użyć argumentów opcjonalnych.

•	Otworzyć bazę danych w domyślnym obiekcie Workspace, wykorzystując metodę OpenDatabase, i kontrolować transakcje w tym obiekcie, wykorzystując metody BeginTrans, Commit i Rollback.

•	Odwoływać się do konkretnych obiektów Workspace, wykorzystując kolekcję Workspaces.

•	Sprawdzać szczegóły dotyczące błędów dostępu do danych, wykorzystując kolekcję Errors.

Pozostałe właściwości i metody są dostępne tylko przy korzystaniu z DAO za pośrednictwem aparatu bazy danych Microsoft Jet. Można je wykorzystywać w celu sterowania działaniem aparatu bazy danych Microsoft Jet, operowania na jego właściwościach i wykonywania zadań na obiektach tymczasowych, które nie są elementami kolekcji. Można na przykład:

•	Utworzyć nowy obiekt Database aparatu Microsoft Jet, wykorzystując metodę CreateDatabase.

•	Ustawić aparat bazy danych Microsoft Jet w tryb zakończenia wszystkich aktywnych zadań, wykorzystując metodę Idle.

•	Zarządzać plikami bazy danych, wykorzystując metody CompactDatabase i RepairDatabase.

•	Określić położenie informacji dla Rejestru Windows dotyczących aparatu Microsoft Jet i położenie pliku informacyjnego grup roboczych Microsoft Jet, wykorzystując odpowiednio właściwości IniPath i SystemDB. Metoda SetOption umożliwia przesłonięcie ustawień Rejestru Windows dotyczących aparatu bazy danych Microsoft Jet.

Zmiana ustawień właściwości DefaultType i IniPath będzie widoczna dopiero dla następnych obiektów Workspace.

Uwaga   Pełną listę metod, właściwości i kolekcji dostępnych w obiekcie DBEngine można znaleźć pod hasłem Podsumowanie informacji.

Aby odwołać się do kolekcji należącej do obiektu DBEngine albo do metody lub właściwości stosowanych w stosunku do tego obiektu, należy użyć następującej składni:

[DBEngine.][kolekcja | metoda | właściwość]


Podsumowanie informacji o obiekcie DBEngine (DAO)
Podsumowanie informacji o obiekcie DBEngine

Obiekt DBEngine zawiera następujące kolekcje, metody i właściwości:

Legenda:

Cecha dostępna jedynie w obszarach roboczych Microsoft Jet.

Cecha dostępna jedynie w obszarach roboczych ODBCDirect.

Kolekcje

Errors

Properties

Workspaces (domyślna)

Metody

BeginTrans

CommitTrans

CompactDatabase

CreateDatabase

CreateWorkspace

Idle

OpenConnection

OpenDatabase

RegisterDatabase

RepairDatabase

Rollback

SetOption

Właściwości

DefaultPassword

DefaultType

DefaultUser

IniPath

LoginTimeout

SystemDB

Version


Document - obiekt (DAO)
Document - obiekt

Obiekt Document zawiera informacje o wystąpieniu obiektu. Obiektem może być baza danych, zapisana tabela, kwerenda lub związek (tylko w bazach danych Microsoft Jet).

Użycie

Każdy obiekt Container posiada kolekcję Documents zawierającą obiekty Document opisujące wystąpienia wbudowanych obiektów typu określonego przez Container. Poniższa tabela zawiera listę typów obiektów opisywanych przez każdy obiekt Document, nazwę odpowiadającego mu obiektu Container, oraz typ informacji przechowywanych w obiekcie Document.

Document	Container	Przechowuje dane dotyczące
Baza danych	Databases	zapisanej bazy danych
Tabela lub kwerenda	Tables	zapisanej tabeli lub kwerendy
Związek	Relations	zapisanego związku
Uwaga   Nie należy mylić obiektów Container umieszczonych w powyższej tabeli z kolekcjami o takiej samej nazwie. Obiekty Container o nazwie Databases odwołują się do wszystkich zapisanych obiektów bazy danych, a kolekcja Databases odwołuje się tylko do tych obiektów bazy danych, które są otwarte w konkretnym obszarze roboczym.

Dla obiektu Document można:

•	Uzyskać nazwę obiektu nadaną w chwili jego utworzenia przez użytkownika lub aparat bazy danych Microsoft Jet, wykorzystując właściwość Name.

•	Uzyskać nazwę obiektu Container zawierającego dany obiekt Document, wykorzystując właściwość Container.

•	Ustawić lub odczytać właściciela obiektu, wykorzystując właściwość Owner. Aby ustawić właściwość Owner, należy posiadać uprawnienia do zapisu w stosunku do danego obiektu Document, a właściwość ta musi być ustawiana na nazwę istniejącego obiektu User lub Group.

•	Ustawić lub odczytać uprawnienia dostępu użytkownika lub grupy do określonego obiektu, wykorzystując właściwości UserName lub Permissions. Ustawianie tych właściwości wymaga uprawnienia do zapisu w stosunku do danego obiektu Document, a właściwości te muszą być ustawiane na nazwę istniejącego obiektu User lub Group.

•	Odczytać datę i godzinę utworzenia i ostatniej modyfikacji obiektu Document, wykorzystując właściwości DateCreated i LastUpdated.

Ponieważ obiekt Document odpowiada istniejącemu obiektowi, nie można utworzyć nowych obiektów Document lub skasować już istniejących. Aby odwołać się do obiektu Document w kolekcji poprzez jego numer porządkowy lub poprzez ustawienie jego właściwości Name, należy użyć jednej z następujących form składniowych:

Documents(0)

Documents("nazwa")

Documents![nazwa]


Documents - kolekcja (DAO)
Documents - kolekcja

Kolekcja Documents zawiera wszystkie obiekty Document dla określonego typu obiektów (tylko w bazach danych Microsoft Jet).

Użycie

Każdy obiekt Container posiada kolekcję Documents zawierającą obiekty Document opisujące wystąpienia wbudowanych obiektów typu określonego przez Container.

Aby odwołać się do obiektu Document w kolekcji poprzez jego numer porządkowy lub poprzez ustawienie jego właściwości Name, należy użyć jednej z następujących form składniowych:

Documents(0)

Documents("nazwa")

Documents![nazwa]


Podsumowanie informacji o obiekcie Document i kolekcji Documents (DAO)
Podsumowanie informacji o obiekcie Document i kolekcji Documents

Obiekt Document

Obiekt Document zawiera jedną kolekcję i jedną metodę, oraz podane niżej właściwości:

Kolekcja

Properties

Metoda

CreateProperty

Właściwości

AllPermissions

Container

DateCreated

KeepLocal (definiowana przez użytkownika)

LastUpdated

Name

Owner

Permissions

Replicable (definiowana przez użytkownika)

UserName

Kolekcja Documents

Kolekcja Documents występuje w każdym obiekcie Container i zawiera jedną metodę i jedną właściwość.

Metoda

Refresh

Właściwość

Count


Recordset typu zestaw dynamiczny - obiekt (DAO)
Recordset typu zestaw dynamiczny - obiekt

Obiekt Recordset typu zestaw dynamiczny jest dynamicznym zestawem rekordów, który może zawierać pola z jednej lub wielu tabel albo kwerend i który może być aktualizowany. W bazie danych ODBCDirect obiekt Recordset typu zestaw dynamiczny odpowiada kursorowi kluczowemu ODBC.

Użycie

Obiekt Recordset typu zestaw dynamiczny jest typem obiektu Recordset, który można wykorzystywać do operowania na danych w odpowiadającej mu tabeli lub tabelach bazy danych.

Różni się on od obiektu Recordset typu utrwalonego , ponieważ dynamiczny zestaw rekordów dla każdego rekordu przechowuje tylko klucz podstawowy, a nie faktyczne dane. W rezultacie dynamiczny zestaw rekordów, w odróżnieniu od utrwalonego zestawu rekordów, jest aktualizowany zgodnie ze zmianami dokonywanymi w źródle danych. Podobnie jak obiekt Recordset typu tabela, dynamiczny zestaw rekordów pobiera cały rekord tylko w celu przeprowadzenia edycji lub wyświetlenia.

Aby utworzyć obiekt Recordset typu zestaw dynamiczny, należy użyć metody OpenRecordset na otwartej bazie danych, w stosunku do innego obiektu Recordset typu zestaw dynamiczny lub utrwalonego, na obiekcie QueryDef lub obiekcie TableDef. (Otwarcie obiektów Recordset z innych obiektów Recordset lub TableDef jest możliwe tylko w obszarach roboczych Microsoft Jet.)

Jeśli potrzebny jest obiekt Recordset typu zestaw dynamiczny, a aparat bazy danych Microsoft Jet nie może uzyskać dostępu do rekordów w trybie odczytu i zapisu, aparat bazy danych Microsoft Jet może utworzyć obiekt Recordset typu zestaw dynamiczny przeznaczony tylko do odczytu.

Zmiany wykonane przez użytkownika podczas aktualizacji danych wpływają na tabele bazowe. Dlatego bieżące dane stają się dostępne dla aplikacji po zmianie położenia rekordu bieżącego. W wielodostępnej bazie danych obiekt Recordset typu zestaw dynamiczny może być otwarty przez kilku użytkowników odwołujących się do tych samych rekordów. Ponieważ obiekt Recordset typu zestaw dynamiczny może się zmieniać, po wykonaniu przez jednego użytkownika zmian w rekordzie inni użytkownicy natychmiast mają dostęp do zmienionych danych. Jeśli jeden z użytkowników doda rekord, nie będzie on widoczny dla innych użytkowników, aż do momentu użycia metody Requery na odpowiednim obiekcie Recordset. Jeśli użytkownik usunie rekord, inni użytkownicy zostaną o tym powiadomieni w momencie próby dostępu do tego rekordu.

Rekordy dodane do bazy danych nie będą częścią obiektu Recordset typu zestaw dynamiczny, dopóki nie zostaną do niego dodane za pomocą metod AddNew i Update. Jeśli na przykład do dodania rekordów wykorzystywana jest kwerenda funkcjonalna zawierająca instrukcję SQL INSERT TO, nowe rekordy nie zostaną włączone do obiektu Recordset typu zestaw dynamiczny, dopóki nie zostanie użyta metoda Requery lub dopóki obiekt Recordset nie zostanie przebudowany za pomocą metody OpenRecordset.

Aby zachować integralność danych, aparat bazy danych Microsoft Jet może zablokować obiekty Recordset typu zestaw dynamiczny i typu tabela na czas operacji Edit (blokowanie pesymistyczne) lub operacji Update (blokowanie optymistyczne), dzięki czemu tylko jeden użytkownik jednocześnie może aktualizować konkretny rekord. Jeśli aparat bazy danych Microsoft Jet blokuje rekord, blokowana jest również cała strona o rozmiarze 2 KB, zawierająca ten rekord.

Optymistyczne i pesymistyczne blokowanie można również stosować dla tabel, do których dostęp nie jest realizowany poprzez ODBC. Jeśli dostęp do zewnętrznych tabel jest realizowany przy użyciu ODBC za pośrednictwem obszaru roboczego Microsoft Jet, należy zawsze stosować blokowanie optymistyczne. Warunki blokowania podczas edycji są określone przez właściwość LockEdits i parametr blokada metody OpenRecordset.

Nie wszystkie pola mogą być aktualizowane we wszystkich obiektach Recordset typu zestaw dynamiczny. Aby określić, czy konkretne pole może być aktualizowane, należy sprawdzić ustawienie właściwości DataUpdatable odpowiedniego obiektu Field.

Obiekt Recordset typu zestaw dynamiczny nie może być aktualizowany, jeśli:

•	Nie ma unikatowego indeksu dla tabeli lub tabel bazy danych Paradox lub ODBC.

•	Strona danych jest zablokowana przez innego użytkownika.

•	Rekord został zmieniony od momentu wykonania ostatniego odczytu przez użytkownika.

•	Użytkownik nie posiada uprawnień.

•	Jedna lub kilka tabel lub pól jest przeznaczonych tylko do odczytu.

•	Baza danych jest otwarta w trybie tylko do odczytu.

•	Obiekt Recordset został utworzony z wielu tabel bez wykorzystania instrukcji JOIN lub kwerenda była zbyt złożona.

Kolejność danych w obiekcie Recordset typu zestaw dynamiczny nie jest określona w żaden sposób. Jeśli istnieje potrzeba uporządkowania danych, należy w celu utworzenia obiektu Recordset użyć instrukcji SQL z klauzulą ORDER BY. W celu określenia filtru dla rekordów można również wykorzystać klauzulę WHERE, tak aby do obiektu Recordset zostały dodane tylko wybrane rekordy. Wykorzystanie w ten sposób instrukcji SQL do wyboru określonych rekordów I ich uporządkowania jest efektywniejsze niż wykorzystanie właściwości Filter i Sort.


Error - obiekt (DAO)
Error - obiekt

Obiekt Error zawiera szczegółowe informacje o błędach dostępu do danych, z których każdy ma związek z pojedynczą operacją odnoszącą się do obiektu DAO.

Użycie

Każda operacja dotycząca obiektu DAO może spowodować wystąpienie jednego lub kilku błędów. Na przykład, w rezultacie wywołania skierowanego do serwera ODBC mogą wystąpić: błąd serwera bazy danych, błąd ODBC i błąd DAO. Każdy taki błąd powoduje umieszczenie obiektu Error w kolekcji Errors obiektu DBEngine. Dlatego też wynikiem pojedynczego zdarzenia może być pojawienie się kilku obiektów Error w kolekcji Errors.

Jeśli kolejna operacja DAO wygeneruje błąd, zawartość kolekcji Errors jest usuwana, a następnie w kolekcji Errors jest umieszczany jeden lub kilka nowych obiektów Error. Operacje DAO nie generujące błędu nie mają wpływu na kolekcję Errors.

Zestaw obiektów Error w kolekcji Errors opisuje jeden błąd. Pierwszy obiekt Error reprezentuje błąd najniższego poziomu (błąd pierwotny), kolejny obiekt reprezentuje błąd wyższego poziomu itd. Jeśli na przykład podczas próby otwarcia obiektu Recordset wystąpi błąd ODBC, pierwszy obiekt Error  — Errors(0) — będzie zawierał błąd ODBC najniższego poziomu. Kolejne błędy będą błędami ODBC zwracanymi przez różne warstwy ODBC. W tym przypadku menedżer sterowników ODBC i, być może, sam sterownik zwrócą różne obiekty Error. Ostatni obiekt Error  — Errors.Count-1 — zawiera błąd DAO oznaczający, że obiekt nie mógł zostać otwarty.

Analiza błędów w kolekcji Errors pozwala programom obsługi błędów na bardziej precyzyjne określenie przyczyny i pochodzenia błędu oraz podjęcie odpowiednich kroków w celu usunięcia jego skutków. W obydwu obszarach roboczych: Microsoft Jet oraz ODBCDirect, w celu określenia szczegółów wystąpienia każdego błędu można odczytać właściwości obiektu Error, włączając w to:

•	Właściwość Description zawierającą tekst komunikatu o błędzie, który będzie wyświetlony na ekranie, jeśli błąd nie zostanie przechwycony.

•	Właściwość Number zawierającą wartość stałej błędu (typ całkowity Long).

•	Właściwość Source identyfikującą obiekt, który wywołał błąd. Jest ona szczególnie użyteczna w sytuacji, w której po wysłaniu żądania do źródła danych ODBC w kolekcji Errors znajduje się kilka obiektów Error.

•	Właściwości HelpFile i HelpContext oznaczające, odpowiednio, plik Pomocy systemu Microsoft Windows i temat Pomocy, właściwe dla błędu (jeśli istnieją).

Uwaga   Jeśli w programie napisanym w języku Microsoft Visual Basic for Applications (VBA) do utworzenia obiektu zostało użyte słowo kluczowe New, a następnie przed dodaniem obiektu do jakiejś kolekcji obiekt ten spowodował błąd, kolekcja Errors obiektu DBEngine nie będzie zawierała pozycji dla błędu odnoszącego się do tego obiektu, ponieważ nowy obiekt nie został skojarzony z obiektem DBEngine. Jednak informacje dotyczące tego błędu są dostępne w obiekcie Err VBA.

Jeśli istnieje możliwość wystąpienia błędu dostępu do danych, kod obsługujący błędy VBA powinien sprawdzać kolekcję Errors. Jeśli w programie zastosowano scentralizowaną obsługę błędów, należy w celu określenia poprawności informacji w kolekcji Errors sprawdzić obiekt Err VBA. Jeśli właściwość Number ostatniego elementu kolekcji Errors (DBEngine.Errors.Count - 1) i wartość obiektu Err są sobie równe, można użyć ciągu instrukcji Select Case do zidentyfikowania konkretnego błędu lub błędów DAO. Jeśli wartości te nie są sobie równe, należy użyć w stosunku do kolekcji Errors metody Refresh.


Errors - kolekcja (DAO)
Errors - kolekcja

Kolekcja Errors zawiera wszystkie przechowywane obiekty Error, z których każdy ma związek z pojedynczą operacją odnoszącą się do obiektu DAO.

Użycie

Każda operacja dotycząca obiektu DAO może spowodować wystąpienie jednego lub kilku błędów. Każdy taki błąd powoduje umieszczenie jednego lub kilku obiektów Error w kolekcji Errors obiektu DBEngine. Jeśli kolejna operacja DAO wygeneruje błąd, zawartość kolekcji Errors jest usuwana, a w kolekcji Errors jest umieszczany nowy zestaw obiektów Error. Obiekt o najwyższym numerze w kolekcji Errors (DBEngine.Errors.Count - 1) odpowiada błędowi umieszczonemu przez system Microsoft Visual Basic for Applications (VBA) w obiekcie Err.

Operacje DAO, które nie generują błędów, nie mają wpływu na zawartość kolekcji Errors.

Elementy kolekcji Errors nie są dodawane w taki sposób, jak to się odbywa w innych kolekcjach. Dlatego też dla kolekcji Errors nie są dostępne metody Append i Delete.

Zestaw obiektów Error w kolekcji Errors opisuje jeden błąd. Pierwszy obiekt Error reprezentuje błąd najniższego poziomu (błąd pierwotny), kolejny obiekt reprezentuje błąd wyższego poziomu itd. Jeśli na przykład podczas próby otwarcia obiektu Recordset wystąpi błąd ODBC, pierwszy obiekt Error  — Errors(0) — będzie zawierał błąd ODBC najniższego poziomu. Kolejne błędy będą błędami ODBC zwracanymi przez różne warstwy ODBC. W tym przypadku menedżer sterowników ODBC i, być może, sam sterownik zwrócą różne obiekty Error. Ostatni obiekt Error  — Errors.Count-1 — zawiera błąd DAO oznaczający, że obiekt nie mógł zostać otwarty.

Analiza błędów w kolekcji Errors pozwala programom obsługi błędów na bardziej precyzyjne określenie przyczyny i pochodzenia błędu oraz podjęcie odpowiednich kroków w celu usunięcia jego skutków.

Uwaga   Jeśli do utworzenia obiektu zostało użyte słowo kluczowe New, a następnie przed dodaniem lub podczas dodawania obiektu do jakiejś kolekcji ten obiekt spowodował błąd, kolekcja nie będzie zawierała informacji o błędzie odnoszącym się do tego obiektu, ponieważ nowy obiekt nie został skojarzony z obiektem DBEngine. Jednak informacje dotyczące tego błędu są dostępne w obiekcie Err VBA.


Podsumowanie informacji o obiekcie Error i kolekcji Errors (DAO)
Podsumowanie informacji o obiekcie Error i kolekcji Errors

Obiekt Error

Obiekt Error nie zawiera metod ani kolekcji, natomiast zawiera następujące właściwości:

Właściwości

Description

HelpContext

HelpFile

Number

Source

Kolekcja Errors

Kolekcja Errors występuje w obiekcie DBEngine i zawiera jedną metodę i jedną właściwość:

Metoda

Refresh

Właściwość

Count


Field - obiekt (DAO)
Field - obiekt

Obiekt Field reprezentuje kolumnę danych o wspólnym typie danych i wspólnym zestawie właściwości.

Użycie

Kolekcje Fields obiektów Index, QueryDef, Relation i TableDef zawierają specyfikacje pól reprezentowanych przez te obiekty. Kolekcja Fields obiektu Recordset reprezentuje obiekty Field w wierszu danych (w rekordzie). Obiekty Field w obiekcie Recordset można wykorzystać do odczytu i ustawiania wartości pól w bieżącym rekordzie obiektu Recordset.

W obydwu obszarach roboczych: Microsoft Jet i ODBCDirect,operowanie na polu odbywa się z wykorzystaniem obiektu Field oraz jego właściwości i metod. Można na przykład:

•	Ustawić lub odczytać kolejność prezentacji (numer porządkowy) obiektu Field w kolekcji Fields, wykorzystując właściwość OrdinalPosition. (W bazach danych ODBCDirect ta właściwość jest przeznaczona tylko do odczytu.)

•	Ustawić lub odczytać przechowywane dane, wykorzystując właściwość Value pola w obiekcie Recordset.

•	Odczytać lub ustawić wartość w polu typu obiekt OLE lub Memo obiektu Recordset, wykorzystując metody AppendChunk i GetChunk oraz właściwość FieldSize.

•	Określić typ danych, które mogą być przechowywane w polu, wykorzystując właściwości Type, Size i Attributes.

•	Określić pierwotne źródło danych, wykorzystując właściwości SourceField i SourceTable.

W obszarze roboczym Microsoft Jet można:

•	Odczytać lub ustawić informacje o polu obcym w obiekcie Relation, wykorzystując właściwość ForeignName.

•	Ustawić lub odczytać warunki poprawności, wykorzystując właściwości AllowZeroLength, DefaultValue, Required, ValidateOnSet, ValidationRule lub ValidationText.

•	Ustawić domyślną wartość pola stosowaną przy dodawaniu nowych rekordów, wykorzystując właściwość DefaultValue tego pola w obiekcie TableDef.

W obszarze roboczym ODBCDirect można:

•	Sprawdzić poprawność zakończenia aktualizacji grupowej, wykorzystując  właściwości Value, VisibleValue i OriginalValue.

Uwaga   Pełną listę metod, właściwości i kolekcji dostępnych w obiekcie Field w dowolnej bazie danych lub połączeniu można znaleźć pod hasłem Podsumowanie informacji .

W celu utworzenia nowego obiektu Field w obiekcie Index, TableDef lub Relation należy użyć metody CreateField.

Przy dostępie do obiektu Field jako części obiektu Recordset dane z bieżącego rekordu są dostępne we właściwości Value obiektu Field. Podczas działania na danych z obiektu Recordset zazwyczaj nie należy odwoływać się bezpośrednio do kolekcji Fields. Zamiast tego należy stosować niejawne odwoływanie się do właściwości Value obiektu Field znajdującego się w kolekcji Fields obiektu Recordset.

Aby odwołać się do obiektu Field w kolekcji poprzez jego numer porządkowy lub ustawienie właściwości Name, należy użyć jednej z następujących form składniowych:

Fields(0)

Fields("nazwa")

Fields![nazwa]

Takie same formy składniowe są używane do odwoływania się do właściwości Value obiektu Field tworzonego i dodawanego do kolekcji Fields. Kontekst wywołania określa, czy jest to odwołanie do obiektu Field, czy do właściwości Value obiektu Field.


Fields - kolekcja (DAO)
Fields - kolekcja

Kolekcja Fields zawiera wszystkie przechowywane obiekty Field obiektu Index, QueryDef, Recordset, Relation lub TableDef.

Użycie

Kolekcje Fields obiektów Index, QueryDef, Relation i TableDef zawierają specyfikacje pól reprezentowanych przez te obiekty. Kolekcja Fields obiektu Recordset reprezentuje obiekty Field w wierszu danych (w rekordzie). Obiekty Field w obiekcie Recordset można wykorzystywać do odczytu lub ustawiania wartości pól w bieżącym rekordzie obiektu Recordset.

Aby odwołać się do obiektu Field w kolekcji poprzez jego numer porządkowy lub ustawienie właściwości Name, należy użyć jednej z następujących form składniowych:

Fields(0)

Fields("nazwa")

Fields![nazwa]

Takie same formy składniowe są używane do odwoływania się do właściwości Value obiektu Field tworzonego i dodawanego do kolekcji Fields. Kontekst wywołania określa, czy jest to odwołanie do obiektu Field, czy do właściwości Value obiektu Field.


Podsumowanie informacji o obiekcie Field i kolekcji Fields (DAO)
Podsumowanie informacji o obiekcie Field i kolekcji Fields

Obiekt Field

Obiekt Field zawiera jedną kolekcję oraz podane niżej metody i właściwości.

Legenda:

Cecha dostępna jedynie w obszarach roboczych Microsoft Jet.

Cecha dostępna jedynie w obszarach roboczych ODBCDirect.

Kolekcja

Properties

Metody

Poniższa tabela zawiera wszystkie metody obiektu Field. Typ obiektu, którego kolekcja Fields zawiera dany obiekt Field, określa, które z tych metod są dostępne.

Metoda	Index	QueryDef	Recordset	Relation	TableDef
AppendChunk
CreateProperty
GetChunk
Właściwości

Poniższa tabela zawiera wszystkie właściwości obiektu Field. Typ obiektu, którego kolekcja Fields zawiera dany obiekt Field, określa, które z tych właściwości są dostępne. W przypadku obiektów Field dodanych do kolekcji Fields obiektów Index, Relation i TableDef, wszystkie właściwości są przeznaczone tylko do odczytu.

tylko do odczytu

do odczytu i zapisu

Właściwość	Index	QueryDef	Recordset	Relation	TableDef
AllowZeroLength
Attributes
CollatingOrder
DataUpdatable
DefaultValue
FieldSize
ForeignName
Name
OrdinalPosition
OriginalValue			*
Required
Size
SourceField
SourceTable
Type
ValidateOnSet
ValidationRule
ValidationText
Value
VisibleValue			*
* Właściwości dostępne tylko w obszarze roboczym ODBCDirect, którego właściwość DefaultCursorDriver jest ustawiona na dbUseClientBatchCursor.

Kolekcja Fields

Kolekcja Fields występuje w każdym obiekcie TableDef, QueryDef, Recordset, Relation i Index. Zawiera ona podane niżej metody i jedną właściwość.

Metoda	Index	QueryDef	Recordset	Relation	TableDef
Append
Delete
Refresh
Właściwość	Index	QueryDef	Recordset	Relation	TableDef
Count


Group - obiekt (DAO)
Group - obiekt

Obiekt Group reprezentuje grupę użytkowników, którzy mają wspólne uprawnienia dostępu, podczas gdy obiekt Workspace działa jako chroniona grupa robocza (tylko obszary robocze Microsoft Jet).

Użycie

Nazwy utworzonych obiektów Group mogą posłużyć użytkownikom do nadawania i wymuszania uprawnień dostępu do baz danych, tabel i kwerend. Wykorzystywane do tego są obiekty Document, które reprezentują te obiekty Database, TableDef i QueryDef, z którymi użytkownik aktualnie pracuje.

Za pomocą właściwości obiektu Group można:

•	Odczytać nazwę istniejącego obiektu Group, wykorzystując jego właściwość Name. Odczytanie ustawienia właściwości PID istniejącego obiektu Group nie jest możliwe.

•	Ustawić dane identyfikacyjne nowo utworzonego, nie dołączonego obiektu Group, wykorzystując jego właściwości Name i PID.

Aby dla danego konta użytkownika ustawić przynależność do grupy reprezentowanej przez obiekt Group, można dodać istniejący obiekt Group do kolekcji Groups w obiekcie User. Alternatywnie, aby nadać kontu użytkownika globalne uprawnienia danej grupy, można dodać obiekt User do kolekcji Users w obiekcie Group reprezentującym tę grupę. Jeśli używana jest kolekcja Groups lub Users inna niż ta, do której właśnie został dodany obiekt, może być konieczne użycie metody Refresh w celu odświeżenia tej kolekcji na podstawie aktualnych informacji z bazy danych.

W aparacie bazy danych Microsoft Jet wstępnie zdefiniowano trzy obiekty Group o nazwach Admins, Users i Guests. Aby utworzyć nowy obiekt Group, należy użyć metody CreateGroup w stosunku do obiektu User lub obiektu Workspace.

Aby odwołać się do obiektu Group w kolekcji poprzez jego numer porządkowy lub ustawienie właściwości Name, należy użyć jednej z następujących form składniowych:

Groups(0)

Groups("nazwa")

Groups![nazwa]


Groups - kolekcja (DAO)
Groups - kolekcja

Kolekcja Groups zawiera wszystkie przechowywane obiekty Group obiektu Workspace lub konta użytkownika (tylko obszary robocze Microsoft Jet).

Użycie

Aby dla danego konta użytkownika ustawić przynależność do grupy reprezentowanej przez obiekt Group, można dodać istniejący obiekt Group do kolekcji Groups w obiekcie User. Alternatywnie, aby nadać kontu użytkownika globalne uprawnienia danej grupy, można dodać obiekt User do kolekcji Users w obiekcie Group reprezentującym tę grupę. W każdym przypadku istniejący obiekt Group musi być już elementem kolekcji Groups bieżącego obiektu Workspace. Jeśli używana jest kolekcja Groups lub Users inna niż ta, do której właśnie został dodany obiekt, może być konieczne użycie metody Refresh w celu odświeżenia tej kolekcji na podstawie aktualnych informacji z bazy danych.

Aby odwołać się do obiektu Group w kolekcji poprzez jego numer porządkowy lub ustawienie właściwości Name, należy użyć jednej z następujących form składniowych:

Groups(0)

Groups("nazwa")

Groups![nazwa]


Podsumowanie informacji o obiekcie Group i kolekcji Groups (DAO)
Podsumowanie informacji o obiekcie Group i kolekcji Groups

Obiekt Group

Obiekt Group zawiera jedną metodę oraz podane niżej kolekcje i właściwości.

Kolekcje

Properties

Users (domyślna)

Metoda

CreateUser

Właściwości

Name

PID

Kolekcja Groups

Kolekcja Groups występuje w każdym obiekcie User i obiekcie Workspace typu Microsoft Jet i zawiera jedną właściwość i podane niżej metody.

Metody

Append

Delete

Refresh

Właściwość

Count


Index - obiekt (DAO)
Index - obiekt

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).

Użycie

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.

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 Primary i Unique.

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.

Ważne   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 kaskadowych i usuwania 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.


Indexes - kolekcja (DAO)
Indexes - kolekcja

Kolekcja Indexes zawiera wszystkie przechowywane obiekty Index obiektu TableDef (tylko obszary robocze Microsoft Jet).

Użycie

Jeśli realizowany jest dostęp do obiektu Recordset typu tabela, wówczas w celu określenia kolejności rekordów można użyć właściwości Index tego obiektu. Właściwość tę należy ustawić na wartość właściwości Name istniejącego obiektu Index z kolekcji Indexes obiektu TableDef odpowiadającego obiektowi Recordset.

Uwaga   Metoda Append lub Delete może być użyta w stosunku do kolekcji Indexes tylko wtedy, gdy wartość właściwości Updatable zawierającego ją obiektu TableDef jest ustawiona na True.

Po utworzeniu nowego obiektu Index należy użyć metody Append w celu dodania go do kolekcji Indexes obiektu TableDef.

Ważne   Należy upewnić się, że dane są zgodne z atrybutami nowego indeksu. Jeśli indeks wymaga wartości unikatowych, należy sprawdzić, czy w istniejących rekordach danych nie ma duplikatów. Jeśli istnieją duplikaty, 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.


Podsumowanie informacji o obiekcie Index i kolekcji Indexes (DAO)
Podsumowanie informacji o obiekcie Index i kolekcji Indexes

Obiekt Index

Obiekt Index zawiera podane niżej kolekcje, metody i właściwości.

Kolekcje

Fields (domyślna)

Properties

Metody

CreateField

CreateProperty

Właściwości

Clustered

DistinctCount

Foreign

IgnoreNulls

Name

Primary

Required

Unique

Kolekcja Indexes

Kolekcja Indexes występuje w każdym obiekcie TableDef i zawiera jedną właściwość i podane niżej metody.

Metody

Append

Delete

Refresh

Właściwość

Count


Parameter - obiekt (DAO)
Parameter - obiekt

Obiekt Parameter reprezentuje wartość przekazywaną do kwerendy. Parametr ten jest związany z obiektem QueryDef utworzonym przez kwerendę parametryczną.

Użycie

Obiekty Parameter umożliwiają zmianę argumentów dla wykonywanego często obiektu QueryDef, bez potrzeby ponownego kompilowania kwerendy.

Za pomocą właściwości obiektu Parameter możliwe jest ustawienie parametru kwerendy, który przed wykonaniem kwerendy można dowolnie zmieniać. Można:

•	Wykorzystać właściwość Name do pobrania nazwy parametru.

•	Wykorzystać właściwość Value do ustawienia lub pobrania wartości parametrów stosowanych w kwerendzie.

•	Wykorzystać właściwość Type do pobrania typu danych obiektu Parameter.

•	Wykorzystać właściwość Direction do ustawienia lub pobrania informacji, czy parametr jest parametrem wejściowym, wyjściowym czy wejściowo-wyjściowym.

W obszarze roboczym ODBCDirect można także:

•	Zmienić ustawienie właściwości Type. Spowoduje to także wyczyszczenie właściwości Value.

•	Wykorzystać właściwość Direction do ustawienia lub pobrania informacji, czy parametr jest parametrem wejściowym, wyjściowym czy wejściowo-wyjściowym.


Parameters - kolekcja (DAO)
Parameters - kolekcja

Kolekcja Parameters zawiera wszystkie obiekty Parameter obiektu QueryDef.

Użycie

Kolekcja Parameters dostarcza informacji tylko o istniejących parametrach. Nie można dołączać lub usuwać obiektów z kolekcji Parameters.


Podsumowanie informacji o obiekcie Parameter i kolekcji Parameters (DAO)
Podsumowanie informacji o obiekcie Parameter i kolekcji Parameters

Obiekt Parameter

Obiekt Parameter nie zawiera żadnych metod; zawiera natomiast jedną kolekcję i poniższe właściwości:

Legenda:

Cecha dostępna jedynie w obszarach roboczych ODBCDirect.

Kolekcja

Properties

Właściwości

Direction

Name

Type

Value (domyślna)

Kolekcja Parameters

Kolekcja Parameters występuje w każdym obiekcie typu QueryDef i zawiera jedną metodę i jedną właściwość.

Metoda

Refresh

Właściwość

Count


Property - obiekt (DAO)
Property - obiekt

Obiekt Property reprezentuje wbudowaną lub zdefiniowaną przez użytkownika charakterystykę obiektu DAO.

Użycie

Każdy obiekt DAO, za wyjątkiem obiektów Connection i Error, zawiera kolekcję Properties, która obejmuje obiekty Property odpowiadające wbudowanym właściwościom tego obiektu DAO. Obiekty Property mogą być także definiowane przez użytkownika i dołączane do kolekcji Properties niektórych obiektów DAO. Te obiekty Property (zwane po prostu właściwościami) charakteryzują jednoznacznie konkretne wystąpienie obiektu.

Tworzenie właściwości definiowanych przez użytkownika jest możliwe dla następujących obiektów:

•	Obiekty Database, Index, QueryDef i TableDef

•	Obiekty Field w kolekcji Fields obiektów QueryDef i TableDef

Aby dodać właściwość definiowaną przez użytkownika, należy zastosować metodę CreateProperty w celu utworzenia obiektu Property o unikatowym ustawieniu właściwości Name. Następnie należy ustawić właściwości Type i Value nowego obiektu Property, po czym dołączyć go do kolekcji Properties właściwego obiektu. Obiekt, do którego dodawana jest właściwość zdefiniowana przez użytkownika, musi być już dołączony do kolekcji. Odwołanie się do zdefiniowanego przez użytkownika obiektu Property, który nie został dołączony do kolekcji Properties, powoduje wystąpienie błędu, podobnie jak dołączenie zdefiniowanego przez użytkownika obiektu Property do kolekcji Properties zawierającej obiekt Property o tej samej nazwie.

Właściwości zdefiniowane przez użytkownika można usuwać z kolekcji Properties, nie można jednak usuwać właściwości wbudowanych.

Uwaga   Zdefiniowany przez użytkownika obiekt Property jest związany jedynie z określonym wystąpieniem obiektu. Właściwość nie jest definiowana dla wszystkich wystąpień obiektów określonego typu.

Kolekcja Properties obiektu może być wykorzystywana w celu wyliczenia właściwości wbudowanych tego obiektu oraz jego właściwości zdefiniowanych przez użytkownika. Nie jest konieczna dokładna znajomość, które właściwości istnieją lub jakie cechy (właściwości Name i Type) służą do operowania nimi. Jeśli jednak nastąpi próba odczytania właściwości przeznaczonej tylko do zapisu, jak np. właściwość Password obiektu Workspace, wówczas wystąpi błąd. Podobnie, błąd pojawia się, jeśli nastąpi próba odczytu bądź zapisu właściwości w niewłaściwym kontekście, jak np. ustawienie właściwości Value obiektu Field należącego do kolekcji Fields obiektu TableDef.

Obiekt Property ma także cztery właściwości wbudowane:

•	Właściwość Name: String identyfikująca jednoznacznie właściwość.

•	Właściwość Type: Integer określająca typ danych właściwości.

•	Właściwość Value: Variant zawierająca ustawienie właściwości.

•	Właściwość Inherited typu Boolean wskazująca, czy właściwość jest dziedziczona z innego obiektu. Na przykład, obiekt Field należący do kolekcji Fields obiektu Recordset może dziedziczyć właściwości odpowiedniego obiektu TableDef lub QueryDef.

Aby odnosić się do obiektu typu Property w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

obiekt.Properties(0)

obiekt.Properties("nazwa")

obiekt.Properties![nazwa]

W przypadku właściwości wbudowanej można także użyć składni:

obiekt.nazwa

Uwaga   Dla właściwości zdefiniowanej przez użytkownika należy stosować pełną składnię: obiekt.Properties("nazwa").

Wykorzystując te same formy składniowe można odwoływać się do właściwości Value obiektu Property. Kontekst odwołania decyduje o tym, czy odwołanie to dotyczy samego obiektu Property czy właściwości Value obiektu Property.


Properties - kolekcja (DAO)
Properties - kolekcja

Kolekcja Properties zawiera wszystkie obiekty Property określonego wystąpienia obiektu.

Użycie

Każdy obiekt DAO, za wyjątkiem obiektów Connection i Error, zawiera kolekcję Properties, która obejmuje pewne wbudowane obiekty Property. Te obiekty Property (zwane po prostu właściwościami) charakteryzują jednoznacznie konkretne wystąpienie obiektu.

Jako uzupełnienie właściwości wbudowanych, istnieje możliwość tworzenia i dodawania właściwości definiowanych przez użytkownika. Aby do istniejącego wystąpienia obiektu dodać właściwość definiowaną przez użytkownika, należy najpierw zdefiniować cechy tej właściwości za pomocą metody CreateProperty, a następnie dodać właściwość do kolekcji przy użyciu metody Append. Odwołanie się do zdefiniowanego przez użytkownika obiektu Property, który nie został dołączony do kolekcji Properties, powoduje wystąpienie błędu, podobnie jak dołączenie zdefiniowanego przez użytkownika obiektu Property do kolekcji Properties zawierającej obiekt Property o tej samej nazwie.

Metoda Delete może posłużyć do usuwania z kolekcji Properties właściwości zdefiniowanych przez użytkownika; nie jest natomiast możliwe usunięcie właściwości wbudowanych.

Uwaga   Zdefiniowany przez użytkownika obiekt Property jest związany jedynie z określonym wystąpieniem obiektu. Właściwość nie jest definiowana dla wszystkich wystąpień obiektów określonego typu.

Kolekcja Properties obiektu może być wykorzystywana w celu wyliczenia właściwości wbudowanych tego obiektu oraz jego właściwości zdefiniowanych przez użytkownika. Nie jest konieczna dokładna znajomość, które właściwości istnieją lub jakie cechy (właściwości Name i Type) służą do operowania nimi. Jeśli jednak nastąpi próba odczytania właściwości przeznaczonej tylko do zapisu, jak np. właściwość Password obiektu Workspace, wówczas wystąpi błąd. Podobnie, błąd pojawia się, jeśli nastąpi próba odczytu bądź zapisu właściwości w niewłaściwym kontekście, jak np. ustawienie właściwości Value obiektu Field należącego do kolekcji Fields obiektu TableDef.

Aby odnosić się do wbudowanego obiektu typu Property w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

obiekt.Properties(0)

obiekt.Properties("nazwa")

obiekt.Properties![nazwa]

W przypadku właściwości wbudowanej można także użyć składni:

obiekt.nazwa

Uwaga Dla właściwości zdefiniowanej przez użytkownika należy stosować pełną składnię: obiekt.Properties("nazwa").

Wykorzystując te same formy składniowe można odwoływać się do właściwości Value obiektu Property. Kontekst odwołania decyduje o tym, czy odwołanie to dotyczy samego obiektu Property czy właściwości Value obiektu Property.


Podsumowanie informacji o obiekcie Property i kolekcji Properties (DAO)
Podsumowanie informacji o obiekcie Property i kolekcji Properties

Obiekt Property

Obiekt Property nie zawiera żadnych metod; zawiera natomiast jedną kolekcję i poniższe właściwości:

Kolekcja

Properties

Właściwości

Inherited (dla baz danych ODBCDirect zawsze równa False)

Name

Type

Value

Kolekcja Properties

Kolekcja Properties występuje w każdym innym obiekcie DAO, za wyjątkiem obiektów Connection oraz Error, i zawiera następujące metody i właściwość:

Metody

Append

Delete

Refresh

Właściwość

Count


QueryDef - obiekt (DAO)
QueryDef - obiekt

Obiekt QueryDef jest w bazie danych zachowaną definicją kwerendy Microsoft Jet, a w obszarze roboczym ODBCDirect tymczasową definicją kwerendy.

Użycie

Obiekt QueryDef służy do definiowania kwerendy. Na przykład, można:

•	Wykorzystać właściwość SQL do ustawienia lub pobrania definicji kwerendy.

•	Wykorzystać kolekcję Parameters obiektu QueryDef do ustawienia lub pobrania parametrów kwerendy.

•	Wykorzystać właściwość Type do pobrania wartości wskazującej, czy kwerenda wybiera rekordy z istniejącej tabeli, tworzy nową tabelę, wstawia rekordy jednej tabeli do innej tabeli, usuwa rekordy czy aktualizuje rekordy.

•	Wykorzystać właściwość MaxRecords do ograniczenia liczby rekordów zwracanych przez kwerendę.

•	Wykorzystać właściwość ODBCTimeout do określenia czasu oczekiwania na rekordy zwracane przez kwerendę. Właściwość ODBCTimeout dotyczy każdej kwerendy realizującej dostęp do danych ze źródła ODBC.

W przypadku obszaru roboczego Microsoft Jet można także:

•	Wykorzystać właściwość ReturnsRecords do wskazania, że kwerenda zwraca rekordy. Właściwość ReturnsRecords jest dopuszczalna jedynie dla kwerend przekazujących SQL.

•	Wykorzystać właściwość Connect do wykonania kwerendy przekazującej SQL w stosunku do bazy danych ODBC.

W przypadku obszaru roboczego ODBCDirect można także:

•	Wykorzystać właściwość Prepare do określenia, czy dla wykonywanej kwerendy należy wywoływać funkcję SQLPrepare API ODBC.

•	Wykorzystać właściwość CacheSize do buforowania rekordów zwracanych przez kwerendę.

Możliwe jest tworzenie tymczasowych obiektów QueryDef. W odróżnieniu od trwałych obiektów QueryDef, tymczasowe obiekty QueryDef nie są zapisywane na dysk ani nie są dołączane do kolekcji QueryDefs. Tymczasowe obiekty QueryDef są przydatne w przypadku kwerend, które muszą być uruchamiane wielokrotnie podczas wykonywania programu, lecz nie muszą być zapisywane na dysk, a w szczególności wtedy, gdy odpowiadające im instrukcje SQL są tworzone podczas wykonywania programu.

Trwały obiekt QueryDef w obszarach roboczych Microsoft Jet można traktować jako skompilowaną instrukcję SQL. Kwerenda wykonywana na podstawie trwałego obiektu QueryDef działa szybciej niż równoważna jej instrukcja SQL wykonana z metody OpenRecordset. Wynika to z tego, że aparat bazy danych Microsoft Jet nie kompiluje kwerendy przed jej wykonaniem.

Zalecanym sposobem korzystania z dialektu SQL specyficznego dla aparatu zewnętrznej bazy danych, do którego dostęp jest realizowany za pośrednictwem aparatu bazy danych Microsoft Jet, jest zastosowanie obiektów QueryDef. Na przykład, można utworzyć kwerendę dla aparatu Microsoft SQL Server i zachować ją w obiekcie QueryDef. Jeśli konieczne jest użycie kwerendy SQL odnoszącej się do aparatu bazy danych innego niż Microsoft Jet, należy do właściwości Connect przypisać ciąg znaków wskazujący zewnętrzne źródło danych. Kwerendy o prawidłowych właściwościach Connect omijają aparat bazy danych Microsoft Jet i są przekazywane w celu realizacji bezpośrednio do serwera zewnętrznej bazy danych.

Aby utworzyć nowy obiekt QueryDef, należy zastosować metodę CreateQueryDef. W przypadku obszaru roboczego Microsoft Jet, jeśli argumentowi nazwa zostanie przypisany ciąg znaków lub jeśli właściwość Name nowego obiektu QueryDef zostanie ustawiona na ciąg inny niż ciąg o długości zerowej, powoduje to utworzenie trwałego obiektu QueryDef, który jest automatycznie dołączany do kolekcji QueryDefs i zapisywany na dysku. Przypisanie argumentowi nazwa ciągu znaków o długości zerowej lub ustawienie właściwości Name na ciąg znaków o długości zerowej powoduje utworzenie tymczasowego obiektu QueryDef.

W przypadku obszaru roboczego ODBCDirect, obiekt QueryDef jest zawsze tymczasowy. Kolekcja QueryDefs zawiera wszystkie otwarte obiekty QueryDef. Zamknięcie obiektu QueryDef powoduje automatyczne usunięcie go z kolekcji QueryDefs.

Aby odwołać się do obiektu QueryDef w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

QueryDefs(0)

QueryDefs("nazwa")

QueryDefs![nazwa]

Do tymczasowych obiektów typu QueryDef można odwoływać się tylko przez przypisane im zmienne obiektowe.


QueryDefs - kolekcja (DAO)
QueryDefs - kolekcja

Kolekcja QueryDefs w bazie danych Microsoft Jet zawiera wszystkie obiekty QueryDef obiektu Database, a w obszarze roboczym ODBCDirect wszystkie obiekty QueryDef obiektu Connection.

Użycie

Aby utworzyć nowy obiekt QueryDef, należy zastosować metodę CreateQueryDef. W przypadku obszaru roboczego Microsoft Jet, jeśli argumentowi nazwa zostanie przypisany ciąg znaków lub jeśli właściwość Name nowego obiektu QueryDef zostanie ustawiona na ciąg inny niż ciąg o długości zerowej, powoduje to utworzenie trwałego obiektu QueryDef, który jest automatycznie dołączany do kolekcji QueryDefs i zapisywany na dysku. Przypisanie argumentowi nazwa ciągu znaków o długości zerowej lub ustawienie właściwości Name na ciąg znaków o długości zerowej powoduje utworzenie tymczasowego obiektu QueryDef.

W przypadku obszaru roboczego ODBCDirect, obiekt QueryDef jest zawsze tymczasowy. Kolekcja QueryDefs zawiera wszystkie otwarte obiekty QueryDef. Zamknięcie obiektu QueryDef powoduje automatyczne usunięcie go z kolekcji QueryDefs.

Aby odwołać się do obiektu QueryDef w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

QueryDefs(0)

QueryDefs("nazwa")

QueryDefs![nazwa]

Do tymczasowych obiektów typu QueryDef można odwoływać się tylko przez przypisane im zmienne obiektowe.


Podsumowanie informacji o obiekcie QueryDef i kolekcji QueryDefs (DAO)
Podsumowanie informacji o obiekcie QueryDef i kolekcji QueryDefs

Obiekt QueryDef

Obiekt QueryDef zawiera następujące kolekcje, metody i właściwości:

Legenda:

Cecha dostępna jedynie w obszarze roboczym Microsoft Jet.

Cecha dostępna jedynie w obszarze roboczym ODBCDirect.

Kolekcje

Fields

Parameters (domyślna)

Properties

Metody

Cancel

Close

CreateProperty

Execute

OpenRecordset

Właściwości

CacheSize

Connect

DateCreated

KeepLocal

LastUpdated

LogMessages

MaxRecords

Name

ODBCTimeout

Prepare

RecordsAffected

Replicable

ReturnsRecords

SQL

StillExecuting

Type

Updatable

Kolekcja QueryDefs

Kolekcja QueryDefs występuje dla każdego obiektu typu Connection w obszarze roboczym ODBCDirect oraz dla każdego obiektu typu Database, i zawiera następujące metody i właściwość:

Metody

Append

Delete

Refresh

Właściwość

Count


Recordset - obiekt (DAO)
Recordset - obiekt

Obiekt Recordset reprezentuje rekordy zapisane w tabeli bazowej lub rekordy powstałe w wyniku wykonania kwerendy.

Użycie

Obiekty Recordset są wykorzystywane do operowania danymi w bazie danych na poziomie rekordów. W przypadku korzystania z obiektów DAO, operowanie danymi niemal całkowicie odbywa się przy użyciu obiektów Recordset. Wszystkie obiekty Recordset są zbudowane z rekordów (wiersze) i pól (kolumny). Istnieje pięć typów obiektów Recordset:

•	Recordset (typu tabela) — jest to reprezentacja (w kodzie programu) tabeli bazowej stosowana do dodawania, zmiany lub usuwania rekordów z pojedynczej tabeli bazy danych (tylko obszary robocze Microsoft Jet).

•	Recordset (typu zestaw dynamiczny) — jest to wynik kwerendy, który może zawierać aktualizowalne rekordy. Obiekt Recordset typu zestaw dynamiczny jest dynamicznym zestawem rekordów, który można stosować do dodawania, zmiany lub usuwania rekordów z określonej tabeli lub tabel bazy danych. Obiekt Recordset typu zestaw dynamiczny może zawierać pola jednej lub więcej tabel bazy danych. Typ ten odpowiada kursorowi kluczowemu ODBC.

•	Recordset (typu utrwalonego) — jest to statyczna kopia zestawu rekordów, którą można stosować do wyszukiwania danych lub generowania raportów. Obiekt Recordset typu utrwalonego może zawierać pola jednej lub więcej tabel bazy danych, nie może jednak być uaktualniany. Typ ten odpowiada kursorowi statycznemu.

•	Recordset (typu progresywnego) — jest to typ podobny do typu utrwalonego, z wyjątkiem tego, że nie jest udostępniany żaden kursor. Rekordy można przewijać tylko w przód. Efektem jest lepsza wydajność w sytuacji, gdy potrzebne jest tylko jedno przejście po rekordach zestawu wynikowego. Typ ten odpowiada kursorowi typu progresywnego ODBC.

•	Recordset (typu dynamicznego) — jest to zestaw wyników kwerendy pochodzących z jednej lub więcej tabel bazowych, w którym można dodawać, zmieniać lub usuwać rekordy z kwerendy zwracającej wiersze. Ponadto, rekordy w tabelach bazowych dodawane, usuwane lub poddawane edycji przez innych użytkowników również pojawiają się w danym obiekcie Recordset. Typ ten odpowiada kursorowi dynamicznemu ODBC (tylko obszary robocze ODBCDirect).

Typ tworzonego obiektu Recordset można ustawić za pomocą argumentu typ metody OpenRecordset.

W przypadku obszaru roboczego Microsoft Jet, jeśli argument typ nie zostanie określony, obiekt DAO dąży do utworzenia obiektu Recordset o typie zapewniającym największą możliwą funkcjonalność, od obiektu tabela poczynając. Jeśli taki typ nie jest dostępny, obiekt DAO podejmuje próbę utworzenia obiektu Recordset najpierw typu zestaw dynamiczny, następnie utrwalonego, a na końcu progresywnego.

W przypadku obszaru roboczego ODBCDirect, jeśli argument typ nie zostanie określony, obiekt DAO dąży do utworzenia obiektu Recordset o typie zapewniającym najszybszą realizację kwerendy, od typu progresywnego poczynając. Jeśli taki typ nie jest dostępny, obiekt DAO podejmuje próbę utworzenia obiektu Recordset najpierw typu utrwalonego, następnie zestaw dynamiczny, a na końcu dynamicznego.

Podczas tworzenia w obszarze roboczym Microsoft Jet obiektu Recordset przy użyciu nie połączonych obiektów TableDef, tworzone są obiekty Recordset typu tabela. Z tabelami połączonymi lub tabelami baz danych ODBC dołączonymi do aparatu Microsoft Jet mogą być tworzone jedynie obiekty Recordset typu zestaw dynamiczny lub utrwalonego.

Nowy obiekt Recordset jest automatycznie dodawany do kolekcji Recordsets w momencie otwierania obiektu i automatycznie usuwany z niej, gdy obiekt jest zamykany.

Uwaga   Jeśli do reprezentowania obiektu Recordset i obiektu Database zawierającego ten obiekt Recordset wykorzystywane są zmienne, należy upewnić się, że zmienne mają ten sam zasięg (czas życia). Na przykład, jeśli zostanie zadeklarowana zmienna publiczna reprezentująca obiekt Recordset, należy upewnić się, że zmienna reprezentująca obiekt Database zawierający ten obiekt Recordset jest także publiczna lub jest zadeklarowana w procedurze Sub lub Function z użyciem słowa kluczowego Static.

Dopuszczalne jest utworzenie dowolnej liczby zmiennych obiektowych typu Recordset, stosownie do potrzeb. Różne obiekty Recordset mogą mieć dostęp do tych samych tabel, kwerend i pól bez niebezpieczeństwa konfliktu.

Obiekty Recordset typu zestaw dynamiczny, utrwalonego i progresywnego są przechowywane w pamięci lokalnej. Jeśli w pamięci lokalnej brak miejsca do przechowania danych, aparat bazy danych Microsoft Jet zapisuje dodatkowe dane w obszarze dysku TEMP. Zapełnienie tego obszaru powoduje wystąpienie błędu przechwytywalnego.

Domyślną kolekcją obiektu Recordset jest kolekcja Fields, natomiast domyślną właściwością obiektu Field jest właściwość Value. Stosowanie tych domyślnych wartości upraszcza kod programu.

Kiedy tworzony jest nowy obiekt Recordset, bieżący rekord jest ustawiany na pierwszym rekordzie, jeżeli istnieją już jakieś rekordy. Jeśli nie ma żadnych rekordów, właściwość RecordCount przyjmuje wartość 0, a właściwości BOF i EOF przyjmują wartość True.

Aby zmienić pozycję rekordu bieżącego, można zastosować metody MoveNext, MovePrevious, MoveFirst i MoveLast. Obiekty Recordset typu progresywnego obsługują jedynie metodę MoveNext. Przy stosowaniu metod typu Move do przejrzenia każdego rekordu (lub "przejścia" przez obiekt Recordset) można wykorzystać właściwości BOF i EOF do wykrywania początku i końca obiektu Recordset.

W obszarze roboczym Microsoft Jet, w stosunku do obiektów Recordset typu zestaw dynamiczny i utrwalonego można stosować metody typu Find, jak FindFirst, które umożliwiają odnalezienie określonego rekordu na podstawie kryteriów. Jeżeli rekord nie zostanie znaleziony, właściwość NoMatch jest ustawiana na wartość True. W obiektach Recordset typu tabela rekordy można również wyszukiwać za pomocą metody Seek.

Właściwość Type wskazuje typ utworzonego obiektu Recordset, natomiast właściwość Updatable wskazuje, czy możliwe jest dokonywanie zmian w rekordach tego obiektu.

Informacje o strukturze tabeli bazowej, takie jak nazwy i typy danych każdego obiektu Field i wszystkich obiektów Index, jest przechowywana w obiekcie TableDef.

Aby odwołać się do obiektu Recordset w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

Recordsets(0)

Recordsets("nazwa")

Recordsets![nazwa]

Uwaga   Obiekt Recordset może być otwarty w oparciu o to samo źródło danych lub bazę danych więcej niż jeden raz, co powoduje powtarzanie się nazw w kolekcji Recordsets. Każdy obiekt Recordset należy przypisać do zmiennych obiektowych i odwoływać się do niego poprzez nazwę zmiennej.


Recordsets - kolekcja (DAO)
Recordsets - kolekcja

Kolekcja Recordsets zawiera wszystkie obiekty Recordset otwarte w obiekcie Database.

Użycie

Jeśli stosowane są obiekty DAO, niemal wszystkie operacje na danych odbywają się przy użyciu obiektów Recordset.

Nowy obiekt Recordset jest automatycznie dodawany do kolekcji Recordsets w momencie otwierania obiektu Recordset i automatycznie usuwany z niej, gdy obiekt jest zamykany.

Dopuszczalne jest tworzenie dowolnej liczby zmiennych obiektowych typu Recordset, stosownie do potrzeb. Różne obiekty typu Recordset mogą mieć dostęp do tych samych tabel, kwerend i pól bez niebezpieczeństwa konfliktu.

Aby odwołać się do obiektu Recordset w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

Recordsets(0)

Recordsets("nazwa")

Recordsets![nazwa]

Uwaga   Obiekt Recordset może być otwarty w oparciu o to samo źródło danych lub bazę danych więcej niż jeden raz, co powoduje powtarzanie się nazw w kolekcji Recordsets. Każdy obiekt Recordset należy przypisać do zmiennych obiektowych i odwoływać się do niego poprzez nazwę zmiennej.


Podsumowanie informacji o obiekcie Recordset i kolekcji Recordsets (DAO)
Podsumowanie informacji o obiekcie Recordset i kolekcji Recordsets

Obiekt Recordset

Obiekt Recordset zawiera następujące kolekcje, metody i właściwości:

Legenda:

Cecha dostępna zarówno w obszarach roboczych Microsoft Jet, jak i ODBCDirect.

Cecha dostępna jedynie w obszarach roboczych Microsoft Jet.

Cecha dostępna jedynie w obszarach roboczych ODBCDirect.

Kolekcje

Fields (domyślna)

Properties

Metody obiektu Recordset

Poniższa tabela zawiera wszystkie metody obiektu Recordset i pokazuje, które typy obiektu Recordset pozwalają na stosowanie każdej z tych metod oraz czy metoda jest dostępna w obszarze roboczym Microsoft Jet, ODBCDirect czy też w obu.

Metoda	Tabela	Zestaw dynamiczny	Utrwalony	Progresywny	Dynamiczny
AddNew			*
Cancel
CancelUpdate			*
Clone
Close
CopyQueryDef
Delete			*
Edit			*
FillCache
FindFirst
FindLast
FindNext
FindPrevious
GetRows
Move				Tylko dla przejść w przód, które nie stosują przesunięcia od zakładki
MoveFirst
MoveLast
MoveNext
MovePrevious
NextRecordset
OpenRecordset
Requery
Seek
Update			*
* W obszarze roboczym ODBCDirect obiekt Recordset typu utrwalonego może dopuszczać aktualizację, zależnie od sterownika ODBC. Metody AddNew, Edit, Delete, Update i CancelUpdate są dostępne dla obiektów Recordset typu utrwalonego w obszarze ODBCDirect jedynie wtedy, gdy sterownik ODBC obsługuje migawki, które mogą być uaktualniane.

Właściwości obiektu Recordset

Poniższa tabela wskazuje, które właściwości dotyczą każdego typu obiektu Recordset oraz czy ustawienie danej właściwości, zarówno dla obszarów roboczych Microsoft Jet, jak i ODBCDirect, jest przeznaczone do odczytu i zapisu, tylko do odczytu, czy też zawsze ma wartość False.

tylko do odczytu

do odczytu i zapisu

Właściwość	Tabela	Zestaw dynamiczny	Utrwalony	Progresywny	Dynamiczny
AbsolutePosition
BatchCollisionCount
BatchCollisions
BatchSize
BOF
Bookmark
Bookmarkable
CacheSize		dla obszarów roboczych Microsoft Jet
		dla obszarów roboczych ODBCDirect
CacheStart
Connection
DateCreated
EditMode
EOF
Filter
Index
LastModified			*
LastUpdated
LockEdits		dla obszarów roboczych Microsoft Jet	dla obszarów roboczych Microsoft Jet
		dla obszarów roboczych ODBCDirect	dla obszarów roboczych ODBCDirect
Name
NoMatch
PercentPosition
RecordCount
RecordStatus
Restartable	False
Sort
StillExecuting
Transactions			dla obszarów roboczych Microsoft Jet zawsze False	dla obszarów roboczych Microsoft Jet zawsze False
Type
Updatable			dla obszarów roboczych zawsze False	dla obszarów roboczych zawsze False
			dla obszarów roboczych ODBCDirect *	dla obszarów roboczych ODBCDirect *
UpdateOptions
ValidationRule
ValidationText
* W obszarze roboczym ODBCDirect obiekt Recordset typu utrwalonego może dopuszczać aktualizację, zależnie od sterownika ODBC. Właściwość LastModified jest dostępna, a właściwość Updatable ma wartość True dla obiektów Recordset typu utrwalonego w obszarze ODBCDirect jedynie wtedy, gdy sterownik ODBC obsługuje migawki, które mogą być uaktualniane.

Kolekcja Recordsets

Kolekcja Recordsets występuje w każdym obiekcie Connection i w każdym obiekcie Database. Zawiera ona jedną metodę i jedną właściwość.

Metoda

Refresh

Właściwość

Count


Relation - obiekt (DAO)
Relation - obiekt

Obiekt Relation reprezentuje związek między polami tabel lub kwerend (tylko w bazach danych Microsoft Jet).

Użycie

Obiekt Relation można stosować do tworzenia nowych związków lub przeglądania związków istniejących już w bazie danych.

Wykorzystując obiekt Relation i jego właściwości, można:

•	Określić związek wymuszany między polami tabel bazowych (ale nie związek, w którym uczestniczy kwerenda lub tabela połączona).

•	Definiować związki nie wymuszane między dowolnym typem tabeli lub kwerendy — lokalną dla apratu bazy danych lub połączoną.

•	Użyć właściwości Name, aby odwołać się do związku między polami wskazywanej tabeli podstawowej i wskazującej tabeli obcej.

•	Użyć właściwości Attributes, aby określić, czy związek między polami tabeli jest typu jeden-do-jeden czy typu jeden-do-wielu, oraz określić sposób wymuszania integralności referencyjnej.

•	Użyć właściwości Attributes, aby określić, czy aparat bazy danych Microsoft Jet może wykonywać operacje kaskadowej aktualizacji i kaskadowego usuwania na tabelach podstawowych i obcych.

•	Użyć właściwości Attributes, aby określić, czy związek między polami tabeli jest sprzężeniem lewym czy sprzężeniem prawym.

•	Użyć właściwości Name wszystkich obiektów Field w kolekcji Fields obiektu Relation, aby ustawić lub pobrać nazwy pól klucza podstawowego tabeli wskazywanej, albo użyć właściwości ForeignName obiektów Field, aby ustawić lub pobrać nazwy pól klucza obcego tabeli wskazującej.

Jeśli wprowadzone zmiany naruszają związki zdefiniowane dla bazy danych, pojawia się błąd przechwytywalny. Jeśli żądaną operacją jest aktualizacja kaskadowa lub usuwanie kaskadowe, aparat bazy danych Microsoft Jet modyfikuje dodatkowo klucze podstawowe lub obce tabel, aby w ten sposób wymusić definiowane związki.

Na przykład, baza danych Northwind zawiera związek między tabelą Zamówienia i tabelą Klienci. Pole KodKlienta w tabeli Klienci pełni rolę klucza podstawowego, natomiast pole KodKlienta tabeli Zamówienia jest kluczem obcym. Przed akceptacją nowego rekordu w tabeli Zamówienia aparat Microsoft Jet przeszukuje tabelę Klienci w celu znalezienia wartości pasującej do pola KodKlienta tabeli Zamówienia. Jeśli nie można znaleźć odpowiedniej wartości, nowy rekord nie jest akceptowany i pojawia się błąd przechwytywalny.

Aby można było wymuszać integralność referencyjną, dla pola kluczowego tabeli wskazywanej musi już istnieć unikatowy indeks. Aparat bazy danych Microsoft Jet automatycznie tworzy indeks, którego właściwość Foreign jest ustawiana w ten sposób, by odpowiadała kluczowi obcemu w tabeli wskazującej.

Aby utworzyć nowy obiekt Relation, należy zastosować metodę CreateRelation. Aby do dowolnego obiektu Relation zawartego w kolekcji odwołać się poprzez jego numer porządkowy lub poprzez właściwość Name, należy wykorzystać jedną z poniższych form składniowych:

Relations(0)

Relations("nazwa")

Relations![nazwa]


Relations - kolekcja (DAO)
Relations - kolekcja

Kolekcja Relations zawiera zachowane obiekty Relation obiektu Database (tylko w bazach danych Microsoft Jet).

Użycie

Obiekt Relation można stosować do tworzenia nowych związków lub przeglądania związków istniejących już w bazie danych. Aby dodać obiekt Relation do kolekcji Relations, należy najpierw utworzyć go za pomocą metody CreateRelation, a następnie dołączyć ten obiekt do kolekcji Relations, wykorzystując w tym celu metodę Append. Umożliwia to zachowanie obiektu Relation po zamknięciu obiektu Database. Aby usunąć obiekt Relation z kolekcji, należy zastosować metodę Delete.

Aby do dowolnego obiektu Relation zawartego w kolekcji odwołać się poprzez jego numer porządkowy lub poprzez właściwość Name, należy wykorzystać jedną z poniższych form składniowych:

Relations(0)

Relations("nazwa")

Relations![nazwa]


Podsumowanie informacji o obiekcie Relation i kolekcji Relations (DAO)
Podsumowanie informacji o obiekcie Relation i kolekcji Relations

Obiekt Relation

Obiekt Relation zawiera następujące kolekcje, metodę i właściwości:

Kolekcje

Fields (domyślna)

Properties

Metoda

CreateField

Właściwości

Attributes

ForeignTable

Name

PartialReplica

Table

Kolekcja Relations

Kolekcja Relations jest zawarta w każdym obiekcie bazy danych Microsoft Jet typu Database i zawiera następujące metody i właściwość:

Metoda

Append

Delete

Refresh

Właściwość

Count


Recordset typu utrwalonego - obiekt (DAO)
Recordset typu utrwalonego - obiekt

Obiekt Recordset typu utrwalonego jest statycznym zestawem rekordów, który można wykorzystywać do przeglądania danych w odpowiadającej mu tabeli lub tabelach. W bazach danych ODBCDirect obiektowi Recordset typu utrwalonego odpowiada kursor statyczny.

Użycie

Aby utworzyć obiekt Recordset typu utrwalonego, należy użyć metody OpenRecordset w stosunku do otwartej bazy danych, innego obiektu Recordset typu zestaw dynamiczny lub utrwalonego lub w stosunku do obiektu typu QueryDef.

Obiekt Recordset typu utrwalonego może zawierać pola pochodzące z jednej lub kilku tabel bazy danych. W przypadku obszaru roboczego Microsoft Jet, obiekt utrwalony nie może być aktualizowany. W przypadku obszaru roboczego ODBCDirect, możliwość aktualizacji obiektu utrwalonego zależy od sterownika ODBC.

W momencie utworzenia obiektu Recordset typu utrwalonego ładowane są do pamięci wartości danych ze wszystkich pól (z wyjątkiem pól typu Memo i obiekt OLE (Long Binary) w plikach .mdb). Po załadowaniu wartości pól, zmiany dokonywane w danych tabeli bazowej nie są odzwierciedlane w danych znajdujących się w obiekcie Recordset typu utrwalonego. Aby załadować ponownie obiekt Recordset typu utrwalonego bieżącymi danymi, należy zastosować metodę Requery lub ponownie wykonać metodę OpenRecordset.

Uporządkowanie danych w obiekcie Recordset typu utrwalonego nie jest zgodne z jakąkolwiek sekwencją. Aby uporządkować dane, należy do utworzenia obiektu typu Recordset wykorzystać instrukcji SQL zawierającą klauzulę ORDER BY. Technikę tę można zastosować również w celu odfiltrowania rekordów tak, aby do obiektu Recordset dodać tylko wybrane rekordy. Efektem stosowania takiej techniki jest zazwyczaj szybszy dostęp do danych niż w przypadku korzystania z właściwości Filter lub Sort albo sprawdzania każdego rekordu oddzielnie.

Operacje tworzenia i dostępu do danych są szybsze dla obiektów Recordset typu utrwalonego niż dla obiektów Recordset typu zestaw dynamiczny. Wynika to z tego, że rekordy obiektów Recordset typu utrwalonego są umieszczone albo w pamięci, albo w obszarze dysku TEMP, i wówczas aparat bazy danych Microsoft Jet nie stosuje blokowania stron i nie musi obsługiwać współbieżnego dostępu do danych. Obiekty Recordset typu utrwalonego zużywają jednak więcej zasobów niż obiekty Recordset typu zestaw dynamiczny, gdyż do pamięci lokalnej ładowany jest cały rekord.


Recordset typu tabela - obiekt (DAO)
Recordset typu tabela - obiekt

Obiekt Recordset typu tabela reprezentuje tabelę bazową, którą można wykorzystywać do dodawania, zmiany lub usuwania rekordów z tabeli. Do pamięci ładowany jest tylko bieżący rekord. Uporządkowanie rekordów obiektu Recordset jest określone przez predefiniowany indeks (tylko w obszarach roboczych Microsoft Jet).

Użycie

Aby utworzyć obiekt Recordset typu tabela, należy w stosunku do otwartego obiektu Database zastosować metodę OpenRecordset.

Obiekt Recordset typu tabela można utworzyć w oparciu o tabelę bazową bazy danych Microsoft Jet, nie można jednak utworzyć go w oparciu o tabelę ODBC lub tabelę połączoną. Obiekt Recordset typu tabela może być wykorzystywany z bazami danych ISAM (jak np. FoxPro, dBASE lub Paradox), jeśli zostaną one otwarte bezpośrednio.

W odróżnieniu od obiektów Recordset typu zestaw dynamiczny lub utrwalonego, obiekt Recordset typu tabela nie może odnosić się do więcej niż jednej tabeli bazowej i nie można go utworzyć za pomocą instrukcji SQL filtrującej lub sortującej dane. Ogólnie, przy dostępie do obiektu Recordset typu tabela należy określić jeden z predefiniowanych indeksów tabeli, który porządkuje dane zwracane do aplikacji. Jeśli tabela nie posiada indeksu, dane zwracane są w porządku przypadkowym. Aplikacja może utworzyć indeks zwracający rekordy w określonym porządku, jeśli jest to konieczne. Aby wybrać określony porządek danych w obiekcie Recordset typu tabela, należy ustawić właściwość Index tak, aby wskazywała istniejący indeks.

Także inaczej niż jest to w przypadku obiektów Recordset typu zestaw dynamiczny lub utrwalonego, w celu uzyskania właściwej wartości właściwości RecordCount nie jest konieczne jawne wypełnianie obiektów Recordset typu tabela.

Aby zachować integralność danych, podczas wykonywania metod Edit i Update obiekty Recordset typu tabela są zablokowane, dzięki czemu tylko jeden użytkownik jednocześnie może aktualizować określony rekord. Kiedy aparat bazy danych Microsoft Jet blokuje rekord, następuje zablokowanie całej dwukilobajtowej strony, zawierającej ten rekord.

Dla tabel innych niż ODBC stosowane są dwa rodzaje blokowania — pesymistyczne i optymistyczne. Tabele, do których dostęp realizowany jest za pośrednictwem ODBC, zawsze wykorzystują blokowanie optymistyczne. Warunki blokowania podczas edycji określa właściwość LockEdits.


TableDef - obiekt (DAO)
TableDef - obiekt

Obiekt TableDef reprezentuje zachowaną definicję tabeli bazowej lub tabeli połączonej (tylko w obszarach roboczych Microsoft Jet).

Użycie

Operowanie na definicji tabeli odbywa się za pośrednictwem obiektu TableDef oraz jego metod i właściwości. Można na przykład:

•	Przeglądać strukturę pól i indeksu dowolnej lokalnej, połączonej lub zewnętrznej tabeli bazy danych.

•	Wykorzystać właściwości Connect i SourceTableName do ustawienia lub pobrania informacji o tabelach połączonych, oraz zastosować metodę RefreshLink, aby uaktualnić łącza do tabel połączonych.

•	Wykorzystać właściwości ValidationRule i ValidationText do ustawienia lub pobrania warunków poprawności.

•	Zastosować metodę OpenRecordset, aby utworzyć obiekt Recordset typu tabela, typu zestaw dynamiczny, typu dynamicznego, typu utrwalonego lub typu progresywnego, bazując na definicji tabeli.

W przypadku tabel bazowych, właściwość RecordCount zawiera liczbę rekordów w określonej tabeli bazy danych. W przypadku tabel połączonych ustawienia właściwości RecordCount mają zawsze wartość -1.

Aby utworzyć nowy obiekt typu TableDef, należy zastosować metodę CreateTableDef.

Aby dodać pole do tabeli

1.	Upewnij się, że wszystkie obiekty Recordset bazujące na tej tabeli są zamknięte.

2.	Zastosuj metodę CreateField, aby utworzyć zmienną obiektową typu Field i ustawić jej właściwości.

3.	Zastosuj metodę Append, aby dodać nowy obiekt Field do kolekcji Fields obiektu TableDef.

Obiekt Field można usunąć z kolekcji TableDefs, jeśli nie przypisano do niego żadnych indeksów; tracone są jednak dane znajdujące się w polach.

Aby utworzyć w bazie danych tabelę gotową do wstawiania nowych rekordów

1.	Zastosuj metodę CreateTableDef, aby utworzyć obiekt TableDef.

2.	Ustaw jego właściwości.

3.	Dla każdego pola tabeli zastosuj metodę CreateField, aby utworzyć zmienną obiektową typu Field i ustawić jej właściwości.

4.	Zastosuj metodę Append, aby dodać nowe pola do kolekcji Fields obiektu TableDef.

5.	Zastosuj metodę Append, aby dodać nowy obiekt TableDef do kolekcji TableDefs obiektu Database.

Tabela połączona jest wiązana z bazą danych za pośrednictwem właściwości SourceTableName i Connect obiektu TableDef.

Aby dowiązać tabelę do bazy danych

1.	Zastosuj metodę CreateTableDef, aby utworzyć obiekt TableDef.

2.	Ustaw jego właściwości Connect i SourceTableName (oraz, opcjonalnie, jego właściwość Attributes).

3.	Zastosuj metodę Append, aby dodać ten obiekt do kolekcji TableDefs obiektu Database.

Aby odwołać się do obiektu typu TableDef znajdującego się w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

TableDefs(0)

TableDefs("nazwa")

TableDefs![nazwa]


TableDefs - kolekcja (DAO)
TableDefs - kolekcja

Kolekcja TableDefs zawiera wszystkie zachowane w bazie danych obiekty TableDef (tylko w obszarach roboczych Microsoft Jet).

Użycie

Operowanie na definicji tabeli odbywa się za pośrednictwem obiektu typu TableDef oraz jego metod i właściwości.

Domyślną kolekcją obiektu Database jest kolekcja TableDefs.

Aby odwołać się do obiektu typu TableDef znajdującego się w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

TableDefs(0)

TableDefs("nazwa")

TableDefs![nazwa]


Podsumowanie informacji o obiekcie TableDef i kolekcji TableDefs (DAO)
Podsumowanie informacji o obiekcie TableDef i kolekcji TableDefs

Obiekt TableDef

Obiekt TableDef zawiera następujące kolekcje, metody i właściwości:

Kolekcje

Fields (domyślna)

Indexes

Properties

Metody

CreateField

CreateIndex

CreateProperty

OpenRecordset

RefreshLink

Właściwości

Attributes

ConflictTable

Connect

DateCreated

KeepLocal (definiowana przez użytkownika)

LastUpdated

Name

RecordCount

Replicable (definiowana przez użytkownika)

ReplicaFilter

SourceTableName

Updatable

ValidationRule

ValidationText

Obiekt TableDef może zawierać także właściwości zdefiniowane przez aplikację. Szczegóły dotyczące czytania i ustawiania tych właściwości można znaleźć w bieżącej Pomocy danej aplikacji.

Kolekcja TableDefs

Kolekcja TableDefs jest zawarta w każdym obiekcie Database bazy danych Microsoft Jet i zawiera następujące metody i właściwość:

Metody

Append

Delete

Refresh

Właściwość

Count


User - obiekt (DAO)
User - obiekt

Obiekt User reprezentuje konto użytkownika, które posiada uprawnienia na dostęp w czasie, gdy obiekt Workspace funkcjonuje jako chroniona grupa robocza (tylko w obszarach roboczych Microsoft Jet).

Użycie

Obiekty User są stosowane do definiowania i wymuszania zezwoleń na dostęp do obiektów Document, reprezentujących bazy danych, tabele i kwerendy. Ponadto, znając właściwości określonego obiektu User, można utworzyć nowy obiekt Workspace posiadający te same zezwolenia na dostęp, co ten obiekt User.

Istniejący obiekt User można dołączyć do kolekcji Users obiektu Group, aby nadać kontu użytkownika zezwolenia na dostęp właściwe temu obiektowi Group. Innym sposobem jest dołączenie obiektu Group do kolekcji Groups obiektu User, aby ustalić w ten sposób przynależność konta użytkownika do tej grupy. Jeśli stosowana jest kolekcja Users lub Groups inna niż ta, do której dołączono obiekt, może okazać się konieczne użycie metody Refresh.

Posługując się właściwościami obiektu typu User, można:

•	Użyć właściwości Nazwa do pobrania nazwy istniejącego użytkownika. Nie można pobrać właściwości PID i Password istniejącego obiektu User.

•	Użyć właściwości Name, PID i Password nowo utworzonego, nie dołączonego obiektu User do ustalenia tożsamości tego obiektu User. Jeśli właściwość Password nie zostanie ustawiona, przyjmuje ona wartość ciągu o długości zerowej ("").

W aparacie bazy danych Microsoft Jet istnieją dwa predefiniowane obiekty User, nazwane Admin i Guest. Użytkownik Admin jest członkiem obu obiektów Group o nazwach Admins i Users; użytkownik Guest jest członkiem tylko obiektu Group o nazwie Guests.

Aby utworzyć nowy obiekt typu User, należy zastosować metodę CreateUser.

Aby odwołać się do obiektu typu User znajdującego się w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

[obszar_roboczy | grupa].Users(0)

[obszar_roboczy | grupa].Users("nazwa")

[obszar_roboczy | grupa].Users![nazwa]


Users - kolekcja (DAO)
Users - kolekcja

Kolekcja Users zawiera wszystkie zachowane obiekty User obiektu Workspace lub Group (tylko w obszarach roboczych Microsoft Jet).

Użycie

Istniejący obiekt User można dołączyć do kolekcji Users obiektu Group, aby nadać użytkownikowi zezwolenia na dostęp, właściwe temu obiektowi Group. Innym sposobem jest dołączenie obiektu Group do kolekcji Groups obiektu User, aby ustalić w ten sposób przynależność konta użytkownika do tej grupy. Jeśli stosowana jest kolekcja Users lub Groups inna niż ta, do której dołączono obiekt, może okazać się konieczne użycie metody Refresh.

W aparacie bazy danych Microsoft Jet istnieją dwa predefiniowane obiekty User, nazwane Admin i Guest. Użytkownik Admin jest członkiem obu obiektów Group o nazwach Admins i Users; użytkownik Guest jest członkiem tylko obiektu Group o nazwie Guests.

Aby odwołać się do obiektu typu User znajdującego się w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

[obszar_roboczy | grupa].Users(0)

[obszar_roboczy | grupa].Users("nazwa")

[obszar_roboczy | grupa].Users![nazwa]


Podsumowanie informacji o obiekcie User i kolekcji Users (DAO)
Podsumowanie informacji o obiekcie User i kolekcji Users

Obiekt User

Obiekt User zawiera następujące kolekcje, metody i właściwości:

Kolekcje

Groups (domyślna)

Properties

Metody

CreateGroup

NewPassword

Właściwości

Name

Password

PID

Kolekcja Users

Kolekcja Users jest zawarta w każdym obiekcie Group i obiekcie Workspace aparatu Microsoft Jet i zawiera następujące metody i właściwość:

Metody

Append

Delete

Refresh

Właściwość

Count


Workspace - obiekt (DAO)
Workspace - obiekt

Obiekt Workspace definiuje dla użytkownika nazwaną sesję. Zawiera on otwarte bazy danych i dostarcza mechanizmy jednoczesnych transakcji oraz, w obszarach roboczych Microsoft Jet, mechanizmy obsługi chronionej grupy roboczej. Ponadto obiekt ten kontroluje, czy dostęp do zewnętrznych danych następuje poprzez aparat bazy danych Microsoft Jet, czy ODBCDirect.

Użycie

Obiekt Workspace nie jest obiektem trwałym. Definiuje on sposób, w jaki aplikacja użytkownika uzyskuje dostęp do danych — czy odbywa się to przy użyciu aparatu bazy danych Microsoft Jet, czy też ODBCDirect. Obiekt Workspace może być stosowany do zarządzania bieżącą sesją lub do uruchomienia sesji dodatkowej. W ramach jednej sesji można otwierać wiele baz danych lub połączeń oraz zarządzać transakcjami. Na przykład można:

•	Wykorzystywać właściwości Name, UserName i Type do otwarcia nazwanej sesji. Sesja tworzy zasięg, w ramach którego można otwierać bazy danych i realizować jedno wystąpienie transakcji zagnieżdżonej.

•	Zastosować metodę Close do zamknięcia sesji.

•	Zastosować metodę OpenDatabase do otwarcia jednej lub więcej istniejących baz danych w obiekcie Workspace.

•	Zastosować metody BeginTrans, CommitTrans i Rollback do zarządzania przetwarzaniem zagnieżdżonych transakcji wewnątrz obiektu Workspace oraz użyć kilku obiektów typu Workspace do realizacji wielu jednoczesnych i nakładających się transakcji.

Ponadto, przy korzystaniu z bazy danych Microsoft Jet, możliwe jest dodanie mechanizmów bezpieczeństwa opartych o nazwy użytkowników i hasła. W tym celu można:

•	Wykorzystać kolekcje Groups i Users do nadania grupom i użytkownikom zezwoleń na dostęp do obiektów w obiekcie Workspace.

•	Wykorzystać właściwość IsolateODBCTrans do odizolowania transakcji operujących na tej samej bazie danych ODBC dołączonej do aparatu Microsoft Jet.

Uwaga   Pełną listę wszystkich metod, właściwości i kolekcji dostępnych w obiekcie Workspace zarówno w bazie danych Microsoft Jet, jak i bazie danych ODBCDirect można znaleźć pod hasłem Podsumowanie informacji.

Pierwsze użycie lub odwołanie się do obiektu Workspace powoduje automatycznie utworzenie domyślnego obszaru roboczego, DBEngine.Workspaces(0). Właściwości Name i UserName domyślnego obszaru roboczego przyjmują wartość odpowiednio "#Default Workspace#" i "Admin". Jeśli włączona jest opcja bezpieczeństwa, właściwość UserName przyjmuje jako wartość nazwę użytkownika, który się zalogował.

Aby utworzyć obiekt Workspace typu ODBCDirect i w ten sposób uniknąć ładowania do pamięci aparatu bazy danych Microsoft Jet, należy ustawić właściwość DefaultType obiektu DBEngine na wartość dbUseODBC lub ustawić argument typ metody CreateWorkspace na wartość dbUseODBC.

Jeśli stosowane są transakcje, angażowane są wszystkie bazy danych w określonym obiekcie Workspace — nawet, jeżeli w obiekcie Workspace zostanie otwartych wiele obiektów Database. Na przykład, załóżmy, że zastosowano metodę BeginTrans, uaktualniono kilkanaście rekordów w bazie danych, a następnie usunięto rekordy z innej bazy danych. Jeśli następnie zostanie użyta metoda Rollback, zarówno operacje aktualizacji, jak i usuwania, będą anulowane i wycofane. Aby niezależnie zarządzać transakcjami we wszystkich obiektach Database, należy utworzyć dodatkowe obiekty Workspace.

Obiekty Workspace można tworzyć za pomocą metody CreateWorkspace. Jeśli zachodzi potrzeba odwoływania się do obiektu Workspace za pośrednictwem kolekcji Workspaces, trzeba po utworzeniu nowego obiektu Workspace dołączyć go do kolekcji Workspaces.

Nowo utworzony obiekt Workspace można wykorzystywać bez dołączania go do kolekcji Workspaces. Należy jednak odwoływać się do niego poprzez zmienną obiektową, do której został przypisany.

Aby odwołać się do obiektu Workspace znajdującego się w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

DBEngine.Workspaces(0)

DBEngine.Workspaces("nazwa")

DBEngine.Workspaces![nazwa]


Workspaces - kolekcja (DAO)
Workspaces - kolekcja

Kolekcja Workspaces zawiera wszystkie aktywne, nie ukryte obiekty Workspace obiektu DBEngine. (Ukryte obiekty Workspace nie są dołączane do kolekcji ani nie są wskazywane przez zmienne, do których są przypisane.)

Użycie

Obiekt Workspace służy do zarządzania bieżącą sesją lub do uruchomienia sesji dodatkowej.

Pierwsze użycie lub odwołanie się do obiektu Workspace powoduje automatycznie utworzenie domyślnego obszaru roboczego, DBEngine.Workspaces(0). Właściwości Name i UserName domyślnego obszaru roboczego przyjmują wartość odpowiednio "#Default Workspace#" and "Admin". Jeśli włączona jest opcja bezpieczeństwa, właściwość UserName przyjmuje jako wartość nazwę użytkownika, który się zalogował.

Obiekty Workspace można tworzyć za pomocą metody CreateWorkspace. Jeśli zachodzi potrzeba odwoływania się do obiektu Workspace za pośrednictwem kolekcji Workspaces, trzeba po utworzeniu nowego obiektu Workspace dołączyć go do kolekcji Workspaces. Nowo utworzony obiekt typu Workspace można też wykorzystywać bez dołączania go do kolekcji Workspaces.

Aby odwołać się do obiektu Workspace znajdującego się w kolekcji poprzez jego numer porządkowy lub poprzez jego właściwość Name, należy użyć jednej z poniższych form składniowych:

DBEngine.Workspaces(0)

DBEngine.Workspaces("nazwa")

DBEngine.Workspaces![nazwa]


Podsumowanie informacji o obiekcie Workspace i kolekcji Workspaces (DAO)
Podsumowanie informacji o obiekcie Workspace i kolekcji Workspaces

Obiekt Workspace

Obiekt Workspace zawiera następujące kolekcje, metody i właściwości:

Legenda:

Cecha dostępna jedynie w obszarach roboczych Microsoft Jet.

Cecha dostępna jedynie w obszarach roboczych ODBCDirect.

Kolekcje

Connections

Databases (domyślna)

Groups

Properties

Users

Metody

BeginTrans

Close

CommitTrans

CreateDatabase

CreateGroup

CreateUser

OpenConnection

OpenDatabase

Rollback

Właściwości

DefaultCursorDriver

IsolateODBCTrans

LoginTimeout

Name

Type

UserName

Kolekcja Workspaces

Kolekcja Workspaces jest zawarta w każdym obiekcie DBEngine i zawiera następujące metody i właściwość:

Metody

Append

Delete

Refresh

Właściwość

Count


Connection - obiekt (DAO)
Connection - obiekt

Obiekt Connection reprezentuje połączenie z bazą danych ODBC (tylko w obszarach roboczych ODBCDirect).

Uwagi

Connection jest obiektem nietrwałym reprezentującym połączenie z odległą bazą danych. Obiekt Connection dostępny jest tylko w obszarach roboczych ODBCDirect (w obiektach Workspace utworzonych z opcją określającą typ równą dbUseODBC).

Uwaga   Kod programu napisany dla wcześniejszych wersji DAO może nadal wykorzystywać obiekt Database pozostawiony dla zachowania zgodności z poprzednimi wersjami, ale w przypadku konieczności skorzystania z nowych możliwości, jakie daje obiekt Connection, należy zmienić program tak, by wykorzystywał obiekt Connection. Aby ułatwić konwersję kodu programu, odwołanie do Connection z obiektu Database można uzyskać, odczytując wartość właściwości Connection obiektu Database. I odwrotnie, odwołanie do obiektu Database można pobrać z właściwości Database obiektu Connection.


Connections - kolekcja (DAO)
Connections - kolekcja

Kolekcja Connections zawiera bieżące obiekty Connection obiektu Workspace. (tylko w obszarach roboczych ODBCDirect).

Uwagi

Przy otwieraniu obiektu Connection jest on automatycznie dołączany do kolekcji Connections obiektu Workspace. Przy zamykaniu obiektu Connection za pomocą metody Close jest on usuwany z kolekcji Connections. Przed zamknięciem obiektu Connection należy zamknąć wszystkie otwarte w nim obiekty Recordset.

W tym samym czasie, gdy otwierany jest obiekt Connection, tworzony jest odpowiadający mu obiekt Database, który dodawany jest do kolekcji Databases w tym samym obiekcie Workspace, i na odwrót. Podobnie, przy zamykaniu obiektu Connection odpowiadający mu obiekt Database jest usuwany z kolekcji Databases, i tak dalej.

Właściwość Name obiektu Connection jest ciągiem znaków określającym ścieżkę do pliku bazy danych. Do odwołania się do obiektu Connection w kolekcji za pomocą liczby porządkowej lub ustawienia właściwości Name należy użyć jednej z następujących form składniowych:

Connections(0)

Connections("nazwa")

Connections![nazwa]

Uwaga   To samo źródło danych można otwierać wielokrotnie, tworząc powtarzające się nazwy w kolekcji Connections. Obiekty Connection należy przypisać do zmiennych obiektowych i odwoływać się do nich poprzez nazwę zmiennej.


Podsumowanie informacji o obiekcie Connection i kolekcji Connections (DAO)
Podsumowanie informacji o obiekcie Connection i kolekcji Connections

Obiekt Connection

Obiekt Connection zawiera następujące kolekcje, metody i właściwości:

Kolekcje

QueryDefs (domyślna)

Recordsets

Metody

Cancel

Close

CreateQueryDef

Execute

OpenRecordset

Właściwości

Connect

Database

Name

QueryTimeout

RecordsAffected

StillExecuting

Transactions

Updatable

Kolekcja Connections

Kolekcja Connections zawarta jest w każdym obiekcie ODBCDirect Workspace i zawiera następującą metodę i właściwość:

Metoda

Refresh

Właściwość

Count


Recordset typu progresywnego - obiekt (DAO)
Recordset typu progresywnego - obiekt

Ten typ obiektu Recordset jest identyczny z typem utrwalonym z tym wyjątkiem, że rekordy można przeglądać wyłącznie do przodu. Poprawia to wydajność w przypadku, gdy trzeba jednokrotnie przejrzeć zestaw wynikowy.

W obszarze roboczym ODBCDirect typ ten odpowiada kursorowi typu progresywnego ODBC.


Podsumowanie informacji o obiekcie Recordset typu progresywnego (DAO)
Podsumowanie informacji o obiekcie Recordset typu progresywnego

Obiekt forward-only type Recordset zawiera następujące kolekcje, metody i właściwości:

Legenda:

Cecha dostępna jedynie w obszarach roboczych Microsoft Jet.

Cecha dostępna jedynie w obszarach roboczych ODBCDirect.

Kolekcje

Fields (domyślna)

Properties

Metody	Ograniczenia
AddNew
Cancel
CancelUpdate
Close
CopyQueryDef
Delete
Edit
GetRows
Move	Tylko z przechodzeniem do przodu bez wykorzystania przesunięcia określonego zakładką.
MoveNext
NextRecordset
Requery
Update
Właściwości

Poniższa tabela podaje, czy ustawienie właściwości jest przeznaczone do odczytu i zapisu, tylko do odczytu lub czy ma zawsze wartość False zarówno w obszarach roboczych Microsoft Jet, jak i ODBCDirect.

tylko do odczytu

do odczytu i zapisu

Właściwości	Ograniczenia
BatchCollisionCount
BatchCollisions
BatchSize
BOF
Connection
EOF
Filter
Name
RecordCount
RecordStatus
Restartable
StillExecuting
Transactions	Zawsze wartość False
Type
Updatable	False
UpdateOptions
ValidationRule
ValidationText


Recordset typu dynamicznego - obiekt (DAO)
Recordset typu dynamicznego - obiekt

Ten typ obiektu Recordset reprezentuje zestaw wynikowy kwerendy pochodzący z jednej lub wielu tabel bazowych, w którym można dodawać, zmieniać lub usuwać rekordy pochodzące z kwerendy zwracającej wiersze. Ponadto rekordy dodawane, modyfikowane lub usuwane przez użytkownika z tabeli bazowej również pojawiają się w obiekcie Recordset tego typu.

Typ ten dostępny jest tylko w obszarach roboczych ODBCDirect i odpowiada kursorowi dynamicznemu ODBC.


Podsumowanie informacji o obiekcie Recordset typu dynamicznego (DAO)
Podsumowanie informacji o obiekcie Recordset typu dynamicznego

Obiekt Recordset typu dynamicznego zawiera podane niżej kolekcje, metody i właściwości. Ten typ obiektu Recordset oraz jego metody i właściwości są dostępne wyłącznie w obszarze roboczym ODBCDirect.

Kolekcje

Fields (domyślna)

Properties

Metody

AddNew

Cancel

CancelUpdate

Close

Delete

Edit

GetRows

Move

MoveFirst

MoveLast

MoveNext

MovePrevious

NextRecordset

Requery

Update

Właściwości

Poniższa tabela podaje, czy ustawienie właściwości jest przeznaczone do odczytu i zapisu, tylko do odczytu lub czy ma zawsze wartość False.

tylko do odczytu

do odczytu i zapisu

Właściwości	Ograniczenia
AbsolutePosition
BatchCollisionCount
BatchCollisions
BatchSize
BOF
Bookmark
Bookmarkable
CacheSize
Connection
EditMode
EOF
LastModified
LockEdits
Name
PercentPosition
RecordCount
RecordStatus
Restartable
StillExecuting
Type
Updatable
UpdateOptions


Podsumowanie informacji o obiekcie Recordset typu zestaw dynamiczny (DAO)
Podsumowanie informacji o obiekcie Recordset typu zestaw dynamiczny

Obiekt Recordset typu zestaw dynamiczny zawiera następujące kolekcje, metody i właściwości:

Legenda:

Cecha dostępna jedynie w obszarach roboczych Microsoft Jet.

Cecha dostępna jedynie w obszarach roboczych ODBCDirect.

Kolekcje

Fields (domyślna)

Properties

Metody	Ograniczenia
AddNew
Cancel
CancelUpdate
Clone
Close
CopyQueryDef
Delete
Edit
FillCache
FindFirst
FindLast
FindNext
FindPrevious
GetRows
Move
MoveFirst
MoveLast
MoveNext
MovePrevious
NextRecordset
OpenRecordset
Requery
Update
Właściwości

Poniższa tabela podaje, czy ustawienie właściwości jest przeznaczone do odczytu i zapisu, tylko do odczytu lub czy dostępne jest tylko w obszarze roboczym Microsoft Jet albo w obszarze roboczym ODBCDirect.

tylko do odczytu

do odczytu i zapisu

Właściwości	Ograniczenia
AbsolutePosition
BatchCollisionCount
BatchCollisions
BatchSize
BOF
Bookmark
Bookmarkable
CacheSize	Microsoft Jet  ODBCDirect
CacheStart
Connection
EditMode
EOF
Filter
LastModified
LockEdits
Name
NoMatch
PercentPosition
RecordCount
RecordStatus
Restartable
Sort
StillExecuting
Transactions
Type
Updatable
UpdateOptions
ValidationRule
ValidationText


Podsumowanie informacji o obiekcie Recordset typu utrwalonego (DAO)
Podsumowanie informacji o obiekcie Recordset typu utrwalonego

Obiekt Recordset typu utrwalonego zawiera następujące kolekcje, metody i właściwości:

Legenda:

Cecha dostępna jedynie w obszarach roboczych Microsoft Jet.

 	Cecha dostępna jedynie w obszarach roboczych ODBCDirect.

Kolekcje

Fields (domyślna)

Properties

Metody	Ograniczenia
AddNew	*
Cancel
CancelUpdate	*
Clone
Close
CopyQueryDef
Delete	*
Edit	*
FindFirst
FindLast
FindNext
FindPrevious
GetRows
Move
MoveFirst
MoveLast
MoveNext
MovePrevious
NextRecordset
OpenRecordset
Requery
Update	*
* W obszarze roboczym ODBCDirect obiekt Recordset typu utrwalonego może być modyfikowalny, o ile pozwala na to sterownik ODBC. Metody AddNew, Edit, Delete, Update i CancelUpdate są dostępne w obiekcie ODBCDirect Recordset typu utrwalonego tylko wtedy, gdy sterownik ODBC obsługuje modyfikowalne migawki.

Właściwości

Poniższa tabela podaje, czy ustawienie właściwości jest przeznaczone do odczytu i zapisu, tylko do odczytu lub czy ma zawsze wartość False zarówno w obszarach roboczych Microsoft Jet, jak i ODBCDirect.

tylko do odczytu

do odczytu i zapisu

Właściwości	Ograniczenia
AbsolutePosition
BatchCollisionCount
BatchCollisions
BatchSize
BOF
Bookmark
Bookmarkable
CacheSize
Connection
EditMode
EOF
Filter
LastModified	*
LockEdits
Name
NoMatch
PercentPosition
RecordCount
RecordStatus
Restartable
Sort
StillExecuting
Transactions	Zawsze wartość False
Type
Updatable	W obszarach roboczych Microsoft Jet - zawsze False; [image] w obszarach roboczych ODBCDirect *
UpdateOptions
ValidationRule
ValidationText
* W obszarze roboczym ODBCDirect obiekt Recordset typu utrwalonego może być modyfikowalny, o ile pozwala na to sterownik ODBC. Właściwość LastModified jest dostępna, a właściwość Updatable ma wartość True tylko wtedy, gdy sterownik ODBC obsługuje modyfikowalne migawki.


Podsumowanie informacji o obiekcie Recordset typu tabela (DAO)
Podsumowanie informacji o obiekcie Recordset typu tabela

Obiekt Recordset typu tabela zawiera podane niżej kolekcje, metody i właściwości. Ten typ obiektu Recordset oraz jego metody i właściwości są dostępne wyłącznie w obszarze roboczym Microsoft Jet.

Kolekcje

Fields (domyślna)

Properties

Metody

AddNew

CancelUpdate

Clone

Close

Delete

Edit

GetRows

Move

MoveFirst

MoveLast

MoveNext

MovePrevious

OpenRecordset

Seek

  Update

Właściwości

Poniższa tabela podaje, czy ustawienie właściwości jest przeznaczone do odczytu i zapisu, tylko do odczytu lub czy ma zawsze wartość False.

tylko do odczytu

do odczytu i zapisu

Właściwości	Ograniczenia
BOF
Bookmark
Bookmarkable
DateCreated
EditMode
EOF
Index
LastModified
LastUpdated
LockEdits
Name
NoMatch
PercentPosition
RecordCount
Restartable	Zawsze wartość False
Transactions
Type
Updatable
ValidationRule
ValidationText


AddNew - metoda (DAO)
AddNew - metoda

Tworzy nowy rekord dla modyfikowalnego obiektu Recordset.

Składnia

zestaw_rekordów.AddNew

Zmienna zestaw_rekordów jest zmienną obiektową reprezentującą modyfikowalny obiekt Recordset, do którego ma być dodany nowy rekord.

Użycie

Metod AddNew tworzy i dodaje nowy rekord do obiektu Recordset o nazwie zestaw_rekordów. Metoda ta ustawia wartości domyślne w polach obiektu, a w przypadku braku wartości domyślnych wpisuje w pola wartości Null (wartości domyślne dla obiektu Recordset typu tabela).

Po zmodyfikowaniu nowego rekordu należy użyć metody Update, aby zapisać zmiany i dodać ten rekord do obiektu Recordset. W bazie danych nie pojawią się żadne zmiany, dopóki nie zostanie wywołana metoda Update.

Ostrzeżenie Jeżeli bez uprzedniego zastosowania metody Update zostanie wywołana metoda AddNew, a następnie wykonana dowolna operacja, która przechodzi do innego rekordu, to wprowadzone zmiany zostaną zignorowane bez podania żadnego ostrzeżenia. Ponadto, jeżeli obiekt Recordset zostanie zamknięty lub zostanie zakończona procedura deklarująca obiekt Recordset lub odpowiadający mu obiekt Database, to nowy rekord zostanie odrzucony, również bez ostrzeżenia.

Uwaga   Jeżeli metoda AddNew stosowana jest w obszarze roboczym Microsoft Jet i aparat bazy danych musi utworzyć nową stronę dla bieżącego rekordu, to blokowanie strony jest blokowaniem pesymistycznym. Jeżeli nowy rekord mieści się na istniejącej stronie, to blokowanie strony jest blokowaniem optymistycznym.

Jeżeli użytkownik nie ustawił się na ostatnim rekordzie obiektu Recordset, to rekordy dodawane do tabel bazowych przez inne procesy mogą być włączone tylko wtedy, gdy znajdują się za bieżącym rekordem. Jednakże, jeżeli użytkownik doda rekord do własnego obiektu Recordset, to rekord ten jest widoczny w obiekcie Recordset i włączony do odpowiadającej mu tabeli, gdzie staje się widoczny dla wszystkich nowych obiektów Recordset.

Położenie nowego rekordu zależy od typu obiektu Recordset:

•	W obiekcie Recordset typu zestaw dynamiczny rekordy są wstawiane na końcu obiektu, niezależnie od reguł sortowania czy uporządkowania działających po otwarciu obiektu Recordset.

•	W obiekcie Recordset typu tabela, dla którego ustawiono właściwość Index, rekordy są umieszczane na właściwym miejscu zgodnie z porządkiem sortowania. Jeżeli nie ustawiono właściwości Index, nowe rekordy są umieszczane na końcu obiektu Recordset.

Rekord, który przed użyciem metody AddNew był rekordem bieżącym, pozostaje nim nadal. Jeżeli nowy rekord ma zostać rekordem bieżącym, należy ustawić właściwość Bookmark na zakładkę określoną przez wartość właściwości LastModified.

Uwaga   Aby można było dodać, poddać edycji lub usunąć rekord, w odpowiadającym źródle danych musi istnieć niepowtarzalny indeks. Jeżeli brak takiego indeksu, to wystąpi błąd "Brak uprawnień" w wywołaniu metody AddNew, Delete lub Edit w obszarze roboczym Microsoft Jet albo błąd "Niedozwolony argument" w wywołaniu metody Update w obszarze roboczym ODBCDirect.


Append - metoda (DAO)
Append - metoda

Dodaje nowy obiekt DAO do kolekcji.

Składnia

kolekcja.Append obiekt

Składnia metody Append zawiera następujące elementy:

Element	Opis
kolekcja	Zmienna obiektowa, która reprezentuje dowolną kolekcję akceptującą nowe obiekty (ograniczenia dotyczące tej zmiennej przedstawiono w tabeli poniżej).
obiekt	Zmienna obiektowa reprezentująca dołączany obiekt, który musi być tego samego typu co inne elementy kolekcji.
Użycie

Metoda Append służy do dodawania nowej tabeli do bazy danych, pola do tabeli i pola do indeksu.

Dołączony obiekt jest obiektem trwałym, zapisanym na dysku, dopóki nie zostanie usunięty za pomocą metody Delete. Jeżeli kolekcja jest kolekcją Workspaces (która jest przechowywana tylko w pamięci), obiekt jest aktywny, dopóki nie zostanie usunięty za pomocą metody Close.

Chociaż dodanie nowego obiektu realizowane jest bezzwłocznie, to jednak w stosunku do innych kolekcji, na które mogą wpływać zmiany struktury bazy danych, należy zastosować metodę Refresh.

Jeżeli dołączany obiekt nie jest kompletny (na przykład, gdy nie dołączono żadnego obiektu Field do kolekcji Fields obiektu Index przed dołączeniem tego ostatniego do kolekcji Indexes) lub jeżeli właściwości ustawione w jednym lub kilku obiektach podrzędnych są nieprawidłowe, użycie metody Append spowoduje wystąpienie błędu. Przykładowo, jeżeli nie określono typu pola i próbowano dołączyć obiekt Field do kolekcji Fields w obiekcie TableDef, użycie metody Append generuje błąd wykonania.

Poniższa tabela podaje niektóre ograniczenia metody Append. Obiekt przedstawiony w pierwszej kolumnie jest obiektem zawierającym kolekcję przedstawioną w drugiej kolumnie. Trzecia kolumna wskazuje, czy można dołączyć obiekt do tej kolekcji (na przykład, nigdy nie można dołączyć obiektu Container do kolekcji Containers obiektu Database).

Obiekt	Kolekcja	Czy można dołączać nowe obiekty?
DBEngine	Workspaces	Tak
DBEngine	Errors	Nie. Nowe obiekty typu Error są dołączane automatycznie w momencie wystąpienia błędu.
Workspace	Connections	Nie. Użycie metody OpenConnection powoduje automatyczne dołączenie nowych obiektów.
Workspace	Databases	Nie. Użycie metody OpenDatabase powoduje automatyczne dołączenie nowych obiektów.
Workspace	Groups	Tak
Workspace	Users	Tak
Connection	QueryDefs	Nie. Użycie metody CreateQueryDef powoduje automatyczne dołączenie nowych obiektów.
Connection	Recordsets	Nie. Użycie metody OpenRecordset powoduje automatyczne dołączenie nowych obiektów.
Database	Containers	Nie
Database	QueryDefs	Tylko gdy obiekt QueryDef jest nowym, nie dołączonym obiektem utworzonym bez nazwy. Zob. także opis metody CreateQueryDef.
Database	Recordsets	Nie. Użycie metody OpenRecordset powoduje automatyczne dołączenie nowych obiektów.
Database	Relations	Tak
Database	TableDefs	Tak
Group	Users	Tak
User	Groups	Tak
Container	Documents	Nie
QueryDef	Fields	Nie
QueryDef	Parameters	Nie
Recordset	Fields	Nie
Relation	Fields	Tak
TableDef	Fields	Tylko wtedy, gdy właściwość Updatable obiektu TableDef ma wartość True lub gdy obiekt TableDef jest nie dołączony.
TableDef	Indexes	Tylko wtedy, gdy właściwość Updatable obiektu TableDef ma wartość True lub gdy obiekt TableDef jest nie dołączony.
Index	Fields	Tylko wtedy, gdy obiekt Index jest nowym, nie dołączonym obiektem.
Database, Field, Index, QueryDef, TableDef	Properties	Tylko wtedy, gdy obiekt Database, Field, Index, QueryDef lub TableDef znajduje się w obszarze roboczym Microsoft Jet.
DBEngine, Parameter, Recordset, Workspace	Properties	Nie


AppendChunk - metoda (DAO)
AppendChunk - metoda

Dołącza dane z wyrażenia znakowego do obiektu Field typu Memo lub Long Binary w obiekcie Recordset.

Składnia

zestaw_rekordów ! pole.AppendChunk źródło

Składnia metody AppendChunk zawiera następujące elementy:

Element	Opis
zestaw_rekordów	Zmienna obiektowa, która reprezentuje obiekt Recordset zawierający kolekcję Fields.
pole	Zmienna obiektowa, która określa nazwę obiektu Field, którego właściwość Type ma wartość dbMemo (typ Memo), dbLongBinary (typ Long Binary) lub równoważny.
źródło	Wyrażenie typu Variant (podtyp String) lub zmienna zawierająca dane, które mają być dołączone do obiektu Field określonego przez element pole.
Użycie

Metody AppendChunk i GetChunk można stosować w celu uzyskania dostępu do podzestawów danych w polu typu Memo lub.

Metody te podczas pracy z polami typu Memo i Long Binary mogą pomóc w oszczędnej gospodarce obszarem przeznaczonym na ciągi. Niektóre operacje (na przykład kopiowanie) tworzą ciągi tymczasowe. Jeżeli miejsce przeznaczone na ciągu jest ograniczone, może okazać się, że zamiast pracować z całym polem, trzeba będzie pracować z jego wycinkami.

Jeżeli podczas wykonywania metody AppendChunk nie istnieje żaden bieżący rekord, to wystąpi błąd.

Uwagi

•	Operacja AppendChunk wykonana po raz pierwszy (po wywołaniu metody Edit lub AddNew) po prostu umieści dane w polu, zastępując nimi dotychczasowe dane. Kolejne wywołania metody AppendChunk podczas tej samej sesji Edit lub AddNew spowodują dodanie nowych danych do już istniejących.

•	W obszarze roboczym ODBCDirect użycie metody AppendChunk w trybie edycji zakończy się niepowodzeniem (chociaż nie pojawi się żaden błąd), o ile najpierw nie poddano edycji innego pola z bieżącego rekordu.

•	W obszarze roboczym ODBCDirect, po użyciu metody AppendChunk w stosunku do pola, użytkownik nie może odczytać ani zapisać tego pola instrukcją przypisania, dopóki nie opuści bieżącego rekordu i ponownie do niego nie powróci. W tym celu może skorzystać z metod MoveNext i MovePrevious.


BeginTrans, CommitTrans i Rollback - metody (DAO)
BeginTrans, CommitTrans i Rollback - metody

Podczas sesji zdefiniowanej przez obiekt Workspace metody te zarządzają przetwarzaniem transakcji w następujący sposób:

•	BeginTrans zaczyna nową transakcję.

•	CommitTrans kończy bieżącą transakcję i zapisuje wprowadzone zmiany.

•	Rollback kończy bieżącą transakcję i przywraca taki stan baz danych w obiekcie Workspace, w jakim były one przed rozpoczęciem bieżącej transakcji.

Składnia

obszar_roboczy.BeginTrans | CommitTrans [dbFlushOSCacheWrites] | Rollback

Parametr obszar_roboczy jest zmienną obiektową, określającą obiekt Workspace zawierający bazy danych, które będą używać transakcji.

Użycie

Metody te użyte w stosunku do obiektu Workspace umożliwiają traktowanie jako jedną całość ciągu zmian dokonanych w bazie danych podczas sesji.

Na ogół, transakcje są używane do zachowania integralności danych, gdy trzeba jednocześnie dokonać aktualizacji rekordów w dwóch lub więcej tabelach i zatwierdzić lub wycofać wprowadzone zmiany jednocześnie we wszystkich tabelach. Na przykład, w przypadku transferu pieniędzy z jednego konta na inne jakaś kwota może być odjęta z jednego konta i dodana do drugiego. Jeżeli któraś z tych operacji zakończy się niepomyślnie, konta nie będą się równoważyły. Dlatego też przed aktualizacją pierwszego rekordu należy użyć metody BeginTrans, a następnie w przypadku, gdy kolejna aktualizacja okaże się błędna, można użyć metody Rollback w celu cofnięcia wszystkich wprowadzonych zmian. Po pomyślnym uaktualnieniu ostatniego rekordu należy wywołać metodę CommitTrans.

Przy pracy w obszarze Microsoft Jet, w metodzie CommitTrans można użyć stałej dbFlushOSCacheWrites. Powoduje to, że aparat bazy danych natychmiast wyśle wszystkie zmiany na dysk, bez ich tymczasowego buforowania. Bez użycia tej opcji aplikacja otrzymuje z powrotem sterowanie natychmiast po wywołaniu metody CommitTrans, co stwarza niebezpieczeństwo, że użytkownik wyłączy komputer, a dane nie nie zostaną zapisane na dysk. Zastosowanie tej opcji może pogorszyć wydajność aplikacji, jednak jest celowe w sytuacjach, w których istnieje możliwość wyłączenia komputera, zanim zawartość buforów zostanie zapisana na dysku.

Ostrzeżenie   W obrębie jednego obiektu Workspace transakcje są zawsze transakcjami o zasięgu globalnym dla tego obiektu i nie ograniczają się tylko do jednego obiektu Connection lub Database. W przypadku wykonywania w obrębie transakcji Workspace operacji na więcej niż jednym obiekcie reprezentującym połączenie lub bazę danych, rozstrzygnięcie transakcji (tzn. użycie metody CommitTrans lub Rollback) wpływa na wszystkie operacje we wszystkich połączeniach i wszystkich bazach danych w obrębie określonego obszaru roboczego.

Po użyciu metody CommitTrans nie można cofnąć zmian dokonanych podczas tej transakcji, chyba że ta transakcja zostanie zagnieżdżona w innej transakcji, która zostanie wycofana. Stosując zagnieżdżanie transakcji trzeba najpierw rozstrzygnąć bieżącą transakcję, aby można było rozstrzygnąć transakcję na wyższym poziomie zagnieżdżenia.

W przypadku wykonywania jednocześnie kilku transakcji z pokrywającymi się, nie zagnieżdżonymi zakresami, można utworzyć dodatkowe obiekty Workspace dla transakcji współbieżnych.

Jeżeli obiekt zostane zamknięty bez rozstrzygnięcia oczekujących na zakończenie transakcji, to transakcje te zostaną automatycznie wycofane.

Jeżeli metoda CommitTrans lub Rollback zostanie użyta bez uprzedniego wywołania metody BeginTrans, to wystąpi błąd.

Niektóre bazy danych ISAM używane w obszarze roboczym Microsoft Jet mogą nie obsługiwać transakcji w przypadku, gdy właściwość Transactions obiektu Database lub obiektu Recordset jest ustawiona na False. Aby upewnić się, że baza danych obsługuje transakcje, należy przed użyciem metody BeginTrans sprawdzić wartość właściwości Transactions obiektu Database. W przypadku obiektu Recordset, bazującego na kilku bazach danych, należy sprawdzić właściwość Transactions obiektu Recordset. Jeżeli obiekt Recordset bazuje całkowicie na tabelach Microsoft Jet, to transakcje mogą być używane zawsze. Jednakże, obiekty Recordset bazujące na tabelach utworzonych przez inne stosowane bazy danych mogą nie obsługiwać transakcji. Na przykład, nie można używać transakcji w obiekcie Recordset bazującym na tabeli Paradox. W tym przypadku właściwość Transactions ma wartość False. Jeżeli obiekt Database lub Recordset nie obsługuje transakcji, omawiane metody są ignorowane i nie pojawia się żaden błąd.

Nie można zagnieżdżać transakcji, jeżeli dostęp do źródła danych ODBC odbywa się poprzez aparat bazy danych Microsoft Jet.

Uwagi

•	Często można poprawić efektywność działania aplikacji przez rozbijanie operacji, które wymagają dostępu do dysku na bloki transakcyjne. Powoduje to buforowanie operacji i znaczne zmniejszenie częstotliwości dostępu do dysku.

•	W obszarze roboczym Microsoft Jet transakcje są rejestrowane w pliku dziennika znajdującym się w katalogu określonym przez zmienną środowiska TEMP na stacji roboczej. Jeżeli plik dziennika transakcji wyczerpie dostępną pamięć na dysku z katalogiem TEMP, aparat bazy danych zgłosi błąd wykonania. Jeżeli w tym momencie zostanie zastosowana metoda CommitTrans, to zatwierdzona zostanie pewna, nieokreślona bliżej liczba operacji, natomiast pozostałe nie dokończone operacje są tracone i cała transakcja musi być powtórzona. Użycie metody Rollback zwalnia dziennik transakcji i wycofuje wszystkie operacje transakcji.


CancelUpdate - metoda (DAO)
CancelUpdate - metoda

Anuluje wszystkie oczekujące aktualizacje dotyczące obiektu Recordset.

Składnia

zestaw_rekordów.CancelUpdate type

Składnia metody CancelUpdate zawiera następujące elementy:

Element	Opis
zestaw_ rekordów	Zmienna obiektowa reprezentująca obiekt Recordset, dla którego odwoływana jest bieżąca aktualizacja.
typ	Opcjonalny.Stała wskazująca typ aktualizacji, tak jak zostało to przedstawione w sekcji Ustawienia (jedynie w obszarach roboczych ODBCDirect).
Ustawienia

Możliwe jest użycie następujących wartości argumentu typ, o ile tylko tryb aktualizacji grupowej jest włączony.

Stała	Opis
dbUpdateRegular	Domyślna. Anuluje bieżące zmiany, które nie zostały umieszczone w buforze aktualizacji.
dbUpdateBatch	Anuluje bieżące zmiany znajdujące się w buforze aktualizacji.
Użycie

Metoda CancelUpdate służy do anulowania oczekujących aktualizacji będących konsekwencją operacji Edit lub AddNew. Na przykład, jeżeli użytkownik wywołuje metodę Edit lub AddNew, a nie wywołał jeszcze metody Update, to metoda CancelUpdate anuluje wszystkie zmiany wykonane po wywołaniu metody Edit lub AddNew.

Aby dowiedzieć się, czy jest jakaś oczekująca operacja, która może być anulowana, należy sprawdzić właściwość EditMode obiektu Recordset.

Uwaga   Użycie metody CancelUpdate daje taki sam efekt jak przejście do następnego rekordu bez zastosowania metody Update, z tą różnicą, że bieżący rekord nie zmienia się i różne właściwości, takie jak BOF i EOF, nie są uaktualniane.


Clone - metoda (DAO)
Clone - metoda

Tworzy obiekt Recordset, będący duplikatem oryginalnego obiektu Recordset.

Składnia

Set duplikat = oryginał.Clone

Składnia metody Clone zawiera następujące elementy:

Element	Opis
duplikat	Zmienna obiektowa identyfikująca tworzony duplikat obiektu Recordset.
oyginał	Zmienna obiektowa identyfikująca obiekt Recordset, który ma być powielony.
Użycie

Metoda Clone służy do tworzenia wielu egzemplarzy tego samego obiektu Recordset. Każdy obiekt Recordset może mieć swój własny bieżący rekord. Samo wywołanie metody Clone nie zmienia danych w obiektach i w strukturach, na których bazują. Stosując metodę Clone, można używać zakładek wspólnych dla dwóch lub więcej obiektów Recordset, ponieważ zakładki tych obiektów są wzajemnie wymienialne.

Metodę Clone można zastosować wtedy, gdy trzeba wykonać operację na obiekcie Recordset, która wymaga wielu bieżących rekordów. Taki sposób jest szybszy i wydajniejszy niż otwieranie drugiego obiektu Recordset. Obiekt Recordset utworzony za pomocą metody Clone nie ma początkowo bieżącego rekordu. Aby przed użyciem klonu obiektu Recordset uczynić dany rekord bieżącym, należy ustawić właściwość Bookmark lub użyć jednej z metod Move lub jednej z metod Find albo też metody Seek.

Metoda Close użyta w stosunku do obiektu oryginalnego lub powielonego nie wpływa na drugi obiekt. Na przykład, użycie metody Close w stosunku do oryginalnego obiektu Recordset nie zamyka klonu.

Uwagi

•	Zamknięcie klonu obiektu Recordset w obrębie nie zakończonej transakcji spowoduje niejawną operację Rollback.

•	Podczas klonowania obiektu Recordset typu tabela w obszarze roboczym Microsoft Jet ustawienie właściwości Index nie jest klonowane do nowej kopii obiektu Recordset. Ustawienie właściwości Index trzeba skopiować ręcznie.

•	Metodę Clone można stosować z obiektem Recordset typu progresywnego tylko w obszarze roboczym ODBCDirect.


Close - metoda (DAO)
Close - metoda

Zamyka otwarty obiekt DAO.

Składnia

obiekt.Close

Parametr obiekt jest zmienną obiektową, która określa otwarty obiekt Connection, Database, Recordset lub Workspace.

Użycie

Zamknięcie otwartego obiektu powoduje, że obiekt jest usuwany z kolekcji, do której został dołączony. Próba zamknięcia domyślnego obszaru roboczego jest ignorowana.

Jeżeli w momencie wywołania metody Close obiekt Connection, Database, Recordset lub Workspace o nazwie obiekt jest już zamknięty, pojawia się błąd wykonania.

Ostrzeżenie   Po wyjściu z procedury deklarującej obiekty Connection, Database lub Recordset, obiekty te są zamykane, wszystkie nie zakończone transakcje są wycofywane i wszystkie nie zapisane zmiany edycyjne danych są tracone.

Próba zamknięcia obiektu Connection lub Database, gdy obiekt ten ma otwarte obiekty Recordset, spowoduje, że obiekty te zostaną zamknięte, a wszystkie nie zapisane aktualizacje i zmiany edycyjne anulowane. Podobnie, próba zamknięcia obiektu Workspace z otwartymi obiektami Connection lub Database pociągnie za sobą zamknięcie tych obiektów, które z kolei zamkną swoje obiekty Recordset.

Użycie metody Close w stosunku do obiektu Recordset, oryginalnego lub klonowanego, nie wpływa na inny obiekt Recordset.

Aby usunąć obiekty z modyfikowalnych kolekcji innych niż kolekcje Connections, Databases, Recordsets i Workspaces, należy w stosunku do tych kolekcji użyć metody Delete. Nie można dodać nowego elementu do kolekcji Containers, Documents i Errors.

Alternatywą dla metody Close jest ustawienie zmiennej obiektowej na wartość Nothing (Set dbsTymcz = Nothing).


CompactDatabase - metoda (DAO)
CompactDatabase - metoda

Kopiuje i defragmentuje zamkniętą bazę danych oraz umożliwia zmianę wersji, porządku sortowania i szyfrowania (dotyczy tylko obszaru roboczego Microsoft Jet).

Składnia

DBEngine.CompactDatabase stara_bd, nowa_bd, region, opcje, hasło

Składnia metody CompactDatabase zawiera następujące elementy:

Element	Opis
stara_bd	Wartość typu String, który określa istniejącą, zamkniętą bazę danych. Może to być pełna nazwa ścieżki i pliku, na przykład "C:\db1.mdb". Jeżeli nazwa pliku zawiera rozszerzenie, należy je podać. Jeżeli w sieci występuje ścieżka sieciowa, można także ją podać, na przykład "\\serwer1\użytk1\kat1\db1.mdb".
nowa_bd	Wartość typu String, która jest nazwą pliku (i ścieżki) tworzonej bazy danych po defragmentacji. Można także podać ścieżkę sieciową. Argument nowa_bd nie może określać takiej samej nazwy pliku bazy danych, jaka została użyta w argumencie stara_bd.
region	Element nieobowiązkowy typu Variant. Jest to wyrażenie znakowe, określające porządek sortowania dla tworzenia bazy danych nowa_bd, jak określono poniżej w sekcji "Ustawienia". Jeżeli argument ten zostanie pominięty, ustawienia regionalne dla bazy danych nowa_bd są takie same jak dla bazy stara_bd.
	Można także utworzyć hasło dla bazy danych nowa_bd przez dołączenie ciągu znaków oznaczającego hasło (rozpoczynając od ";pwd=") do stałej w argumencie region, na przykład:
	dbLangSpanish & ";pwd=NoweHasło"
	Jeżeli porządek sortowania ma być taki sam jak dla bazy danych stara_bd (wartość domyślna), ale hasło ma być nowe, to należy podać to nowe hasło:
	";pwd=NoweHasło"
opcje	Element nieobowiązkowy. Stała lub kombinacja stałych, która wskazuje jedną lub więcej opcji, jakie określono poniżej w sekcji "Ustawienia". Opcje można łączyć, sumując odpowiednie stałe.
hasło	Element nieobowiązkowy typu Variant. Jest to wyrażenie znakowe zawierające hasło, jeżeli baza danych jest chroniona poprzez hasło. Przed faktycznym hasłem musi znajdować się ciąg ";pwd=". Jeżeli hasło jest podane w argumencie region, to ten argument zostanie zignorowany.
Ustawienia

W argumencie region można użyć jednej z następujących stałych do określenia właściwości CollatingOrder określającej sposób porównywania ciągów znaków.

Stała	Porządek sortowania
dbLangGeneral	angielski, niemiecki, francuski, portugalski, włoski i hiszpański współczesny
dbLangArabic	arabski
dbLangChineseSimplified	chiński uproszczony
dbLangChineseTraditional	chiński tradycyjny
dbLangCyrillic	rosyjski
dbLangCzech	czeski
dbLangDutch	holenderski
dbLangGreek	grecki
dbLangHebrew	hebrajski
dbLangHungarian	węgierski
dbLangIcelandic	islandzki
dbLangJapanese	japoński
dbLangKorean	koreański
dbLangNordic	języki nordyckie (tylko aparat baz danych Microsoft Jet wersja 1.0)
dbLangNorwDan	norweski i duński
dbLangPolish	polski
dbLangSlovenian	słoweński
dbLangSpanish	hiszpański tradycyjny
dbLangSwedFin	szwedzki i fiński
dbLangThai	tajlandzki
dbLangTurkish	turecki
Do określenia, czy podczas defragmentacji baza danych ma być szyfrowana czy rozszyfrowywana, można użyć w argumencie opcje jednej z następujących stałych:

Stała	Opis
dbEncrypt	Podczas defragmentacji szyfruje bazę danych.
dbDecrypt	Podczas defragmentacji rozszyfrowuje bazę danych.
Jeżeli pominięto stałą dotyczącą szyfrowania lub jeżeli podano obie stałe dbDecrypt i dbEncrypt, baza danych nowa_bd będzie szyfrowana w taki sam sposób, jak baza stara_bd.

W argumencie opcje można użyć jednej z poniżej podanych stałych do określenia wersji formatu danych dla defragmentowanej bazy danych. Stała ta wpływa tylko na format danych w bazie danych nowa_bd, nie oddziaływując na żadne obiekty zdefiniowane przez program Microsoft Access, takie jak formularze i raporty.

Stała	Opis
dbVersion10	Tworzy bazę danych, która podczas defragmentacji używa formatu plików aparatu bazy danych Microsoft Jet w wersji 1.0.
dbVersion11	Tworzy bazę danych, która podczas defragmentacji używa formatu plików aparatu bazy danych Microsoft Jet w wersji 1.1.
dbVersion20	Tworzy bazę danych, która podczas defragmentacji używa formatu plików aparatu bazy danych Microsoft Jet w wersji 2.0.
dbVersion30	Tworzy bazę danych, która podczas defragmentacji używa formatu plików aparatu bazy danych Microsoft Jet w wersji 3.0 (zgodnej z wersją 3.5).
Można podać tylko jedną stałą dotyczącą wersji. Jeżeli stała określająca wersję zostanie pominięta, baza danych nowa_bd będzie miała tę samą wersję co baza stara_bd. Defragmentację bazy danych nowa_bd można wykonać tylko w wersji takiej samej lub nowszej w stosunku do wersji bazy danych stara_bd.

Użycie

W miarę dokonywania zmian, baza danych może ulec fragmentacji i może zajmować więcej pamięci dyskowej niż to konieczne. Okresowo do defragmentacji bazy danych można użyć metody CompactDatabase. Baza danych po defragmentacji jest zwykle mniejsza i często działa szybciej. Podczas kopiowania i defragmentacji bazy danych można także zmienić porządek sortowania, szyfrowanie lub wersję formatu danych.

Przed przystąpieniem do defragmentacji bazę danych stara_bd trzeba zamknąć. W środowisku wielodostępnym inni użytkownicy nie mogą z tej bazy korzystać, jeżeli któryś z użytkowników wykonuje defragmentację bazy danych. Jeżeli baza danych nie jest zamknięta lub nie jest dostępna w trybie użytkowania wyłącznym, pojawi się błąd.

Ponieważ metoda CompactDatabase tworzy kopię bazy danych, potrzebna jest wystarczająco duża pamięć dyskowa dla zapisania zarówno oryginalnej bazy danych, jak i jej kopii. W przypadku braku wystarczającej pamięci dyskowej, operacja defragmentacji zakończy się niepowodzeniem. Powielona baza danych nowa_bd nie może znajdować się na tym samym dysku co baza danych. Po udanej defragmentacji można usunąć plik stara_bd i nadać plikowi nowa_bd nazwę oryginalnej bazy danych.

Metoda CompactDatabase kopiuje wszystkie dane i ustawienia uprawnień dotyczących bezpieczeństwa danych z bazy danych określonej przez stara_bd do bazy danych określonej przez argument nowa_bd.

Jeżeli metodę CompactDatabase stosuje się do konwersji bazy danych w wersji 1.x na bazę danych w wersji 2.x lub 3.x, to przekształconą bazę danych mogą otworzyć tylko aplikacje używające aparatu Microsoft Jet w wersji 2.5 lub 3.x.

Uwaga Użycie metody CompactDatabase w obszarze roboczym ODBCDirect nie zwraca błędu, ale zamiast tego ładuje do pamięci aparat bazy danych Microsoft Jet.

Ostrzeżenie   Ponieważ metoda CompactDatabase nie wykonuje konwersji obiektów programu Microsoft Access, nie należy używać jej do konwersji bazy danych zawierającej takie obiekty. Aby wykonać konwersję bazy danych, która zawiera obiekty Microsoft Access, należy w menu Narzędzia wskazać opcję Narzędzia bazy danych, a następnie wybrać polecenie Konwertuj bazę danych.


CopyQueryDef - metoda (DAO)
CopyQueryDef - metoda

Zwraca obiekt QueryDef, który jest kopią obiektu QueryDef użytego do utworzenia obiektu Recordset określonego przez argument zestaw_rekordów (tylko obszary robocze Microsoft Jet).

Składnia

Set def_kwerendy = zestaw_rekordów.CopyQueryDef

Składnia metody CopyQueryDef zawiera następujące elementy:

Element	Opis
def_kwerendy	Zmienna obiektowa, reprezentująca tworzoną kopię obiektu QueryDef.
zestaw_ rekordów	Zmienna obiektowa określająca obiekt Recordset utworzony z oryginalnego obiektu QueryDef.
Użycie

Metodę CopyQueryDef można stosować do utworzenia nowego obiektu QueryDef, który jest duplikatem obiektu QueryDef użytego do utworzenia obiektu Recordset.

Jeżeli obiekt QueryDef nie był wykorzystywany do utworzenia tego obiektu Recordset, wystąpi błąd. Przed użyciem metody CopyQueryDef należy najpierw otworzyć obiekt Recordset, korzystając z metody OpenRecordset.

Metoda ta jest użyteczna, jeśli zachodzi potrzeba utworzenia obiektu Recordset z obiektu QueryDef i przekazania tego obiektu Recordset do funkcji, a funkcja musi utworzyć w języku SQL ekwiwalent kwerendy, na przykład po to, aby ją nieco zmodyfikować.


CreateDatabase - metoda (DAO)
CreateDatabase - metoda

Tworzy nowy obiekt Database, zapisuje bazę danych na dysku i zwraca otwarty obiekt Database (tylko obszary robocze Microsoft Jet).

Składnia

Set baza_danych = obszar_roboczy.CreateDatabase (nazwa, region, opcje)

Składnia metody CreateDatabase zawiera następujące elementy:

Element	Opis
baza_danych	Zmienna obiektowa reprezentująca tworzony obiekt Database.
obszar_roboczy	Zmienna obiektowa, która określa istniejący obiekt Workspace, który będzie zawierał bazę danych. Jeżeli parametr obszar_roboczy zostanie pominięty, metoda CreateDatabase użyje domyślnego obiektu Workspace.
nazwa	Wartość typu String zawierająca maksymalnie 255 znaków, która jest nazwą pliku tworzonej bazy danych. Może to być pełna nazwa ścieżki i pliku, na przykład "C:\db1.mdb". Jeżeli nie zostanie podane rozszerzenie nazwy pliku, to plik ten otrzyma rozszerzenie .mdb. Jeżeli w sieci występuje ścieżka sieciowa, można także ją podać, na przykład "\\serwer1\użytk1\kat1\db1". Za pomocą tej metody można utworzyć tylko pliki bazy danych o rozszerzeniu .mdb.
region	Wyrażenie znakowe, które okrwyrażenie znakoweśla porządek sortowania dla tworzenia bazy danych, jak podano poniżej w sekcji "Ustawienia". Argument ten jest konieczny, gdyż inaczej wystąpi błąd.
	Można także utworzyć hasło dla nowego obiektu Database przez dołączenie ciągu znaków oznaczającego hasło (rozpoczynając od ";pwd=") do stałej w argumencie region, na przykład:
	dbLangSpanish & ";pwd=NoweHasło"
	Jeżeli ma być przyjęty domyślny porządek sortowania, a hasło ma być nowe, to należy podać to nowe hasło:
	";pwd=NoweHasło"
opcje	Element nieobowiązkowy. Stała lub kombinacja stałych, która wskazuje jedną lub więcej opcji, jakie określono poniżej w sekcji "Ustawienia". Opcje można łączyć, sumując odpowiednie stałe.
Ustawienia

W argumencie region można użyć jednej z następujących stałych do określenia właściwości CollatingOrder wyznaczającej sposób porównywania ciągów znaków.

Stała	Porządek sortowania
dbLangGeneral	angielski, niemiecki, francuski, portugalski, włoski i hiszpański współczesny
dbLangArabic	arabski
dbLangChineseSimplified	chiński uproszczony
dbLangChineseTraditional	chiński tradycyjny
dbLangCyrillic	rosyjski
dbLangCzech	czeski
dbLangDutch	holenderski
dbLangGreek	grecki
dbLangHebrew	hebrajski
dbLangHungarian	węgierski
dbLangIcelandic	islandzki
dbLangJapanese	japoński
dbLangKorean	koreański
dbLangNordic	języki nordyckie (tylko aparat baz danych Microsoft Jet wersja 1.0)
dbLangNorwDan	norweski i duński
dbLangPolish	polski
dbLangSlovenian	słoweński
dbLangSpanish	hiszpański tradycyjny
dbLangSwedFin	szwedzki i fiński
dbLangThai	tajlandzki
dbLangTurkish	turecki
W argumencie opcje można podać jedną lub więcej następujących stałych, aby w ten sposób określić wersję formatu danych i czy baza danych ma być szyfrowana.

Stała	Opis
dbEncrypt	Tworzy zaszyfrowaną bazę danych.
dbVersion10	Tworzy bazę danych, która używa formatu plików aparatu bazy danych Microsoft Jet w wersji 1.0.
dbVersion11	Tworzy bazę danych, która używa formatu plików aparatu bazy danych Microsoft Jet w wersji 1.1.
dbVersion20	Tworzy bazę danych, która używa formatu plików aparatu bazy danych Microsoft Jet w wersji 2.0.
dbVersion30	(Wartość domyślna) Tworzy bazę danych, która używa formatu plików aparatu bazy danych Microsoft Jet w wersji 3.0 (zgodnego z formatem wersji 3.5).
Jeżeli stała dotycząca szyfrowania zostanie pominięta, metoda CreateDatabase tworzy nie szyfrowaną bazę danych. Można określić tylko jedną wersję formatu danych. Jeżeli stała dotycząca wersji zostanie pominięta, metoda CreateDatabase tworzy bazę danych, która używa formatu plików aparatu bazy danych Microsoft Jet w wersji 3.0.

Użycie

Metoda CreateDatabase tworzy i otwiera nową, pustą bazę danych, zwracając obiekt Database. Użytkownik musi sam uzupełnić jej strukturę i zawartość, wykorzystując dodatkowe obiekty DAO. Do wykonania częściowej lub pełnej kopii istniejącej bazy danych można użyć metody CompactDatabase, a następnie kopię tę dopasować do konkretnych potrzeb.


CreateField - metoda (DAO)
CreateField - metoda

Tworzy nowy obiekt Field (tylko obszary robocze Microsoft Jet).

Składnia

Set pole = obiekt.CreateField (nazwa, typ, rozmiar)

Składnia metody CreateField zawiera następujące elementy:

Element	Opis
pole	Zmienna obiektowa reprezentująca tworzony obiekt Field.
obiekt	Zmienna obiektowa reprezentująca obiekt Index, Relation lub TableDef, dla którego chcemy utworzyć nowy obiekt Field.
nazwa	Element nieobowiązkowy typu Variant (podtyp String) określający jednoznacznie nazwę nowego obiektu Field. Szczegółowe informacje o prawidłowych nazwach obiektu Field można znaleźć w opisie właściwości Name.
typ	Element nieobowiązkowy. Jest to stała określająca typ danych nowego obiektu Field. Szczegółowe informacje o dopuszczalnych typach danych można znaleźć w opisie właściwości Type.
rozmiar	Element nieobowiązkowy typu Variant (podtyp Integer) określający w bajtach maksymalny rozmiar obiektu Field zawierającego tekst. Szczegółowe informacje o dopuszczalnych wartościach argumentu rozmiar można znaleźć w opisie właściwości Size. Ten argument jest ignorowany dla pól numerycznych i pól o stałej szerokości.
Użycie

Metodę CreateField można stosować do tworzenia nowego pola oraz do określania nazwy, typu danych i rozmiaru tego pola. Jeżeli w wywołaniu metody CreateField zostanie pominięty jeden lub więcej elementów nieobowiązkowych, to przed dołączeniem nowego obiektu do kolekcji można użyć stosownej instrukcji przypisania w celu ustawienia lub zmiany wartości odpowiedniej właściwości. Po dołączeniu nowego obiektu można zmienić niektóre, ale nie wszystkie ustawienia jego właściwości. Szczegółowe informacje na ten temat można znaleźć w opisie określonej właściwości.

Argumenty typ i rozmiar odnoszą się tylko do obiektów Field obiektu TableDef. Argumenty te są ignorowane, gdy obiekt Field jest kojarzony z obiektem Index lub z obiektem Relation.

Jeżeli argument nazwa odnosi się do obiektu, który już wchodzi w skład kolekcji, to użycie metody Append spowoduje błąd wykonania.

W celu usunięcia obiektu Field z kolekcji Fields należy w stosunku do tej kolekcji użyć metody Delete. Nie można usunąć obiektu Field z kolekcji Fields obiektu TableDef po utworzeniu indeksu, który odwołuje się do tego pola.


CreateGroup - metoda (DAO)
CreateGroup - metoda

Tworzy nowy obiekt Group (tylko obszary robocze Microsoft Jet).

Składnia

Set grupa = obiekt.CreateGroup (nazwa, pid)

Składnia metody CreateGroup zawiera następujące elementy:

Element	Opis
grupa	Zmienna obiektowa reprezentująca tworzony obiekt Group.
obiekt	Zmienna obiektowa reprezentująca obiekt User lub obiekt Workspace, dla którego chcemy utworzyć nowy obiekt Group.
nazwa	Element nieobowiązkowy typu Variant (podtyp String), który nadaje jednoznaczną nazwę nowemu obiektowi. Szczegółowe informacje o prawidłowych nazwach obiektu Group można znaleźć w opisie właściwości Name.
pid	Element nieobowiązkowy typu Variant (podtyp String) zawierający identyfikator osobisty grupy. Identyfikator ten musi zawierać od 4 do 20 znaków alfanumerycznych. Więcej informacji o dopuszczalnych identyfikatorach osobistych można znaleźć w opisie właściwości PID.
Użycie

Metoda CreateGroup służy do utworzenia nowego obiektu Group dla obiektu User lub Workspace. Jeżeli w wywołaniu metody CreateGroup zostanie pominięty jeden lub oba argumenty nieobowiązkowe, to przed dołączeniem nowego obiektu do kolekcji można użyć stosownej instrukcji przypisania do ustawienia lub zmiany wartości odpowiedniej właściwości. Po dołączeniu obiektu można zmienić niektóre, ale nie wszystkie ustawienia jego właściwości. Szczegółowe informacje na ten temat można znaleźć w opisie określonej właściwości.

Jeżeli argument nazwa odnosi się do obiektu, który wchodzi już w skład kolekcji, to użycie metody Append spowoduje błąd wykonania.

W celu usunięcia obiektu Group z kolekcji, należy w stosunku do kolekcji Groups użyć metody Delete.


CreateIndex - metoda (DAO)
CreateIndex - metoda

Tworzy nowy obiekt Index (tylko obszary robocze Microsoft Jet)

Składnia

Set indeks = def_tabeli.CreateIndex (nazwa)

Składnia metodyCreateIndex zawiera następujące elementy:

Element	Opis
indeks	Zmienna obiektowa reprezentująca tworzony indeks.
def_tabeli	Zmienna obiektowa reprezentująca obiekt TableDef, który chcemy użyć do utworzenia nowego obiektu Index.
nazwa	Element nieobowiązkowy typu Variant (podtyp String) który nadaje jednoznaczną nazwę nowemu obiektowi Index. Szczegółowe informacje o prawidłowych nazwach obiektu Index można znaleźć w opisie właściwości Name.
Użycie

Metoda CreateIndex służy do utworzenia nowego obiektu Index dla obiektu TableDef. Jeżeli w wywołaniu metody CreateIndex zostanie pominięty element nieobowiązkowy nazwa, to przed dołączeniem nowego obiektu do kolekcji można użyć odpowiedniej instrukcji przypisania do ustawienia lub zmiany wartości właściwości Name. Po dołączeniu obiektu można lub nie można ustawić właściwości Name, w zależności od typu obiektu, który zawiera kolekcję Indexes. Więcej informacji na ten temat można znaleźć w opisie właściwości Name.

Jeżeli argument nazwa odnosi się do obiektu, który wchodzi już w skład kolekcji, to użycie metody Append spowoduje błąd wykonania.

W celu usunięcia obiektu Index z kolekcji należy w stosunku do tej kolekcji użyć metody Delete.


CreateProperty - metoda (DAO)
CreateProperty - metoda

Tworzy nowy definiowany przez użytkownika obiekt Property (tylko obszary robocze Microsoft Jet).

Składnia

Set właściwość = obiekt.CreateProperty (nazwa, typ, wartość, DDL)

Składnia metody CreateProperty zawiera następujące elementy:

Element	Opis
właściwość	Zmienna obiektowa reprezentująca tworzony obiekt Property.
obiekt	Zmienna obiektowa reprezentująca obiekt Database, Field, Index, QueryDef, Document lub TableDef, którego chcemy użyć do utworzenia nowego obiektu Property.
nazwa	Element nieobowiązkowy typu Variant (podtyp String), który nadaje niepowtarzalną nazwę nowemu obiektowi Property. Szczegółowe informacje o prawidłowych nazwach obiektów typu Property można znaleźć w opisie właściwości Name.
typ	Element nieobowiązkowy. Stała, która definiuje typ danych nowego obiektu Property. Informacje o poprawnych typach danych można znaleźć w opisie właściwości Type.
wartość	Element nieobowiązkowy typu Variant zawierający początkową wartość właściwości. Szczegółowe informacje na ten temat można znaleźć w opisie właściwości Value.
DDL	Element nieobowiązkowy typu Variant (podtyp Boolean). Wskazuje, czy obiekt Property jest obiektem DDL. Domyślną wartością tego argumentu jest False. Jeżeli argument DDL jest ustawiony na True, użytkownicy nie mogą zmienić ani usunąć tego obiektu Property, chyba że mają uprawnienie dbSecWriteDef.
Użycie

Definiowany przez użytkownika obiekt Property można utworzyć tylko w kolekcji Properties obiektu, który jest obiektem trwałym.

Jeżeli w wywołaniu metody CreateProperty zostanie pominięty jeden lub więcej elementów nieobowiązkowych, to przed dołączeniem nowego obiektu do kolekcji można użyć odpowiedniej instrukcji przypisania do ustawienia lub zmiany wartości odpowiedniej właściwości. Po dołączeniu obiektu można zmienić niektóre, ale nie wszystkie ustawienia właściwości tego obiektu. Szczegółowe informacje na ten temat można znaleźć w opisie właściwości Name, Type i Value.

Jeżeli argument nazwa odnosi się do obiektu, który jest już elementem kolekcji, to wywołanie metody Append spowoduje błąd wykonania.

W celu usunięcia z kolekcji zdefiniowanego przez użytkownika obiektu Property należy w stosunku do kolekcji Properties użyć metody Delete.

Uwaga   Jeżeli argument DDL zostanie pominięty, to przyjmie on wartość domyślną False (inny niż język definicji danych (DDL)). Ponieważ nie istnieje żadna właściwość odnosząca się bezpośrednio do DDL, trzeba usunąć lub ponownie utworzyć obiekt Property, którego typ chcemy zmienić z DDL na inny niż DDL.


CreateQueryDef - metoda (DAO)
CreateQueryDef - metoda

Tworzy nowy obiekt QueryDef w określonym obiekcie Connection lub Database.

Składnia

Set def_kwerendy = obiekt.CreateQueryDef (nazwa, tekst_sql)

Składnia metody CreateQueryDef zawiera następujące elementy:

Element	Opis
def_kwerendy	Zmienna obiektowa wskazująca tworzony obiekt QueryDef.
obiekt	Zmienna obiektowa reprezentująca otwarty obiekt Connection lub Database, który będzie zawierał nowy obiekt QueryDef.
nazwa	Element nieobowiązkowy typu Variant (podtyp String), który nadaje nowemu obiektowi QueryDef niepowtarzalną nazwę.
tekst_sql	Element nieobowiązkowy typu Variant (podtyp String), który jest instrukcją SQL definiującą obiekt QueryDef. Jeżeli argument ten zostanie pominięty, można zdefiniować obiekt QueryDef, ustawiając jego właściwość SQL przed lub po dołączeniu tego obiektu do kolekcji.
Użycie

Jeżeli w obszarze roboczym Microsoft Jet przy tworzeniu obiektu QueryDef nazwa nie będzie ciągiem o długości zerowej, to utworzony obiekt QueryDef zostanie automatycznie dołączony do kolekcji QueryDefs. W obszarze roboczym ODBCDirect obiekty QueryDef są zawsze obiektami tymczasowymi.

W obszarze roboczym ODBCDirect argument tekst_sql może określać instrukcję SQL lub procedurę pamiętaną na serwerze Microsoft SQL wraz z jej parametrami.

Jeżeli obiekt określony przez argument nazwa znajduje się już w kolekcji, wystąpi błąd wykonania. Można utworzyć tymczasowy obiekt QueryDef, wywołując metodę CreateQueryDef z argumentem nazwa w postaci ciągu o długości zerowej. Obiekt tymczasowy można również uzyskać, ustawiając właściwość Name nowo utworzonego obiektu QueryDef na ciąg o długości zerowej (""). Tymczasowe obiekty QueryDef są bardzo użyteczne, gdyż pozwalają wielokrotnie wykonywać dynamiczne instrukcje SQL bez potrzeby tworzenia nowych, trwałych obiektów w kolekcji QueryDefs. Tymczasowego obiektu QueryDef nie można dołączyć do żadnej kolekcji, ponieważ ciąg o długości zerowej nie jest poprawną nazwą dla trwałego obiektu QueryDef. W każdej chwili można ustawić właściwości Name i SQL nowo utworzonego obiektu QueryDef i następnie dołączyć go do kolekcji QueryDefs.

Aby wykonać instrukcję SQL w obiekcie QueryDef, należy użyć metody Execute lub OpenRecordset.

Używanie obiektu QueryDef jest preferowanym sposobem realizacji kwerend przekazujących SQL, skierowanych do baz danych ODBC.

Aby usunąć obiekt QueryDef z kolekcji QueryDefs w bazie danych Microsoft Jet, należy w stosunku do tej kolekcji użyć metody Delete. Natomiast dla bazy danych ODBCDirect, należy użyć metody Close w stosunku do obiektu QueryDef.


CreateRelation - metoda (DAO)
CreateRelation - metoda

Tworzy nowy obiekt Relation (tylko obszary robocze Microsoft Jet).

Składnia

Set związek = baza_danych.CreateRelation (nazwa, tabela, tabela_obca, atrybuty)

Składnia metody CreateRelation zawiera następujące elementy:

Element	Opis
związek	Zmienna obiektowa reprezentująca tworzony obiekt Relation.
baza_danych	Zmienna obiektowa reprezentująca obiekt Database, dla którego chcemy utworzyć nowy obiekt Relation.
nazwa	Element nieobowiązkowy typu Variant (podtyp String), który nadaje niepowtarzalną nazwę obiektowi Relation. Szczegółowe informacje o prawidłowych nazwach obiektów Relation można znaleźć w opisie właściwości Name.
tabela	Element nieobowiązkowy typu Variant (podtyp String), który podaje nazwę tabeli podstawowej w tym związku. Jeżeli tabela nie istnieje przed dołączeniem obiektu Relation, pojawia się błąd wykonania.
tabela_obca	Element nieobowiązkowy typu Variant (podtyp String), który podaje nazwę tabeli obcej w tym związku. Jeżeli tabela nie istnieje przed dołączeniem obiektu Relation, pojawia się błąd wykonania.
atrybuty	Element nieobowiązkowy. Jest to stała lub kombinacja stałych, która zawiera informacje o typie związku. Szczegółowe informacje na ten temat można znaleźć w opisie właściwości Attributes.
Użycie

Obiekt Relation dostarcza informacje dla aparatu bazy danych Microsoft Jet o związku pomiędzy polami w dwóch obiektach TableDef lub QueryDef. Za pomocą właściwości Attributes można zaimplementować integralność referencyjną.

Jeżeli w wywołaniu metody CreateRelation zostanie pominięty jeden lub więcej elementów nieobowiązkowych, to przed dołączeniem nowego obiektu do kolekcji można użyć instrukcji przypisania w celu ustawienia odpowiedniej właściwości tego obiektu. Po dołączeniu obiektu nie można zmienić ustawień jego właściwości. Szczegółowe informacje na ten temat można znaleźć w opisach poszczególnych właściwości.

Przed zastosowaniem metody Append w stosunku do obiektu Relation trzeba dołączyć odpowiednie obiekty Field, aby zdefiniować tabele związku dla klucza podstawowego i klucza obcego.

Jeżeli element nazwa odnosi się do obiektu, który znajduje się już w kolekcji, lub jeżeli nazwy obiektów Field umieszczonych w podrzędnej kolekcji Fields są nieprawidłowe, to wywołanie metody Append spowoduje błąd wykonania.

Nie można ustalić lub utrzymać związku pomiędzy tabelą replikowaną i tabelą lokalną.

Aby usunąć obiekt Relation z kolekcji Relations, należy w stosunku do tej kolekcji użyć metody Delete.


CreateTableDef - metoda (DAO)
CreateTableDef - metoda

Tworzy nowy obiekt TableDef (tylko obszary robocze Microsoft Jet).

Składnia

Set def_tabeli = baza_danych.CreateTableDef (nazwa, atrybuty, źródło, połączenie)

Składnia metody CreateTableDef zawiera następujące elementy:

Element	Opis
def_tabeli	Zmienna obiektowa reprezentująca tworzony obiekt TableDef.
baza_danych	Zmienna obiektowa reprezentująca obiekt Database, który chcemy wykorzystać do utworzenia nowego obiektu TableDef.
nazwa	Element nieobowiązkowy typu Variant (podtyp String), który nadaje niepowtarzalną nazwę nowemu obiektowi TableDef. Szczegółowe informacje o prawidłowych nazwach obiektów TableDef można znaleźć w opisie właściwości Name.
atrybuty	Element nieobowiązkowy. Jest to stała lub kombinacja stałych, która określa jedną lub więcej cech nowego obiektu TableDef. Więcej informacji na ten temat można znaleźć w opisie właściwości Attributes.
źródło	Element nieobowiązkowy typu Variant (podtyp String) zawierający nazwę tabeli zewnętrznej bazy danych, która jest oryginalnym (pierwotnym) źródłem danych. Właściwość SourceTableName nowego obiektu TableDef przyjmuje postać ciągu źródło.
połączenie	Element nieobowiązkowy. Typ Variant (podtyp String) zawierający informacje o źródle otwartej bazy danych, bazy danych używanej w kwerendzie przekazującej lub tabeli połączonej. Więcej informacji na temat prawidłowych ciągów połączenia można znaleźć w opisie właściwości Connect.
Użycie

Jeżeli przy wywołaniu metody CreateTableDef pominięto jeden lub więcej elementów nieobowiązkowych, to przed dołączeniem nowego obiektu do kolekcji można użyć instrukcji przypisania w celu ustawienia odpowiedniej właściwości tego obiektu. Po dołączeniu obiektu można zmienić niektóre, ale nie wszystkie ustawienia jego właściwości. Szczegółowe informacje na ten temat można znaleźć w opisie poszczególnych właściwości.

Jeżeli element nazwa odnosi się do obiektu, który znajduje się już w kolekcji, lub jeżeli określono niedozwoloną właściwość dołączanych obiektów TableDef lub Field, to wywołanie metody Append spowoduje błąd wykonania. Nie można także dołączyć obiektu TableDef do kolekcji TableDefs, dopóki dla obiektu TableDef nie zostanie zdefiniowany co najmniej jeden obiekt Field.

Aby usunąć obiekt TableDef z kolekcji TableDefs, należy w stosunku do tej kolekcji użyć metody Delete.


CreateUser - metoda (DAO)
CreateUser - metoda

Tworzy nowy obiekt User (tylko obszary robocze Microsoft Jet)

Składnia

Set użytkownik = obiekt.CreateUser (nazwa, pid, hasło)

Składnia metody CreateUser zawiera następujące elementy:

Element	Opis
użytkownik	Zmienna obiektowa reprezentująca tworzony obiekt User.
obiekt	Zmienna obiektowa reprezentująca obiekt Group lub Workspace, dla którego chcemy utworzyć nowy obiekt User.
nazwa	Element nieobowiązkowy typu Variant (podtyp String), który nadaje niepowtarzalną nazwę obiektowi User. Szczegółowe informacje o prawidłowych nazwach obiektów User można znaleźć w opisie właściwości Name.
pid	Element nieobowiązkowy typu Variant (podtyp String) zawierający identyfikator osobisty konta użytkownika. Identyfikator musi zawierać od 4 do 20 znaków alfanumerycznych. Więcej informacji o prawidłowych identyfikatorach osobistych można znaleźć w opisie właściwości PID.
hasło	Element nieobowiązkowy typu Variant (podtyp String) zawierający hasło dla nowego obiektu User. Hasło może składać się z maksymalnie 14 znaków z wyjątkiem znaku o kodzie 0 (zero) zestawu znaków ASCII. Więcej informacji o dozwolonych hasłach można znaleźć w opisie właściwości Password.
Użycie

Jeżeli przy wywołaniu metody CreateUser pominięto jeden lub więcej elementów nieobowiązkowych, to przed dołączeniem nowego obiektu do kolekcji można użyć instrukcji przypisania w celu ustawienia odpowiedniej właściwości tego obiektu. Po dołączeniu obiektu można zmienić niektóre, ale nie wszystkie ustawienia jego właściwości. Szczegółowe informacje na ten temat można znaleźć w opisach właściwości PID, Name, and Password.

Jeżeli element nazwa odnosi się do obiektu, który znajduje się już w kolekcji, to wywołanie metody Append spowoduje błąd wykonania.

Aby usunąć obiekt User z kolekcji Users, należy w stosunku do tej kolekcji użyć metody Delete.


CreateWorkspace - metoda (DAO)
CreateWorkspace - metoda

Tworzy nowy obiekt Workspace.

Składnia

Set obszar_rob = CreateWorkspace (nazwa, użytkownik, hasło, typ)

Składnia metody CreateWorkspace zawiera następujące elementy:

Element	Opis
obszar_rob	Zmienna obiektowa reprezentująca tworzony obiekt Workspace.
nazwa	Wartość typu String która nadaje niepowtarzalną nazwę obiektowi Workspace. Szczegółowe informacje o prawidłowych nazwach obiektów Workspace można znaleźć w opisie właściwości Name.
użytkownik	Wartość typu String, która określa właściciela nowego obiektu Workspace. Więcej informacji na ten temat można znaleźć w opisie właściwości UserName.
hasło	Wartość typu String zawierająca hasło dla nowego obiektu Workspace. Hasło może składać się z maksymalnie 14 znaków z wyjątkiem znaku o kodzie 0 (zero) zestawu znaków ASCII. Więcej informacji o prawidłowych hasłach można znaleźć w opisie właściwości Password.
typ	Element nieobowiązkowy. Jest to stała określająca typ obszaru roboczego, jak opisano w sekcji "Ustawienia".
Ustawienia

Dla elementu typ można stosować następujące stałe:

Stała	Opis
dbUseJet	Tworzy obszar roboczy Microsoft Jet.
dbUseODBC	Tworzy obszar roboczy ODBCDirect.
Użycie

Zaraz po użyciu metody CreateWorkspace do utworzenia nowego obiektu Workspace rozpoczyna się sesja Workspace, podczas której można odwoływać się z aplikacji do tego obiektu Workspace.

Obiekty Workspace nie są obiektami trwałymi i nie można zapisywać ich na dysku. Po utworzeniu obiektu Workspace nie można zmienić żadnego ustawienia jego właściwości, z wyjątkiem właściwości Name, którą można zmodyfikować przed dołączeniem obiektu Workspace do kolekcji Workspaces.

Nowego obiektu Workspace nie trzeba dołączać do kolekcji przed jego użyciem. Nowo utworzony obiekt Workspace należy dołączyć tylko wtedy, gdy trzeba będzie odwoływać się do niego poprzez kolekcję Workspaces.

Opcja typ określa, czy nowy obiekt Workspace jest obszarem roboczym Microsoft Jet czy ODBCDirect. Jeżeli opcja typ zostanie ustawiona na dbUseODBC i żaden obszar roboczy Microsoft Jet nie jest jeszcze utworzony, to aparat bazy danych nie zostanie załadowany do pamięci i wszystkie czynności będą odbywały się z udziałem źródła danych ODBC zdefiniowanego w obiekcie Connection. Jeżeli opcja typ zostanie pominięta, to typ źródła danych, do którego jest dołączony obiekt Workspace, zostanie określony przez właściwość DefaultType obiektu DBEngine.

Aby usunąć obiekt Workspace z kolekcji Workspaces, należy zamknąć wszystkie otwarte bazy danych i połączenia, a następnie w stosunku do obiektu Workspace użyć metody Close.


Delete - metoda (DAO)
Delete - metoda

•	Obiekty Recordset — usuwa bieżący rekord z modyfikowalnego obiektu Recordset. Dla obszaru roboczego ODBCDirect, typ sterownika określa, czy obiekty Recordset są modyfikowalne i czy można dla nich stosować metodę Delete.

•	Kolekcje — usuwa obiekt trwały z kolekcji.

Składnia

zestaw_rekordów.Delete

kolekcja.Delete nazwa_obiektu

Składnia metody Delete zawiera następujące elementy:

Element	Opis
zestaw_ rekordów	Zmienna obiektowa reprezentująca modyfikowalny obiekt Recordset zawierający usuwany rekord.
kolekcja	Zmienna obiektowa reprezentująca kolekcję, z której chcemy usunąć obiekt określony przez element nazwa_obiektu.
nazwa_obiektu	Wartość typu String będąca ustawieniem właściwości Name obiektu z kolekcji określonej przez element kolekcja.
Użycie

Metoda Delete służy do usunięcia bieżącego rekordu z obiektu Recordset lub obiektu z kolekcji, jak na przykład pamiętanej tabeli z bazy danych, pamiętanego pola z tabeli lub pamiętanego indeksu z tabeli.

Obiekty Recordset

Przed wywołaniem metody Delete obiekt Recordset musi zawierać bieżący rekord, gdyż inaczej wystąpi błąd wykonania.

Metoda Delete usuwa bieżący rekord z modyfikowalnego obiektu Recordset i czyni go niedostępnym. Chociaż nie można wykonać edycji ani użyć usuniętego rekordu, pozostaje on nadal rekordem bieżącym. Jednakże po przejściu do innego rekordu nie można ponownie uczynić usuniętego rekordu rekordem bieżącym. Kolejne odwołania do usuniętego rekordu w obiekcie Recordset są niedozwolone i generują błąd.

Usunięcie rekordu można cofnąć za pomocą mechanizmu transakcji i metody Rollback.

Jeżeli tabela bazowa jest tabelą podstawową w związku, w którym stosuje się usuwanie kaskadowe, to usunięcie bieżącego rekordu może usunąć również jeden lub więcej rekordów z tabeli obcej.

Uwaga   Aby można było dodać, poddać edycji lub usunąć rekord, musi istnieć unikatowy indeks dla tego rekordu w odpowiadającym mu źródle danych. W przeciwnym razie wywołanie metody AddNew, Delete lub Edit w obszarze roboczym Microsoft Jet zakończy się błędem typu "Brak uprawnień", natomiast po wywołaniu metody Update w obszarze roboczym ODBCDirect pojawi się błąd typu "Nieprawidłowy argument".

Kolekcje

Metodę Delete można zastosować do usunięcia obiektu trwałego. Jednak, jeżeli kolekcja jest kolekcją Databases, Recordsets lub Workspaces (z których każda jest pamiętana tylko w pamięci), to otwarty lub aktywny obiekt można usunąć tylko przez zamknięcie go za pomocą metody Close.

Usunięcie pamiętanego obiektu odbywa się niezwłocznie, ale w stosunku do innych kolekcji, na które mogą mieć wpływ zmiany struktury bazy danych, należy użyć metody Refresh.

Usunięcie pamiętanego obiektu TableDef z kolekcji TableDefs powoduje jednocześnie usunięcie definicji tabeli i danych z tej tabeli.

Poniżej przedstawiono niektóre ograniczenia odnoszące się do metody Delete. Obiekt z pierwszej kolumny zawiera kolekcję z drugiej kolumny. Trzecia kolumna wskazuje, czy można usunąć obiekt z tej kolekcji (na przykład, nigdy nie można usunąć obiektu Container z kolekcji Containers obiektu Database).

Obiekt	Kolekcja	Czy można użyć metody Delete?
DBEngine	Workspaces	Nie. Obiekty usuwa ich zamknięcie.
DBEngine	Errors	Nie
Workspace	Connections	Nie. Obiekty usuwa ich zamknięcie.
Workspace	Databases	Nie. Obiekty usuwa ich zamknięcie.
Workspace	Groups	Tak
Workspace	Users	Tak
Connection	QueryDefs	Nie
Connection	Recordsets	Nie. Obiekty usuwa ich zamknięcie.
Database	Containers	Nie
Database	QueryDefs	Tak
Database	Recordsets	Nie. Obiekty usuwa ich zamknięcie.
Database	Relations	Tak
Database	TableDefs	Tak
Group	Users	Tak
User	Groups	Tak
Container	Documents	Nie
QueryDef	Fields	Nie
QueryDef	Parameters	Nie
Recordset	Fields	Nie
Relation	Fields	Tylko wtedy, gdy obiekt Relation jest nowym, nie dołączonym obiektem.
TableDef	Fields	Tylko wtedy, gdy obiekt TableDef jest nowym obiektem, nie dołączonym do bazy danych lub gdy właściwość Updatable obiektu TableDef jest ustawiona na True.
TableDef	Indexes	Tylko wtedy, gdy obiekt TableDef jest nowym obiektem, nie dołączonym do bazy danych lub gdy właściwość Updatable obiektu TableDef jest ustawiona na True.
Index	Fields	Tylko wtedy, gdy obiekt Index jest nowym obiektem, który nie został dołączony do bazy danych.
Database, Field, Index, QueryDef, TableDef	Properties	Tylko wtedy, gdy właściwość jest właściwością definiowaną przez użytkownika.
DBEngine, Parameter, Recordset, Workspace	Properties	Nie


Edit - metoda (DAO)
Edit - metoda

Kopiuje bieżący rekord z modyfikowalnego obiektu Recordset do bufora kopii w celu przeprowadzenia edycji.

Składnia

zestaw_rekordów.Edit

Parametr zestaw_rekordów reprezentuje otwarty, modyfikowalny obiekt Recordset zawierający rekord, który chcemy poddać edycji.

Użycie

Przy użyciu metody Edit zmiany wprowadzone w polach bieżącego rekordu są kopiowane do bufora kopiowania. Aby zapisać te zmiany na stałe, należy zastosować metodę Update.

Po użyciu metody Edit bieżący rekord pozostaje nadal rekordem bieżącym.

Ostrzeżenie   Jeżeli po edycji danego rekordu, ale przed wykonaniem dowolnej operacji, która przechodzi do innego rekordu, nie zostanie użyta metoda Update, to wprowadzone zmiany zostaną stracone bez ostrzeżenia. Ponadto, jeżeli zostanie zamknięty obiekt określony przez parametr zestaw_rekordów lub zostanie zakończona procedura deklarująca obiekt Recordset albo macierzysty obiekt Database lub Connection, to zmodyfikowany rekord zostanie również odrzucony bez ostrzeżenia.

Użycie metody Edit kończy się błędem, jeżeli:

•	Brak bieżącego rekordu.

•	Obiekt Connection, Database lub Recordset został otwarty jako obiekt przeznaczony tylko do odczytu.

•	Żadne z pól rekordu nie jest modyfikowalne.

•	Obiekt Database lub Recordset został otwarty do wyłącznego użytku przez innego użytkownika (obszar roboczy Microsoft Jet).

•	Inny użytkownik zablokował stronę zawierającą dany rekord (obszar roboczy Microsoft Jet)

Jeżeli w obszarze roboczym Microsoft Jet, w środowisku wielu użytkowników, właściwość LockEdits obiektu Recordset jest ustawiona na True (blokowanie pesymistyczne), to rekord pozostaje zablokowany od chwili wywołania metody Edit do zakończenia aktualizacji. Jeżeli właściwość LockEdits jest ustawiona na False (blokowanie optymistyczne), to rekord przed ostateczną aktualizacją w bazie danych jest zablokowany i porównywany z rekordem w postaci bezpośrednio po edycji. Jeżeli rekord zmienił się od czasu użycia metody Edit, operacja Update zakończy się błędem wykonania w przypadku, gdy metoda OpenRecordset była wywołana bez stałej dbSeeChanges. Domyślnie, bazy danych ODBC połączone z aparatem Microsoft Jet oraz z bazą danych dostępną poprzez instalowalny sterownik ISAM zawsze używają blokowania optymistycznego.

W obszarze roboczym ODBCDirect po edycji (i zastosowaniu metody Update do aktualizacji) pola klucza podstawowego rekordu nie można edytować innych pól w tym rekordzie, dopóki nie zostanie zamknięty obiekt Recordset, a rekord ponownie wybrany przez kolejną kwerendę.

Uwaga   Aby można było dodać, poddać edycji lub usunąć rekord, musi istnieć unikatowy indeks dla tego rekordu w odpowiadającym mu źródle danych. W przeciwnym razie wywołanie metody AddNew, Delete lub Edit w obszarze roboczym Microsoft Jet zakończy się błędem typu "Brak uprawnień", natomiast po wywołaniu metody Update w obszarze roboczym ODBCDirect pojawi się błąd typu "Nieprawidłowy argument".


Execute - metoda (DAO)
Execute - metoda

Uruchamia kwerendę funkcjonalną lub wykonuje instrukcję SQL w stosunku do obiektu Connection lub Database.

Składnia

obiekt.Execute źródło, opcje

def_kwerendy.Execute opcje

Składnia metody Execute zawiera następujące elementy:

Element	Opis
obiekt	Zmienna obiektowa typu Connection lub Database, w stosunku do której będzie uruchamiana kwerenda.
def_kwerendy	Zmienna obiektowa reprezentująca obiekt QueryDef, którego właściwość SQL określa, jaka instrukcja SQL będzie wykonana.
źródło	Wartość typu String, która jest instrukcją SQL lub wartością właściwości Name obiektu QueryDef.
opcje	Element nieobowiązkowy. Stała lub kombinacja stałych, która określa własności kwerendy dotyczące integralności danych, jak podano poniżej w sekcji "Ustawienia".
Ustawienia

Dla elementu opcje można stosować następujące stałe:

Stała	Opis
dbDenyWrite	Odmawia uprawnienia do zapisu innym użytkownikom (dotyczy tylko obszaru roboczego Microsoft Jet)
dbInconsistent	(Domyślna) Wykonuje aktualizacje niespójne (dotyczy tylko obszarów roboczych Microsoft Jet).
dbConsistent	Wykonuje aktualizacje spójne (dotyczy tylko obszarów roboczych Microsoft Jet).
dbSQLPassThrough	Wykonuje przekazującą kwerendę SQL. Ustawienie tej opcji powoduje przekazanie instrukcji SQL do bazy danych ODBC w celu przetworzenia (dotyczy tylko obszarów roboczych Microsoft Jet).
dbFailOnError	Cofa aktualizacje, jeżeli wystąpi błąd (dotyczy tylko obszarów roboczych Microsoft Jet).
dbSeeChanges	Generuje błąd wykonania, jeżeli inny użytkownik zmienia dane edytowane przez drugiego użytkownika (dotyczy tylko obszarów roboczych Microsoft Jet).
dbRunAsync	Wykonuje kwerendę asynchroniczną (dotyczy tylko obiektów Connection i QueryDef w obszarach roboczych ODBCDirect).
dbExecDirect	Wykonuje instrukcję bez wcześniejszego wywołania funkcji SQLPrepare ODBC API (dotyczy tylko obiektów Connection i QueryDef w obszarach roboczych ODBCDirect).
Uwaga   Stałe dbConsistent i dbInconsistent wzajemnie się wykluczają. Jednocześnie można użyć tylko jednej z nich. Użycie obu tych stałych spowoduje błąd.

Użycie

Metoda Execute jest dozwolona tylko dla kwerend funkcjonalnych. Jeżeli metoda Execute zostanie użyta z innym typem kwerendy, wystąpi błąd. Ponieważ kwerenda funkcjonalna nie zwraca żadnych rekordów, metoda Execute nie zwraca Recordset. (Wykonanie przekazującej kwerendy SQL w obszarze roboczym ODBCDirect nie zwróci błędu, jeżeli nie zostanie zwrócony obiekt Recordset.)

Aby określić liczbę rekordów, na które miała wpływ ostatnio wykonana metoda Execute, należy użyć właściwości RecordsAffected obiektu Connection, Database lub QueryDef. Na przykład, właściwość RecordsAffected zawiera liczbę rekordów usuniętych, uaktualnionych lub wstawionych podczas wykonywania kwerendy funkcjonalnej. Jeżeli do uruchomienia kwerendy użyto metody Execute, właściwość RecordsAffected obiektu QueryDef jest ustawiona na liczbę zmienionych rekordów.

Jeżeli w obszarze roboczym Microsoft Jet instrukcja SQL jest syntaktycznie poprawna i użytkownik ma odpowiednie uprawnienia, metoda Execute nie zakończy się niepowodzeniem — nawet, jeżeli nie można zmodyfikować lub usunąć żadnego wiersza. Dlatego też, aby uruchomić kwerendę aktualizującą lub kwerendę usuwającą, należy zawsze z metodą Execute stosować opcję dbFailOnError. Opcja ta generuje błąd wykonania i cofa wszystkie dokonane zmiany, jeżeli którykolwiek z rekordów wybranych przez kwerendę jest zablokowany i nie może być uaktualniony lub usunięty.

Dla usprawnienia działania w obszarze roboczym Microsoft Jet, szczególnie w środowisku wielu użytkowników, należy zagnieździć metodę Execute wewnątrz transakcji. W stosunku do bieżącego obiektu Workspace należy użyć metody BeginTrans, następnie należy wywołać metodę Execute i zakończyć transakcję za pomocą metody CommitTrans w tymże obiekcie Workspace. W ten sposób zmiany zostaną zapisane na dysku i wszystkie blokady założone podczas wykonywania kwerendy zostaną zwolnione.

Jeżeli w obszarze roboczym ODBCDirect zostanie użyta opcjonalna stała dbRunAsync, kwerenda jest wykonywana asynchronicznie. Aby określić, czy asynchroniczna kwerenda jest nadal wykonywana, należy sprawdzić wartość właściwości StillExecuting obiektu, z którego została wywołana metoda Execute. Do zakończenia wykonania asynchronicznego metody Execute można wykorzystać metodę Cancel.


FillCache - metoda (DAO)
FillCache - metoda

Wypełnia cały lub część lokalnego bufora przeznaczonego dla obiektu Recordset zawierającego dane ze źródła danych ODBC dołączonego do aparatu (dotyczy tylko baz danych ODBC połączonych z aparatem Microsoft Jet)

Składnia

zestaw_rekordów.FillCache wiersze, zakładka_początku

Składnia metody FillCache zawiera następujące elementy:

Element	Opis
zestaw_ rekordów	Zmienna obiektowa, która określa obiekt Recordset, utworzony ze źródła danych ODBC. Może to być na przykład obiekt TableDef, reprezentujący tabelę połączoną lub obiekt QueryDef wywiedziony z takiego obiektu TableDef.
wiersze	Element nieobowiązkowy typu Variant (podtyp Integer) określający liczbę wierszy, które mają być przechowywane w buforze. Jeżeli argument ten zostanie pominięty, liczba wierszy będzie określana na podstawie wartości właściwości CacheSize.
zakładka_ początku	Element nieobowiązkowy typu Variant (podtyp String) określający zakładkę. Bufor jest wypełniany, poczynając od rekordu wskazanego przez tę zakładkę. Jeżeli ten argument zostanie pominięty, bufor będzie wypełniany, poczynając od rekordu wskazanego przez właściwość CacheStart.
Użycie

Zastosowanie lokalnego bufora poprawia działanie aplikacji, która pobiera dane z odległego serwera. Bufor jest to pewien obszar pamięci lokalnej, który przechowuje dane ostatnio pobrane z serwera; zakłada się, że podczas wykonywania aplikacji dane te będą potrzebne ponownie. Gdy użytkownik żąda danych, aparat bazy danych Microsoft Jet poszukuje ich najpierw w buforze, a nie od razu pobiera je z serwera, co zabiera więcej czasu. W buforze nie można przechowywać danych, które nie pochodzą ze źródła ODBC.

Zamiast czekać, aż bufor w miarę pobierania rekordów zapełni się, można użyć metody FillCache, aby w dowolnym czasie jawnie zapełnić bufor. Jest to szybszy sposób zapełnienia bufora, ponieważ metoda FillCache pobiera jednocześnie kilka rekordów, a nie tylko jeden. Na przykład, podczas przeglądania rekordów na ekranie, aplikacja może użyć metody FillCache do pobierania następnego zbioru rekordów mieszczących się na ekranie.

Dowolne źródło danych ODBC połączone z bazą Microsoft Jet, do którego dostęp realizowany jest przez obiekty Recordset, może mieć lokalny bufor. Aby utworzyć bufor, należy otworzyć obiekt Recordset z odległego źródła danych i następnie ustawić właściwości CacheSize i CacheStart tego obiektu.

Jeżeli elementy wiersze i zakładka_początku tworzą zakres rekordów, który znajduje się częściowo lub całkowicie poza zakresem rekordów określonym przez właściwości CacheSize i CacheStart, wówczas część rekordów znajdująca się poza tym zakresem będzie ignorowana i nie zostanie załadowana do bufora.

Jeżeli metoda FillCache żąda więcej rekordów niż wynosi liczba pozostałych rekordów w odległym źródle danych, aparat Microsoft Jet pobierze tylko te pozostałe rekordy, nie sygnalizując żadnego błędu.

Uwagi

•	Rekordy pobierane z bufora nie odzwierciedlają zmian dokonywanych w źródle danych współbieżnie przez innych użytkowników.

•	Metoda FillCache wydobywa tylko te rekordy, które nie zostały jeszcze zapisane do bufora. Aby wymusić aktualizację wszystkich buforowanych danych, należy ustawić właściwość CacheSize obiektu Recordset na wartość 0, następnie ustawić tę właściwość na żądany rozmiar bufora i wywołać metodę FillCache.


FindLast, FindNext i FindPrevious - metody (DAO)
FindFirst, FindLast, FindNext i FindPrevious - metody

Spośród rekordów z obiektu Recordset, typu zestaw dynamiczny lub typu utrwalonego, spełniających zadane kryteria, lokalizują pierwszy, ostatni, następny lub poprzedni rekord i czynią ten rekord rekordem bieżącym (tylko obszary robocze Microsoft Jet).

Składnia

zestaw_rekordów.{FindFirst | FindLast | FindNext | FindPrevious} kryteria

Składnia metod Find zawiera następujące elementy:

Element	Opis
zestaw_rekordów	Zmienna obiektowa, która reprezentuje istniejący obiekt Recordset typu zestaw dynamiczny lub typu utrwalonego.
kryteria	Wartość typu String stosowana do zlokalizowania rekordu. Spełnia ona takie samo zadanie, jak klauzula WHERE w instrukcji SQL, ale nie zawiera słowa WHERE.
Użycie

Jeżeli trzeba wyszukiwać wszystkie rekordy — a nie tylko te, które spełniają podany warunek — do przechodzenia od jednego rekordu do następnego należy korzystać z metod Move. Aby zlokalizować rekord w obiekcie Recordset typu tabela, należy użyć metody Seek.

Jeżeli rekord spełniający kryteria nie zostanie odnaleziony, to wskaźnik bieżącego rekordu jest nieokreślony i właściwość NoMatch jest ustawiona na True. Jeżeli argument zestaw_rekordów zawiera więcej niż jeden rekord spełniający podane kryteria, metoda FindFirst lokalizuje pierwszy z tych rekordów, metoda FindNext lokalizuje następny rekord itd.

Każda z metod Find zaczyna wyszukiwanie rekordu od określonego miejsca i kontynuuje je w kierunku podanym w poniższej tabeli:

Metoda	Zaczyna  poszukiwanie od	Kierunek poszukiwania
FindFirst	Początku zestawu rekordów	Koniec zestawu rekordów
FindLast	Końca zestawu rekordów	Początek zestawu rekordów
FindNext	Bieżącego rekordu	Koniec zestawu rekordów
FindPrevious	Bieżącego rekordu	Początek zestawu rekordów
W przypadku metody FindLast, aparat bazy danych Microsoft Jet przed rozpoczęciem poszukiwania całkowicie wypełnia obiekt Recordset, jeżeli nie jest on jeszcze wypełniony.

Użycie którejkolwiek z metod Find nie jest równoznaczne z użyciem metody Move, która po prostu czyni pierwszy, ostatni lub poprzedni rekord rekordem bieżącym bez podawania warunku. Po operacji Find można wykonać operację Move.

Zawsze należy sprawdzić wartość właściwości NoMatch, aby dowiedzieć się, czy operacja Find zakończyła się sukcesem. Jeśli tak, właściwość NoMatch jest ustawiona na False. Jeżeli poszukiwanie zakończyło się niepowodzeniem, właściwość NoMatch jest ustawiona na True i rekord bieżący nie jest zdefiniowany. Wówczas trzeba ponownie ustawić wskaźnik bieżącego rekordu na prawidłowy rekord.

Zastosowanie metod Find w stosunku do zestawu rekordów, do których dostęp realizowany jest przez źródło danych ODBC dołączone do aparatu, może być nieefektywne. Może okazać się, że odpowiednie przekształcenie argumentu kryteria w celu zlokalizowania określonego rekordu jest szybsze, szczególnie przy pracy z dużymi zestawami rekordów.

W obszarze roboczym ODBCDirect metody Find i Seek są niedostępne dla żadnego z typów obiektów Recordset, ponieważ wykonanie metody Find lub Seek poprzez połączenie ODBC nie jest w sieci dostatecznie efektywne. Zamiast tych metod, należy sformułować kwerendę (podając odpowiedni argument źródło dla metody OpenRecordset) z odpowiednią klauzulą WHERE, która ograniczy zwracane rekordy do rekordów spełniających kryteria, jakie mogłyby być użyte w metodzie Find lub Seek.

Przy pracy z bazami danych ODBC połączonymi z aparatem Microsoft Jet z dużymi obiektami Recordset typu zestaw dynamiczny, można przekonać się, że działanie metod Find, a także właściwości Sort lub Filter jest wolne. Poprawę szybkości można uzyskać, używając kwerend SQL z odpowiednimi klauzulami ORDER BY lub WHERE, kwerend parametrycznych lub obiektów QueryDef, które wydobywają konkretne indeksowane rekordy.

Do przeszukiwania pól zawierających daty należy stosować format daty używany w Stanach Zjednoczonych (miesiąc-dzień-rok), nawet wtedy, gdy nie jest wykorzystywany aparat bazy danych Microsoft Jet w wersji dla użytkowników ze Stanów Zjednoczonych; w przeciwnym razie dane mogą być nie odnalezione. Do konwersji formatu daty należy stosować funkcję Format języka Visual Basic. Na przykład:

rstPracownicy.FindFirst "DataPrzyjęcia > #" _

& Format(MojaData, 'dd-mm-yy' ) & "#"

Jeżeli argument kryteria składa się z ciągu znaków połączonego z wartością niecałkowitą i parametry systemowe określają inny niż stosowany w USA separator dziesiętny, taki jak znak przecinka, (na przykład strSQL = "CENA > " & lngCena a lngCena = 125,50), to podczas wywołania tej metody wystąpi błąd. Dzieje się tak dlatego, że podczas operacji łączenia ciągów liczba została przekształcona w ciąg przy użyciu domyślnego, systemowego separatora dziesiętnego, a język SQL aparatu Microsoft Jet akceptuje tylko separator amerykański.

Uwagi

•	Dla poprawienia wydajności, argument kryteria powinien być podany w formacie "pole = wartość", gdzie pole jest polem indeksowanym w tabeli bazowej, albo w formacie "pole LIKE prefiks", gdzie pole jest polem indeksowanym w tabeli bazowej, a prefiks jest poszukiwanym ciągiem (na przykład "ART*").

•	Na ogół, dla równoważnych typów wyszukiwania metoda Seek działa skuteczniej niż metody Find. Zakłada się tu, że wystarczają jedynie obiekty Recordset typu tabela.


GetChunk - metoda (DAO)
GetChunk - metoda

Zwraca całą lub część zawartości obiektu Field typu Memo lub Long Binary znajdującego się w kolekcji Fields należącej do obiektu Recordset.

Składnia

Set zmienna = zestaw_rekordów ! pole.GetChunk (przesunięcie, liczba_bajtów)

Składnia metody GetChunk zawiera następujące elementy:

Element	Opis
zmienna	Jest to zmienna typu Variant (podtyp String) odbierająca dane z obiektu Field o nazwie określonej przez pole.
zestaw_ rekordów	Jest to zmienna obiektowa reprezentująca obiekt Recordset zawierający kolekcję Fields.
pole	Jest to zmienna obiektowa reprezentująca obiekt Field, którego właściwość Type ma wartość dbMemo (Memo) lub dbLongBinary (Long Binary).
przesunięcie	Jest to wartość typu  Long równa liczbie bajtów opuszczonych przed rozpoczęciem procesu kopiowania.
liczba_bajtów	Jest to wartość typu Long równa liczbie zwracanych bajtów.
Użycie

Bajty zwrócone przez metodę GetChunk są przypisywane do zmiennej. Metoda GetChunk jest przeznaczona do zwracania danych porcjami. Do ich ponownego scalenia można wykorzystać metodę AppendChunk.

Jeśli wartość przesunięcie wynosi 0, wywołanie metody GetChunk powoduje rozpoczęcie kopiowania od pierwszego bajtu pola.

Jeśli wartość liczba_bajtów jest większa od liczby bajtów znajdujących się w polu, metoda GetChunk zwraca wszystkie pozostałe bajty pola.

Ostrzeżenie   Pola typu Memo są przeznaczone do tekstu, natomiast pola typu Long Binary wyłącznie do danych binarnych. W wypadku wprowadzenia danych niezgodnych z typem pola mogą wystąpić niepożądane wyniki.


GetRows - metoda (DAO)
GetRows - metoda

Pobiera wiersze z obiektu typu Recordset.

Składnia

Set zmTabl = zestaw_rekordów.GetRows (liczba_wierszy)

Składnia metody GetRows zawiera następujące elementy:

Element	Opis
zmTabl	Jest to zmienna typu Variant, w której przechowywane są zwrócone dane.
zestaw_ rekordów	Jest to zmienna obiektowa reprezentująca obiekt Recordset.
liczba_wierszy	Jest to wartość typu Variant równa liczbie pobieranych wierszy.
Użycie

Metoda GetRows służy do kopiowania rekordów z obiektów Recordset. Metoda GetRows zwraca dwuwymiarową tablicę. Pierwszy indeks określa numer pola, drugi określa numer wiersza. Na przykład, indeks intPole reprezentuje numer pola, a intRekord numer wiersza:

TablRekordów(intPole, intRekord)

Aby otrzymać wartość z pierwszego pola w drugim wierszu, należy użyć następującego kodu:

pole1 = TablRekordów(0,1)

Aby otrzymać wartość z drugiego pola w pierwszym wierszu, należy użyć następującego kodu:

field2 = TablRekordów(1,0)

Gdy metoda GetRows zwraca dane, zmienna avarRecords automatycznie staje się tablicą dwuwymiarową.

W przypadku zażądania liczby wierszy większej niż liczba dostępnych wierszy, metoda GetRows zwraca tylko wiersze dostępne. W celu ustalenia faktycznej liczby zwróconych wierszy można wykorzystać funkcję UBound systemu Visual Basic for Applications, ponieważ rozmiar tablicy jest ustalany w zależności od liczby zwracanych wierszy. Na przykład, w celu ustalenia faktycznej liczby zwróconych wierszy przypisanych do zmiennej typu Variant o nazwie zmiennaA należy użyć następującego kodu:

LiczbaZwróconychWierszy = UBound(zmiennaA,2) + 1

W wyrażeniu pojawia się "+ 1", ponieważ pierwszy zwrócony wiersz jest w tablicy elementem o numerze 0. Liczba wierszy, jaką można zwrócić, ograniczona jest wielkością dostępnej pamięci. Metody GetRows nie powinno się używać do pobierania do tablic dużych tabel.

Ponieważ metoda GetRows zwraca do tablicy wszystkie pola obiektu Recordset, łącznie z polami Memo i Long Binary, można sformułować kwerendę ograniczającą zakres zwracanych pól.

Po wywołaniu metody GetRows, rekordem bieżącym staje się następny nie odczytany jeszcze rekord. W ten sposób metoda GetRows oddziaływuje na rekord bieżący tak samo jak metoda Move liczba_wierszy.

W przypadku stosowania wielokrotnego wywołania metody GetRows do pobrania wszystkich wierszy, należy wykorzystać właściwość EOF do upewnienia się, że wskaźnik bieżącego rekordu obiektu Recordset wskazuje na jego koniec. Metoda GetRows zwraca mniejszą liczbę wierszy od żądanej, jeżeli wskaźnik bieżącego rekordu obiektu Recordset wskazuje na jego koniec lub gdy nie jest możliwe pobranie wiersza z żądanego zakresu wierszy. Na przykład, w przypadku zażądania 10 rekordów, gdy już piąty rekord jest niedostępny, metoda GetRows zwraca cztery rekordy, ustawiając wskaźnik bieżącego rekordu na rekord piąty. Nie spowoduje to wygenerowania błędu wykonania. Sytuacja taka może powstać w przypadku, gdy inny użytkownik usunie rekord w obiekcie Recordset typu zestaw dynamiczny. Aby dowiedzieć się, jak postąpić w tej sytuacji, należy zapoznać się z ilustrującym to przykładem.


Idle - metoda (DAO)
Idle - metoda

Zawiesza przetwarzanie danych, umożliwiając aparatowi bazy danych Microsoft Jet dokończenie innych bieżących zadań, jak optymalizacja pamięci lub obsługa strony (tylko obszary robocze Microsoft Jet).

Składnia

DBEngine.Idle [dbRefreshCache]

Użycie

Metoda Idle pozwala aparatowi bazy danych Microsoft Jet na obsługę tych zadań pracujących w tle, których wykonanie z powodu intensywnego przetwarzania danych może być opóźnione. Sytuacja ta zdarza się często w wielodostępnym, wielozadaniowym środowisku nie mającym wystarczającego przydziału czasu dla obsługi zadań pracujących w tle i nie mogącym współbieżnie aktualizować wszystkich rekordów w obiektach Recordset.

W lokalnym obiekcie Recordset typu zestaw dynamiczny blokady odczytu są usuwane i dane uaktualniane są tylko wtedy, gdy nie jest wykonywana żadna inna czynność (łącznie z ruchem myszą). Systematyczne wykonywanie instrukcji Idle pozwala aparatowi Microsoft Jet na usuwanie zbędnych blokad odczytu i obsługę procesów wykonywanych w tle.

Dodanie opcjonalnego argumentu dbRefreshCache powoduje wymuszenie zapisu do pliku typu .mdb oraz ponowne umieszczenie w pamięci bieżących danych z pliku .mdb.

Nie ma konieczności używania tej instrukcji w środowiskach jednodostępnych, o ile nie uruchamia się jednocześnie kilku instalacji jednej aplikacji. W środowiskach wielodostępnych metoda Idle może zwiększyć wydajność pracy, ponieważ wymusza ona na aparacie bazy danych zapis na dysk, co powoduje zwalnianie blokad pamięci.

Uwaga   Blokady odczytu mogą być zwolnione również przez uczynienie operacji częścią transakcji.


MakeReplica - metoda (DAO)
MakeReplica - metoda

Tworzy nową replikę z innej repliki bazy danych (tylko obszary robocze Microsoft Jet).

Składnia

baza_danych.MakeReplica replika, opis, opcje

Składnia metody MakeReplica zawiera następujące elementy:

Element	Opis
baza_danych	Jest to zmienna obiektowa reprezentująca istniejący obiekt typu Database będący repliką.
replika	Jest to wartość typu String zawierająca ścieżkę dostępu i nazwę pliku nowej repliki. W przypadku gdy istnieje już plik o nazwie replika, wystąpi błąd.
opis	Jest to wartość typu String zawierająca opis tworzonej repliki.
opcje	Argument nieobowiązkowy. Jest to stała lub kombinacja stałych, charakteryzująca tworzoną replikę w sposób opisany w sekcji “Ustawienia”.
Ustawienia

Jako argument opcje mogą być użyte następujące stałe:

Stała	Opis
dbRepMakePartial	Tworzy replikę częściową.
dbRepMakeReadOnly	Zapobiega próbom modyfikacji replikowanych obiektów nowej repliki, jednak w przypadku zsynchronizowania nowej repliki z elementem zestawu replik dokonywane zmiany w projekcie i danych będą przenoszone do nowej repliki.
Użycie

Nowo utworzona replika częściowa będzie miała wszystkie właściwości w ReplicaFilter ustawione na False, co oznacza, że w tabelach nie będzie danych.


Move - metoda (DAO)
Move - metoda

Przesuwa wskaźnik bieżącego rekordu w obiekcie Recordset.

Składnia

zestaw_rekordów.Move wiersze, zakładka_początku

Składnia metody Move zawiera następujące elementy:

Element	Opis
zestaw_ rekordów	Jest to zmienna obiektowa reprezentująca obiekt Recordset, którego wskaźnik bieżącego rekordu jest przesuwany.
wiersze	Jest to wartość typu Long ze znakiem określająca, o ile wierszy ma być przesunięty wskaźnik pozycji. Jeżeli wartość argumentu wiersze jest większa od 0, wskaźnik przesuwany jest do przodu (w kierunku końca pliku). Jeżeli wartość argumentu wiersze jest mniejsza od 0, wskaźnik przesuwany jest do tyłu (w kierunku początku pliku).
zakładka_ początku	Element nieobowiązkowy. Jest to wartość typu Variant (podtyp String) identyfikująca zakładkę. W przypadku jej wystąpienia przesuwanie rozpoczyna się względem położenia zakładki. W przeciwnym razie wykonanie instrukcji Move rozpoczyna się od bieżącego rekordu.
Użycie

Jeżeli za pomocą metody Move wskaźnik bieżącego rekordu zostanie przesunięty przed pierwszy rekord, wskaźnik ten zostanie ustawiony na początek pliku. Jeżeli obiekt Recordset nie zawiera żadnych rekordów, a jego właściwość BOF ma wartość True, zastosowanie tej metody do przesunięcia wskaźnika do tyłu spowoduje błąd.

Jeżeli za pomocą metody Move wskaźnik bieżącego rekordu zostanie przesunięty poza ostatni rekord, wskaźnik ten zostanie ustawiony na koniec pliku. Jeżeli obiekt Recordset nie zawiera żadnych rekordów, a jego właściwość EOF ma wartość True, zastosowanie tej metody do przesunięcia wskaźnika do przodu spowoduje błąd.

Jeżeli którakolwiek z właściwości BOF lub EOF jest równa True, próba wykonania metody Move bez prawidłowo określonej zakładki spowoduje błąd wykonania.

Uwagi

•	W przypadku wykonywania metody Move na obiekcie Recordset typu progresywnego, argument wiersze musi być dodatnią liczbą całkowitą, a użycie zakładki jest niedozwolone. Oznacza to, że dozwolone jest tylko przesuwanie się do przodu.

•	Aby w obiekcie Recordset bieżącym rekordem uczynić rekord pierwszy, ostatni, następny bądź poprzedni, należy użyć odpowiedniej metody MoveFirst, MoveLast, MoveNext lub MovePrevious.

•	Użycie metody Move z argumentem wiersze równym 0 jest najprostszą metodą pobrania danych odpowiadających bieżącemu rekordowi. Jest to bardzo użyteczne w przypadku konieczności upewnienia się, że bieżący rekord zawiera najnowszą wersję danych z tabel bazowych. Ten sposób użycia instrukcji powoduje jednocześnie anulowanie wszelkich niezrealizowanych wywołań metod Edit lub AddNew.


MoveFirst, MoveLast, MoveNext, MovePrevious - metody (DAO)
MoveFirst, MoveLast, MoveNext, MovePrevious - metody

Powodują przejście do rekordu pierwszego, ostatniego, następnego bądź poprzedniego w podanym obiekcie Recordset i powoduje, że rekord staje się bieżącym rekordem.

Składnia

zestaw_rekordów.{MoveFirst | MoveLast [dbRunAsync] | MoveNext | MovePrevious}

Parametr zestaw_rekordów jest to zmienna obiektowa reprezentująca otwarty obiekt Recordset.

Użycie

Metodę Move należy stosować bez formułowania żadnych warunków przechodzenia od rekordu do rekordu.

Ostrzeżenie   Przy edycji bieżącego rekordu należy pamiętać o zapisaniu zmian za pomocą instrukcji Update przed przesunięciem wskaźnika do następnego rekordu. Przesunięcie wskaźnika do następnego rekordu bez uaktualnienia wprowadzonych zmian spowoduje ich utratę bez ostrzeżenia.

Po otwarciu obiektu Recordset bieżącym jest rekord pierwszy, a właściwość BOF przyjmuje wartość False. Jeżeli obiekt Recordset nie zawiera żadnych rekordów, właściwość BOF przyjmuje wartość True, a rekord bieżący nie istnieje.

Jeżeli bieżącym rekordem jest pierwszy lub ostatni, to w przypadku użycia metody MoveFirst lub MoveLast pozycja bieżącego rekordu pozostaje bez zmiany.

Jeżeli bieżącym rekordem jest rekord pierwszy, to w przypadku wykonania metody MovePrevious, właściwość BOF przyjmie wartość True, a rekord bieżący nie będzie określony. W przypadku ponownego wykonania metody MovePrevious wystąpi błąd, a wartość BOF pozostanie równa True.

Jeżeli bieżącym rekordem jest rekord ostatni, to w przypadku wykonania metody MoveNext, właściwość EOF przyjmie wartość True, a rekord bieżący nie będzie określony. W przypadku ponownego wykonania metody MoveNext wystąpi błąd, a wartość EOF pozostanie równa True.

Jeżeli zestaw_rekordów odnosi się do obiektu Recordset typu tabela (tylko obszary robocze Microsoft Jet), przesunięcie następuje według bieżącego indeksu. Bieżący indeks może zostać ustawiony przez określenie właściwości Index. Jeżeli bieżący indeks nie jest ustawiony, kolejność zwracanych rekordów jest nie zdefiniowana.

Ważne   Metoda MoveLast może służyć do określenia bieżącej liczby rekordów znajdujących się w obiekcie Recordset typu zestaw dynamiczny lub utrwalonego przez zapełnianie obiektu Recordset. Stosowanie metody MoveLast w tym celu prowadzić jednak może do spowolnienia pracy programu. Powinna być więc ona stosowana do określania liczby rekordów tylko wtedy, gdy niezbędna jest dokładna informacja o liczbie rekordów w nowo otwartym obiekcie Recordset. W przypadku użycia argumentu dbRunAsync przy wywołaniu metody MoveLast, wywoływana jest ona w trybie asynchronicznym. W dalszym ciągu można wykorzystywać właściwość StillExecuting do określania zapełnienia obiektu Recordset, jak również można wykorzystywać metodę Cancel do zakończenia asynchronicznego wywołania metody MoveLast.

Metody MoveFirst, MoveLast, i MovePrevious nie mogą być użyte w stosunku do obiektu Recordset typu progresywnego

Do przesunięcia wskaźnika bieżącego rekordu w obiekcie typu Recordset o określoną liczbę rekordów do przodu lub do tyłu należy wykorzystać metodę Move.


NewPassword - metoda (DAO)
NewPassword - metoda

Zmienia hasło dla istniejącego konta użytkownika lub bazy danych Microsoft Jet (tylko obszary robocze Microsoft Jet)

Składnia

obiekt.NewPassword stare_hasło, nowe_hasło

Składnia metody NewPassword zawiera następujące elementy:

Element	Opis
obiekt	Jest to zmienna obiektowa reprezentująca obiekt typu User lub obiekt typu Microsoft Jet 3.x Database, dla którego zmieniana jest właściwość Password.
stare_hasło	Jest to wartość typu String zawierająca aktualną wartość właściwości Password obiektu typu User lub Jet 3.x Database.
nowe_hasło	Jest to wartość typu String zawierająca nową wartość właściwości Password obiektu typu User lub Jet 3.x Database.
Użycie

Ciągi stare_hasło i nowe_hasło mogą mieć długość do 14 znaków oraz mogą zawierać dowolne znaki z wyjątkiem znaku o kodzie 0 (zero) zestawu znaków ASCII. Aby usunąć hasło, jako parametr nowe_hasło należy podać ciąg znaków o długości zerowej ("").

W hasłach jest uwzględniana wielkość liter.

Jeżeli element obiekt odnosi się do obiektu User, który jeszcze nie został dołączony do kolekcji User, następuje błąd. Do wprowadzania nowego hasła uprawnieni są użytkownicy danego konta lub członkowie grupy Admins. Użytkownicy nie mogą obejrzeć aktualnych haseł — właściwości Password obiektów i User są przeznaczone tylko do zapisu.

Jeżeli element obiekt odnosi się do obiektu Database aparatu Microsoft Jet w wersji 3.0 lub późniejszej, metoda ta wprowadza pewien stopień bezpieczeństwa przez zastosowanie mechanizmu haseł. Po utworzeniu bądź otwarciu pliku typu .mdb aparatu Microsoft Jet 3.x, część ciągu połączenia we właściwości Connect może opisywać hasło.

Jeżeli baza danych nie jest chroniona hasłem, aparat Microsoft Jet utworzy je, podstawiając ciąg znaków o długości zerowej ("").

Ostrzeżenie   W razie utraty hasła otwarcie bazy danych będzie niemożliwe.


OpenDatabase - metoda (DAO)
OpenDatabase - metoda

Otwiera podaną bazę danych w obiekcie typu Workspace i zwraca odesłanie do reprezentującego ją obiektu Database.

Składnia

Set baza_danych = obszar_roboczy.OpenDatabase (nazwa_bd, opcje, tylko_do_odczytu, połączenie)

Składnia metody OpenDatabase zawiera następujące elementy:

Element	Opis
baza_danych	Jest to zmienna obiektowa reprezentująca obiekt Database, który ma zostać otwarty.
obszar_roboczy	Element nieobowiązkowy. Jest to zmienna obiektowa reprezentująca istniejący obiekt Workspace, który będzie zawierał bazę danych. Jeśli nie zostanie podana wartość elementu obszar_roboczy, OpenDatabase użyje bieżącego obszaru roboczego.
nazwa_bd	Jest to wartość typu String będąca nazwą istniejącego pliku bazy danych Microsoft Jet lub nazwą źródła danych (DSN, Data Source Name) ze źródła danych ODBC. Więcej informacji o ustawianiu tej wartości można znaleźć w opisie właściwości Name.
opcje	Element nieobowiązkowy typu Variant ustawiający różne opcje bazy danych, zgodnie z opisem w sekcji "Ustawienia".
tylko_do_odczytu	Element nieobowiązkowy typu Variant (podtyp Boolean), który przyjmuje wartość True, jeśli baza danych ma zostać otwarta w trybie tylko do odczytu, lub False (domyślnie), jeśli baza danych ma zostać otwarta w trybie do odczytu i zapisu.
połączenie	Element nieobowiązkowy typu Variant (podtyp String) określający różne informacje o połączeniu, łącznie z hasłem.
Ustawienia

Jako argument opcje w obszarze roboczym Microsoft Jet można stosować następujące wartości:

Ustawienie	Opis
True	Otwiera bazę danych w trybie wyłącznym.
False	(Domyślne) Otwiera bazę danych w trybie współużytkowania.
W obszarze roboczym ODBCDirect argument opcje określa, czy i kiedy zażądać od użytkownika realizacji połączenia. W tym celu można użyć jednej z poniższych stałych:

Stała	Opis
dbDriverNoPrompt	Menedżer sterowników ODBC wykorzystuje ciąg połączenia podany przez argumenty nazwa_bd i połączenie. Jeśli niezbędna informacja nie zostanie podana, spowoduje to wystąpienie błędu wykonania.
dbDriverPrompt	Menedżer sterowników ODBC wyświetla okno dialogowe Źródła danych ODBC, w którym wyświetlane są informacje odpowiadające danym przekazanym przez argumenty nazwa_bd lub połączenie. Ciąg połączenia jest tworzony na podstawie DSN, które użytkownik wybiera poprzez okna dialogowe, lub na podstawie domyślnego DSN, jeśli użytkownik nie podał DSN.
dbDriverComplete	(Domyślnie) Jeżeli argumenty połączenie i nazwa_bd zawierają całą informację niezbędną do realizacji połączenia, Menedżer sterowników ODBC wykorzystuje ciąg z argumentu połączenie. W przeciwnym przypadku zachowuje się podobnie jak w przypadku podania stałej dbDriverPrompt.
dbDriverCompleteRequired	Opcja ta działa podobnie jak dbDriverComplete poza tym, że sterownik ODBC wyłącza żądania podania informacji, które nie są potrzebne do realizacji połączenia.
Użycie

Otwierana baza danych jest automatycznie dodawana do kolekcji Databases. Ponadto, w obszarze roboczym ODBCDirect tworzony jest obiekt Connection, odpowiadający nowemu obiektowi Database, który jest dołączany do kolekcji Connections tego samego obiektu Workspace.

Przy stosowaniu argumentu nazwa_bd należy pamiętać o poniższych uwagach:

•	Jeśli odnosi się on do bazy danych, która jest już otwarta w trybie wyłącznym przez innego użytkownika, pojawia się błąd.

•	Jeśli nie odnosi się on do istniejącej bazy danych lub prawidłowej nazwy źródła danych ODBC, pojawia się błąd.

•	Jeśli jest to ciąg o długości zerowej (""), a połączenie ma wartość "ODBC;", w oknie dialogowym wyświetlana jest lista nazw wszystkich zarejestrowanych źródeł danych ODBC, umożliwiając wybór bazy danych.

•	Jeśli baza danych otwierana jest przez obszar roboczy ODBCDirect i w argumencie połączenie podane jest DSN, argumentowi nazwa_bd można przypisać dowolny ciąg znaków, który w dalszym kodzie może być używany przy odwoływaniu się do tej bazy danych.

Argument połączenie jest wyrażany w postaci dwóch części: typ bazy danych, po którym następuje średnik (;) i argumenty nieobowiązkowe. W pierwszym rzędzie należy określić typ bazy danych, jak "ODBC;" lub "FoxPro 2.5;". Argumenty nieobowiązkowe, umieszczone w dowolnej kolejności, są rozdzielane średnikami. Jednym z takich argumentów może być hasło (jeśli zostało przypisane). Na przykład:

"FoxPro 2.5; pwd=MojeHasło"

Zastosowanie metody NewPassword w stosunku do obiektu Database innego niż baza danych ODBCDirect powoduje zmianę hasła umieszczanego w części ";pwd=..." tego argumentu. Aby podać ciąg źródłowy, należy określić argumenty opcje i tylko_do_odczytu. Składnię podano w opisie właściwości Connect.

Aby zamknąć bazę danych i w ten sposób usunąć obiekt Database z kolekcji Databases, należy zastosować w stosunku do tego obiektu metodę Close.

Uwaga   Jeśli realizowany jest dostęp do źródła danych ODBC dołączonych do aparatu, lepszą wydajność aplikacji można osiągnąć przez otwarcie dołączonego do źródła danych ODBC obiektu Database zamiast tabeli połączonych indywidualnych obiektów TableDef do tabel źródła danych ODBC.


OpenRecordset - metoda (DAO)
OpenRecordset - metoda

Tworzy nowy obiekt Recordset i dołącza go do kolekcji Recordsets.

Składnia

Dla obiektów Connection i Database:

Set zestaw_rekordów = obiekt.OpenRecordset (źródło, typ, opcje, blokada)

Dla obiektów QueryDef, Recordset i TableDef:

Set zestaw_rekordów = obiekt.OpenRecordset (typ, opcje, blokada)

Składnia metody OpenRecordset zawiera następujące elementy:

Element	Opis
zestaw_rekordów	Jest to zmienna obiektowa reprezentująca obiekt Recordset, który ma zostać otwarty.
obiekt	Jest to zmienna obiektowa reprezentująca istniejący obiekt, z którego ma zostać utworzony nowy obiekt Recordset.
źródło	Jest to wartość typu String określająca źródło rekordów dla nowego zestawu Recordset. Źródło to może być nazwą tabeli, nazwą kwerendy lub instrukcji SQL, która zwraca rekordy. Dla obiektów Recordset typu tabela w bazie danych Microsoft Jet źródło może być tylko nazwą tabeli.
typ	Element nieobowiązkowy. Stała wskazująca typ otwieranego obiektu Recordset, jak podano w sekcji "Ustawienia".
opcje	Element nieobowiązkowy. Kombinacja stałych charakteryzujących nowy obiekt Recordset, jak podano w sekcji "Ustawienia".
blokada	Element nieobowiązkowy. Stała określająca blokowanie dla obiektu Recordset, jak podano w sekcji "Ustawienia".
Ustawienia

Jako argumentu typ można użyć jednej z poniższych stałych:

Stała	Opis
dbOpenTable	Otwiera obiekt Recordset typu tabela (tylko obszary robocze Microsoft Jet).
dbOpenDynamic	Otwiera obiekt Recordset typu dynamicznego, podobny do kursora dynamicznego ODBC (tylko obszary robocze ODBCDirect).
dbOpenDynaset	Otwiera obiekt Recordset typu zestaw dynamiczny, który jest podobny do kursora kluczowego ODBC.
dbOpenSnapshot	Otwiera obiekt Recordset typu utrwalonego, który jest podobny do kursora statycznego ODBC.
dbOpenForwardOnly	Otwiera obiekt Recordset typu progresywnego.
Uwaga   Jeśli obiekt Recordset zostanie otwarty w obszarze roboczym Microsoft Jet bez podawania typu, metoda OpenRecordset utworzy, jeśli jest to możliwe, obiekt Recordset typu tabela. Jeżeli zostanie podana tabela połączona lub kwerenda, metoda OpenRecordset utworzy obiekt Recordset typu zestaw dynamiczny. W obszarze roboczym ODBCDirect domyślnym ustawieniem jest dbOpenForwardOnly.

Jako argument opcje można użyć dowolnej kombinacji poniższych stałych:

Stała	Opis
dbAppendOnly	Pozwala użytkownikom na dołączanie nowych rekordów do obiektu Recordset, uniemożliwiając im jednak edycję lub usuwanie istniejących rekordów (dotyczy tylko obiektów Recordset typu zestaw dynamiczny obsługiwanych przez aparat Microsoft Jet).
dbSQLPassThrough	Przekazuje instrukcję SQL do przetwarzania w źródle danych ODBC dołączonym do aparatu (dotyczy tylko obiektów Recordset typu utrwalonego obsługiwanych przez aparat Microsoft Jet).
dbSeeChanges	Powoduje pojawienie się błędu wykonania, jeśli jeden użytkownik zmienia dane, które są już poddawane edycji przez innego użytkownika (dotyczy tylko obiektów Recordset typu zestaw dynamiczny obsługiwanych przez aparat Microsoft Jet). Jest to przydatne w aplikacjach, w których wielu użytkowników ma jednocześnie dostęp do tych samych danych w trybie zapisu i odczytu.
dbDenyWrite	Zabezpiecza przed modyfikowaniem lub dodawaniem rekordów przez innych użytkowników (dotyczy tylko obiektów Recordset aparatu Microsoft Jet).
dbDenyRead	Zabezpiecza przed czytaniem danych w tabeli przez innych użytkowników (dotyczy tylko obiektów Recordset typu tabela aparatu Microsoft Jet).
dbForwardOnly	Tworzy obiekt Recordset typu progresywnego (dotyczy tylko obiektów Recordset typu utrwalonego aparatu Microsoft Jet). Opcja ta jest dostępna tylko dla zachowania zgodności z poprzednimi wersjami; zamiast niej w argumencie typ należy stosować stałą dbOpenForwardOnly.
dbReadOnly	Zabezpiecza przed wprowadzaniem przez użytkowników zmian do obiektu Recordset (tylko aparat Microsoft Jet). Stała dbReadOnly jako argument blokada zastępuje tę opcję; jest ona dostępna tylko dla zachowania zgodności z poprzednimi wersjami.
dbRunAsync	Uruchamia kwerendę asynchroniczną (tylko w obszarach roboczych ODBCDirect).
dbExecDirect	Uruchamia kwerendę z pominięciem SQLPrepare, bezpośrednio wywołując SQLExecDirect (tylko w obszarach roboczych ODBCDirect). Opcja ta nie powinna być stosowana, jeśli otwierany obiekt Recordset bazuje na kwerendzie parametrycznej. Więcej informacji można znaleźć w podręczniku "Microsoft ODBC 3.0 Programmer’s Reference."
dbInconsistent	Dopuszcza uaktualnienia niespójne (dotyczy tylko obiektów Recordset typu zestaw dynamiczny i utrwalonego obsługiwanych przez Microsoft Jet).
dbConsistent	Dopuszcza tylko uaktualnienia spójne (dotyczy tylko obiektów Recordset typu zestaw dynamiczny i utrwalonego obsługiwanych przez Microsoft Jet).
Uwaga   Stałe dbConsistent i dbInconsistent wzajemnie wykluczają się, a próba użycia obu powoduje błąd. Podanie argumentu blokada, gdy w argumencie opcje użyto stałej dbReadOnly, również powoduje błąd.

Jako argumentu blokada można użyć poniższych stałych:

Stała	Opis
dbReadOnly	Zabezpiecza przed wprowadzaniem przez użytkowników zmian do obiektu Recordset (ustawienie domyślne dla obszarów roboczych ODBCDirect). Stała dbReadOnly może być stosowana albo w argumencie opcje, albo w argumencie blokada, ale nie w obydwu. Zastosowanie jej w obu argumentach spowoduje wystąpienie błędu wykonania.
dbPessimistic	Stosuje blokowanie pesymistyczne jako sposób wprowadzania zmian do obiektu Recordset w środowisku wielodostępnym. Strona zawierająca rekord, który jest poddawany edycji, jest blokowana od chwili użycia metody Edit (ustawienie domyślne dla obszarów roboczych Microsoft Jet).
dbOptimistic	Stosuje blokowanie optymistyczne jako sposób wprowadzania zmian do obiektu Recordset w środowisku wielodostępnym. Strona zawierająca rekord nie jest blokowana aż do momentu wykonania metody Update.
dbOptimisticValue	Stosuje współbieżność optymistyczną, bazującą na wartościach wierszy (tylko w obszarach roboczych ODBCDirect).
dbOptimisticBatch	Włącza aktualizację wsadową (tylko w obszarach roboczych ODBCDirect).
Użycie

W obszarze roboczym Microsoft Jet, jeśli obiekt odnosi się do obiektu QueryDef lub zestawu rekordów Recordset typu zestaw dynamiczny lub utrwalonego, bądź jeśli źródło odnosi się do instrukcji SQL lub obiektu TableDef reprezentującego tabelę połączoną, dla argumentu typ nie można użyć stałej dbOpenTable; w przeciwnym razie wystąpi błąd wykonania. Jeśli konieczne jest użycie kwerendy przekazującej SQL w stosunku do połączonej tabeli ze źródła danych ODBC dołączonego do aparatu, należy w pierwszym rzędzie ustawić właściwość Connect bazy danych zawierającej połączoną tabelę na prawidłowy ciąg połączenia ODBC. Jeśli potrzebne jest tylko jedno przekazanie poprzez zestaw rekordów Recordset otwarty z dołączonego do aparatu Microsoft Jet źródła danych ODBC, można poprawić wydajność, stosując w argumencie typ stałą dbOpenForwardOnly.

Jeśli argument obiekt odnosi się do zestawu rekordów Recordset typu zestaw dynamiczny lub utrwalonego, nowy obiekt Recordset ma ten sam typ co obiekt. Jeśli argument obiekt odnosi się do zestawu rekordów Recordset typu tabela, typem nowego obiektu Recordset jest typ zestaw dynamiczny. Nie można otworzyć nowych obiektów Recordset na bazie obiektów Recordset typu progresywnego lub ODBCDirect.

W obszarze roboczym ODBCDirect można otworzyć Recordset zawierający w argumencie źródło więcej niż jedną kwerendę wybierającą, jak w następującym przykładzie:

"SELECT Nazwisko, Imię FROM Autorzy
WHERE Nazwisko = 'Kowalski';
SELECT Tytuł, ISBN FROM Tytuły
WHERE ISBN Like '1-55615-*'"

Zwracany zestaw rekordów Recordset zostanie otwarty z wynikami pierwszej kwerendy. Aby otrzymać wynikowe zestawy rekordów z kolejnych kwerend, należy wykorzystać metodę NextRecordset.

Uwaga   Za pośrednictwem połączenia ODBCDirect można wysyłać kwerendy DAO do różnych serwerów bazy danych, przy czym serwery te mogą rozpoznawać różne dialekty języka SQL. W związku z tym, dla języka Microsoft Jet SQL nie opracowano pomocy kontekstowej, choć nadal dostępne są, poprzez menu Pomoc, tematy dotyczące tego języka. Dlatego też, przed przystąpieniem do korzystania z połączeń ODBCDirect lub z kwerend przekazujących w aplikacjach typu klient/serwer podłączonych do aparatu Micosoft Jet warto zapoznać się z dokumentacją opisującą dialekt SQL używanego serwera bazy danych.

Aby przechwycić dokonane zmiany w sytuacji, gdy dwóch lub więcej użytkowników poddaje edycji lub usuwa ten sam rekord, należy w obszarze roboczym Microsoft Jet użyć stałej dbSeeChanges. Na przykład, jeśli dwóch użytkowników rozpoczyna edycję tego samego rekordu, metoda Update wykonana przez pierwszego użytkownika kończy się sukcesem. Wywołanie przez drugiego użytkownika metody Update powoduje wystąpienie błędu wykonania. Podobnie, jeśli drugi użytkownik podejmuje próbę zastosowania metody Delete w celu usunięcia rekordu, a pierwszy z użytkowników zmienił dane w tym rekordzie, pojawia się błąd wykonania.

Zazwyczaj, jeśli podczas uaktualniania rekordu pojawia się ten błąd, program powinien odświeżyć zawartość pól i pobrać ostatnio zmodyfikowane wartości. Jeśli ten błąd pojawia się podczas usuwania rekordu, program może, na przykład, wyświetlić nowe dane rekordu oraz komunikat wskazujący, że dane zostały ostatnio zmienione. W tym miejscu program może zażądać potwierdzenia, czy użytkownik nadal chce usunąć ten rekord.

Należy także stosować stałą dbSeeChanges wówczas, gdy zestaw rekordów Recordset jest otwierany w obszarze roboczym ODBC dołączonym do aparatu Microsoft Jet i bazuje na tabeli Microsoft SQL Server 6.0 lub wersja nowsza, która zawiera kolumnę IDENTITY. W przeciwnym razie może wystąpić błąd.

W obszarze roboczym ODBCDirect możliwe jest wykonywanie kwerend asynchronicznych przez ustawienie stałej dbRunAsync w argumencie opcje. Pozwala to aplikacji na kontynuowanie przetwarzania innych instrukcji, podczas gdy kwerenda jest wykonywana w tle. Nie można jednak wtedy uzyskać dostępu do danych obiektu Recordset do chwili zakończenia kwerendy. Aby określić, czy kwerenda zakończyła się, należy sprawdzić właściwość StillExecuting nowego zestawu rekordów Recordset. Jeśli wykonanie kwerendy zajmuje więcej czasu niż oczekiwano, można ją przerwać za pomocą metody Cancel.

Otwarcie kolejnego zestawu rekordów Recordset ze źródłem danych ODBC może nie zostać zrealizowane, gdyż połączenie może być zajęte przez poprzednie wywołanie metody OpenRecordset. Sposobem na ominięcie tego jest zastosowanie kursora po stronie serwera i ODBCDirect, jeśli serwer to umożliwia. Innym rozwiązaniem jest całkowite wypełnienie zestawu rekordów Recordset przy użyciu metody MoveLast natychmiast po otwarciu obiektu Recordset.

Jeśli obiekt Connection zostanie otwarty z parametrem DefaultCursorDriver ustawionym na wartość dbUseClientBatchCursor, możliwe jest otwarcie obiektu Recordset w celu buforowania zmian dokonywanych w danych w obszarze roboczym ODBCDirect (znane jest to jako aktualizacja wsadowa). Aby włączyć buforowanie danych przy aktualizacji, należy w argumencie blokada umieścić stałą dbOptimisticBatch. W opisie metody Update podano szczegóły na temat natychmiastowego zapisywania zmian na dysk lub zapamiętywania ich w buforze i wsadowego zapisywania na dysk.

Zamknięcie obiektu Recordset za pomocą metody Close powoduje automatyczne usunięcie go z kolekcji Recordsets.

Uwaga   Jeśli źródło odnosi się do instrukcji SQL składającej się z ciągu znaków, do którego dołączono wartość niecałkowitą, a parametr systemowy określa inny niż amerykański znak separatora dziesiętnego, taki jak przecinek (na przykład, strSQL = "CENA > " & lngCena, a lngCena = 125,50), przy próbie otwarcia obiektu Recordset wystąpi błąd. Wynika to z tego, że podczas łączenia ze sobą ciągów znaków liczba zostanie przekształcona na ciąg z wykorzystaniem domyślnego w systemie separatora dziesiętnego, natomiast SQL akceptuje tylko separator amerykański.


Refresh - metoda (DAO)
Refresh - metoda

Uaktualnia obiekty w kolekcji, aby odzwierciedlić bieżący schemat bazy danych.

Składnia

kolekcja.Refresh

Element kolekcja jest zmienną obiektową reprezentującą trwałą kolekcję.

Użycie

Nie można stosować metody Refresh w stosunku do kolekcji, które nie są trwałe, jak np. Connections, Databases, Recordsets, Workspaces lub kolekcja QueryDefs obiektu Connection.

Aby określić pozycję, którą aparat bazy danych Microsoft Jet przeznacza dla obiektów Field w kolekcji Fields obiektów QueryDef, Recordset lub TableDef, należy wykorzystać właściwość OrdinalPosition każdego z obiektów Field. Zmiana właściwości OrdinalPosition obiektu Field może nie spowodować zmiany porządku obiektów typu Field w kolekcji, aż do chwili użycia metody Refresh.

Metoda Refresh powinna być stosowana w środowisku wielodostępnym, w którym inni użytkownicy mogą zmieniać bazę danych. Stosowanie tej metody może także okazać się potrzebne w kolekcjach, których zawartość ulega zmianie pośrednio przez inne uaktualnienia. Na przykład, jeśli zmieni się zawartość kolekcji Users, przed użyciem kolekcji Groups może okazać się konieczne odświeżenie kolekcji Groups.

Kolekcja jest wypełniana obiektami podczas pierwszego jej użycia, i późniejsze zmiany wprowadzane przez innych użytkowników nie są automatycznie odzwierciedlane. Jeśli jest prawdopodobne, że inny użytkownik zmienił kolekcję, należy użyć w stosunku do tej kolekcji metody Refresh bezpośrednio przed wykonaniem jakiegokolwiek zadania aplikacji, które zakłada obecność lub brak konkretnego obiektu w kolekcji. Daje to pewność, że kolekcja jest możliwie najbardziej aktualna. Z drugiej strony, nadużywanie metody Refresh może powodować spadek efektywności programu.


RefreshLink - metoda (DAO)
RefreshLink - metoda

Uaktualnia informacje o połączeniu dotyczące tabeli połączonej (tylko obszary robocze Microsoft Jet).

Składnia

def_tabeli.RefreshLink

Element def_tabeli określa obiekt TableDef reprezentujący tabelę połączoną, dla której dane o połączeniu mają zostać uaktualnione.

Użycie

Aby zmienić informacje o połączeniu dotyczące tabeli połączonej, należy przywrócić do stanu początkowego właściwość Connect odpowiadającego jej obiektu TableDef, a następnie zastosować metodę RefreshLink, aby uaktualnić informacje. Użycie metody RefreshLink nie zmienia właściwości tabeli połączonej oraz obiektów Relation.

Aby informacje o połączeniu istniały we wszystkich kolekcjach skojarzonych z obiektem TableDef reprezentującym tabelę połączoną, należy dla każdej kolekcji zastosować metodę Refresh.


RegisterDatabase - metoda (DAO)
RegisterDatabase - metoda

Wprowadza informacje o połączeniu dotyczące źródła danych ODBC do Rejestru Windows. Sterownik ODBC potrzebuje informacji o połączeniu, gdy podczas sesji otwierane jest źródło danych ODBC.

Składnia

DBEngine.RegisterDatabase nazwa_bd, sterownik, tryb_cichy, atrybuty

Składnia metody RegisterDatabase zawiera następujące elementy:

Element	Opis
nazwa_bd	Jest to wartość typu String będąca nazwą użytą w metodzie OpenDatabase. Odnosi się ona do bloku informacji opisowej dotyczącej źródła danych. Na przykład, jeśli źródło danych jest zdalną bazą danych ODBC, może to być nazwa serwera.
sterownik	Jest to wartość typu String będąca nazwą sterownika ODBC. Nie jest to nazwa pliku DLL sterownika ODBC. Na przykład, SQL Server jest nazwą sterownika, ale SQLSRVR.dll jest nazwą pliku DLL. ODBC i właściwy sterownik muszą być już zainstalowane.
tryb_cichy	Jest to wartość typu Boolean przyjmująca wartość True, jeśli okna dialogowe sterownika ODBC żądające podania specyficznych dla sterownika informacji nie mają być wyświetlane; wartość False powoduje wyświetlanie okien dialogowych sterownika ODBC. Jeżeli atrybut tryb_cichy ma wartość True, atrybuty muszą zawierać wszystkie niezbędne informacje o sterowniku, w przeciwnym razie okna dialogowe będą i tak wyświetlone.
atrybuty	Jest to wartość typu String będąca listą słów kluczowych, które mają być dodane do Rejestru Windows. Słowa kluczowe są ciągami znaków ograniczonymi znakami powrotu karetki.
Użycie

Jeśli w momencie wywołania metody RegisterDatabase baza danych jest już zarejestrowana (informacja o połączeniu jest już wprowadzona) w Rejestrze Windows, informacja o połączeniu jest uaktualniana.

Jeśli z jakiegokolwiek powodu metoda RegisterDatabase kończy się niepowodzeniem, żadna zmiana nie jest wprowadzana do Rejestru Windows i sygnalizowany jest błąd.

Aby uzyskać więcej informacji o sterownikach ODBC, takich jak SQL Server, należy przejrzeć plik Pomocy dostarczony ze sterownikiem.

Aby dodać nowe źródła danych lub aby wprowadzić zmiany do istniejących pozycji, należy wykorzystać okno dialogowe Źródła danych ODBC w Panelu sterowania. Jeśli jednak stosowana jest metoda RegisterDatabase, należy ustawić opcję tryb_cichy na wartość True.


RepairDatabase - metoda (DAO)
RepairDatabase - metoda

Podejmuje próbę naprawienia uszkodzonej bazy danych Microsoft Jet (tylko w bazie danych Microsoft Jet).

Składnia

DBEngine.RepairDatabase nazwa_bd

Argument nazwa_bd jest wartością typu String będącą pełną nazwą (ze ścieżką) istniejącego pliku bazy danych Microsoft Jet. Jeśli ścieżka zostanie pominięta, przeszukiwany jest tylko bieżący katalog. Jeżeli system umożliwia stosowanie jednolitej konwencji nazewnictwa (UNC, Uniform Naming Convention), można także podać ścieżkę sieciową, np. "\\serwer1\użytk1\kat1\db1.mdb".

Użycie

Przed rozpoczęciem naprawy bazy danych określonej przez argument nazwa_bd należy bazę zamknąć. W środowisku wielodostępnym inni użytkownicy nie mogą pracować z bazą danych nazwa_bd, podczas gdy jest naprawiana. Jeśli baza danych nazwa_bd nie jest zamknięta lub nie jest dostępna w trybie wyłącznym, występuje błąd.

Metoda ta podejmuje próbę naprawienia bazy danych oznaczonej jako przypuszczalnie uszkodzona przez nie dokończoną operację zapisu. Sytuacja taka może wystąpić, jeśli aplikacja wykorzystująca aparat bazy danych Microsoft Jet zostanie niespodziewanie zamknięta z powodu zaniku zasilania lub błędu sprzętowego. Baza danych nie zostanie oznaczona jako przypuszczalnie uszkodzona, jeśli będzie użyta metoda Close lub jeśli aplikacja zostanie zakończona w zwykły sposób.

Metoda RepairDatabase próbuje także sprawdzić wszystkie tabele systemowe i wszystkie indeksy. Wszystkie dane, które nie mogą być naprawione, są porzucane. Jeśli baza danych nie może być naprawiona, występuje błąd wykonania.

Jeśli podejmowana jest próba otwarcia lub defragmentacji uszkodzonej bazy danych, zazwyczaj występuje błąd wykonania. W niektórych jednak sytuacjach uszkodzenie bazy danych może nie zostać wykryte, i wówczas nie pojawia się żaden błąd. Wskazane jest, aby użytkownicy aplikacji mieli możliwość wywołania w tej aplikacji metody RepairDatabase w sytuacji, gdy baza danych zachowuje się w nieprzewidziany sposób.

Bazy danych niektórych typów mogą zostać uszkodzone, jeśli użytkownik zakończy aplikację bez zamykania obiektów Database lub Recordset i aparatu bazy danych Microsoft Jet; w takim przypadku Microsoft Windows nie ma możliwości zapisania danych z buforów na dysk. Aby uniknąć uszkodzeń baz danych, należy zdefiniować takie procedury zamykania aplikacji i zamykania systemu, które zapewnią zapisanie w bazie danych wszystkich buforowanych stron. W niektórych przypadkach może okazać się niezbędna instalacja zasilaczy awaryjnych, zapewniających nieprzerwane zasilanie, aby w ten sposób zabezpieczyć się przed przypadkową utratą danych z powodu wahań napięcia.

Uwaga   Po naprawieniu bazy danych wskazane jest dokonanie jej defragmentacji z wykorzystaniem metody CompactDatabase w celu zlikwidowania wolnych obszarów w pliku i odzyskania pamięci dyskowej.


Requery - metoda (DAO)
Requery - metoda

Uaktualnia dane obiektu Recordset, wykonując ponownie kwerendę, na której bazuje ten obiekt.

Składnia

zestaw_rekordów.Requery nowa_def_kwerendy

Składnia metody Requery zawiera następujące elementy:

Element	Opis
zestaw_rekordów	Jest to zmienna obiektowa reprezentująca istniejący obiekt Microsoft Jet Recordset typu zestaw dynamiczny, utrwalonego lub progresywnego, bądź obiekt Recordset typu ODBCDirect.
nowa_def_ kwerendy	Element nieobowiązkowy typu Variant reprezentujący wartość właściwości Name obiektu QueryDef (tylko obszary robocze Microsoft Jet).
Użycie

Metoda ta może być stosowana do sprawdzenia, czy obiekt Recordset zawiera najbardziej aktualne dane. Wypełnia ona na nowo bieżący zestaw rekordów Recordset, wykorzystując albo bieżące parametry kwerendy, albo (w obszarze roboczym Microsoft Jet) nowe parametry podane jako argument nowa_def_kwerendy.

W obszarze roboczym ODBCDirect, jeśli oryginalna kwerenda była kwerendą asynchroniczną, metoda Requery również uruchomi kwerendę asynchronicznie.

Jeśli argument nowa_def_kwerendy nie zostanie podany, Recordset jest wypełniany ponownie w oparciu o tę samą definicję kwerendy i parametry, co oryginalny obiekt Recordset. Podczas ponownego wypełniania zostaną odzwierciedlone wszystkie wprowadzone zmiany odnoszące się do danych zestawu. Jeśli do utworzenia obiektu Recordset nie wykorzystano obiektu QueryDef, obiekt Recordset jest tworzony od początku.

Jeśli jako argument nowa_def_kwerendy zostanie podany oryginalny obiekt QueryDef, wówczas obiekt Recordset jest ponownie wypełniany danymi z wykorzystaniem parametrów określonych przez obiekt QueryDef. Wszystkie zmiany w danych zostaną przy tym wypełnianiu odzwierciedlone. Aby odzwierciedlić w obiekcie Recordset zmiany w wartościach parametrów kwerendy, należy podać argument nowa_def_kwerendy.

Jeśli zostanie podany inny obiekt QueryDef, niż oryginalnie zastosowany do utworzenia obiektu Recordset, obiekt Recordset zostanie utworzony od nowa.

Po zastosowaniu metody Requery pierwszy rekord w obiekcie Recordset staje się bieżącym rekordem.

Nie można stosować metody Requery w stosunku do obiektów Recordset typu zestaw dynamiczny lub utrwalonego, których właściwość Restartable jest ustawiona na False. Jeśli jednak zostanie podany nieobowiązkowy argument nowa_def_kwerendy, właściwość Restartable jest ignorowana.

Jeśli po zastosowaniu metody Requery obie właściwości BOF i EOF obiektu Recordset mają wartość True, oznacza to, że kwerenda nie zwróciła żadnych rekordów, a obiekt Recordset nie zawiera żadnych danych.


Seek - metoda (DAO)
Seek - metoda

Odnajduje rekord w indeksowanym obiekcie Recordset typu tabela, który spełnia określone kryteria dla bieżącego indeksu, i czyni ten rekord bieżącym (tylko obszary robocze Microsoft Jet).

Składnia

zestaw_rekordów.Seek porównanie, klucz1, klucz2...klucz13

Składnia metody Seek zawiera następujące elementy:

Element	Opis
zestaw_rekordów	Jest to zmienna obiektowa reprezentująca istniejący obiekt Recordset typu tabela, który posiada indeks zdefiniowany zgodnie z właściwością Index obiektu Recordset.
porównanie	Jedno z następujących wyrażeń znakowych: <, <=, =, >= lub >.
klucz1, klucz2...klucz13	Jedna lub więcej wartości odpowiadających polom bieżącego indeksu obiektu Recordset, jak podano w ustawieniu jego właściwości Index. Dopuszczalne jest użycie do 13 argumentów klucz.
Użycie

Przed zastosowaniem metody Seek należy we właściwości Index ustawić bieżący indeks. Jeśli indeks identyfikuje pole klucza, który nie jest unikatowy, metoda Seek odnajduje pierwszy rekord spełniający kryteria.

Metoda Seek szuka po określonych polach kluczowych i odnajduje pierwszy rekord spełniający kryteria określone przez porównanie i klucz1. Znaleziony rekord staje się rekordem bieżącym, a właściwość NoMatch przyjmuje wartość False. Jeśli metoda Seek nie może odnaleźć pasującego rekordu, właściwość NoMatch przyjmuje wartość True, a bieżący rekord jest nie zdefiniowany.

Jeśli porównanie jest znakiem równości (=), większe lub równe (>=) lub większe (>), metoda Seek rozpoczyna poszukiwanie na początku indeksu i szuka w przód.

Jeśli porównanie jest znakiem mniejszości (<) lub mniejsze lub równe (<=), metoda Seek rozpoczyna poszukiwanie od końca indeksu i szuka wstecz. Jeśli jednak na końcu indeksu występują powtarzające się pozycje indeksowe, metoda Seek rozpoczyna od dowolnej pozycji spośród powtarzających się elementów i przeszukuje do tyłu.

Konieczne jest określenie wartości dla wszystkich pól zdefiniowanych w indeksie. Jeśli metoda Seek jest stosowana z indeksem wielokolumnowym i nie określono rodzaju porównania dla każdego pola indeksu, wówczas nie można w porównaniu stosować operatora równości (=). Wynika to z tego, że niektóre z pól kryterium (klucz2, klucz3 itd.) będą domyślnie ustawione na wartość Null, która prawdopodobnie nie zostanie znaleziona. Stąd, operator równości działa poprawnie tylko dla rekordów, które mają wartości Null we wszystkich polach z wyjątkiem poszukiwanego klucza. Zamiast tego zalecane jest stosowanie operatora większy lub równy (>=).

Argument klucz1 musi być tego samego typu danych, co odpowiadające mu pole w bieżącym indeksie. Na przykład, jeśli bieżący indeks odnosi się do pola liczbowego (jak np. identyfikator pracownika), klucz1 musi być argumentem liczbowym. Podobnie, jeśli bieżący indeks odnosi się do pola tekstowego (jak np. nazwisko), klucz1 musi być ciągiem znaków.

Przy stosowaniu metody Seek nie jest konieczne istnienie rekordu bieżącego.

Aby wyliczyć istniejące indeksy, można wykorzystać kolekcję Indexes.

Aby wyszukać rekord w obiekcie Recordset typu zestaw dynamiczny lub utrwalonego, który spełnia specyficzny warunek nie uwzględniany przez istniejące indeksy, należy zastosować metody Find. Aby uwzględnić wszystkie rekordy, a nie tylko te spełniające konkretny warunek, należy do poruszania się po rekordach stosować metody Move.

Nie można zastosować metody Seek w stosunku do tabeli połączonej, ponieważ tabel połączonych nie można otwierać jako obiekty Recordset typu tabela. Jeśli jednak w celu bezpośredniego otwarcia bazy danych dostępnej poprzez instalowalny sterownik ISAM (innej niż ODBC) zostanie użyta metoda OpenDatabase, dla tabel takiej bazy danych można stosować metodę Seek.

W obszarze roboczym ODBCDirect, metody Find i Seek nie są dostępne dla żadnych typów obiektów Recordset, gdyż wykonanie operacji Find lub Seek poprzez połączenie ODBC jest nieefektywne w sieci. Zamiast tego należy sformułować kwerendę (wykorzystując argument źródło metody OpenRecordset) z odpowiednią klauzulą WHERE, która ogranicza zwracane rekordy do tych, które spełniają kryteria, jakie byłyby użyte w metodach Find lub Seek.


Synchronize - metoda (DAO)
Synchronize - metoda

Synchronizuje dwie repliki (tylko w bazie danych Microsoft Jet).

Składnia

baza_danych.Synchronize nazwa_ścieżki, wymiana

Składnia metody Synchronize zawiera następujące elementy:

Element	Opis
baza_danych	Jest to zmienna obiektowa reprezentująca obiekt typu Database będący repliką.
nazwa_ścieżki	Jest to wartość typu String zawierająca ścieżkę do repliki docelowej, z którą będzie synchronizowana baza_danych. Rozszerzenie nazwy pliku .mdb jest nieobowiązkowe.
wymiana	Element nieobowiązkowy. Stała wskazująca kierunek synchronizacji zmian pomiędzy dwiema bazami danych, jak to określono w sekcji "Ustawienia".
Ustawienia

Jako argument wymiana można zastosować niżej podane stałe. Możliwe jest użycie jednej z trzech pierwszych stałych, ewentualnie w połączeniu z czwartą.

Stała	Opis
dbRepExportChanges	Przekazuje zmiany od baza_danych do nazwa_ścieżki.
dbRepImportChanges	Przekazuje zmiany od nazwa_ścieżki do baza_danych.
dbRepImpExpChanges	(Domyślna) Przekazuje zmiany od baza_danych do nazwa_ścieżki i odwrotnie, realizując tzw. wymianę dwukierunkową.
dbRepSyncInternet	Wymienia dane pomiędzy plikami połączonymi poprzez sieć Internet.
Użycie

Metoda Synchronize jest stosowana do wymiany zmienionych danych i projektu pomiędzy dwiema bazami danych. Zmiany projektu zawsze następują jako pierwsze. Przed przystąpieniem do wymiany danych obie bazy danych muszą znajdować się na tym samym poziomie projektu. Na przykład, wymiana typu dbRepExportChanges może spowodować zmiany projektu w replice nawet pomimo tego, że dane są przenoszone tylko z baza_danych do nazwa_ścieżki.

Replika identyfikowana przez nazwa_ścieżki musi być częścią tego samego zestawu replik. Jeśli obie repliki mają to samo ustawienie właściwości ReplicaID lub są wzorcami dla dwóch różnych zestawów replik, synchronizacja kończy się z błędem.

Jeśli dwie repliki są synchronizowane poprzez Internet, konieczne jest użycie stałej dbRepSyncInternet. W takim przypadku należy dla argumentu nazwa_ścieżki podać adres Uniform Resource Locator (URL), a nie lokalną ścieżkę sieciową.

Uwaga   Nie można synchronizować repliki częściowej z innymi replikami częściowymi. Więcej informacji można znaleźć w opisie metody PopulatePartial.

Synchronizacja poprzez Internet wymaga Menedżera replikacji, który jest dostępny tylko w pakiecie Microsoft Office 97, Developer Edition.


Update - metoda (DAO)
Update - metoda

Zapisuje zawartość bufora kopii w modyfikowalnym obiekcie Recordset.

Składnia

zestaw_rekordów.Update (typ, wymuszenie)

Składnia metody Update zawiera następujące elementy:

Element	Opis
zestaw_rekordów	Jest to zmienna obiektowa reprezentująca otwarty, modyfikowalny obiekt Recordset.
typ	Element nieobowiązkowy. Jest to stała wskazująca typ aktualizacji, jak określono w sekcji "Ustawienia" (tylko obszary robocze ODBCDirect).
wymuszenie	Element nieobowiązkowy. Jest to wartość typu Boolean wskazująca, czy należy wymuszać zmiany w bazie danych, niezależnie od tego, czy od ostatniego wywołania metody AddNew, Delete lub Edit dane zostały zmienione przez innego użytkownika. Jeśli opcja ta jest ustawiona na wartość True, zmiany są wymuszane, i wówczas zmiany wprowadzone przez innego użytkownika są po prostu zastępowane. Jeśli opcja ta jest ustawiona na wartość False (wartość domyślna), zmiany wprowadzone przez innego użytkownika podczas oczekiwania na zapisanie poprzednio dokonanych zmian spowodują niezapisanie tych zmian, które są źródłem konfliktu. Błąd nie występuje, ale właściwości BatchCollisionCount i BatchCollisions wskazują odpowiednio liczbę konfliktów i wiersze zawierające konflikty (tylko w obszarach roboczych ODBCDirect).
Ustawienia

Dla argumentu typ można stosować niżej podane wartości. Wartości inne niż domyślne można stosować tylko przy włączonej aktualizacji wsadowej.

Stała	Opis
dbUpdateRegular	Wartość domyślna. Dokonane zmiany nie są buforowane, lecz natychmiast zapisywane na dysk.
dbUpdateBatch	Wszystkie dokonane zmiany przechowywane w buforze aktualizacji są zapisywane na dysk.
dbUpdateCurrentRecord	Tylko zmiany dokonane w bieżącym rekordzie są zapisywane na dysk.
Użycie

Metoda Update jest stosowana do zapisywania bieżącego rekordu i wprowadzonych w nim zmian.

Uwaga   Zmiany wprowadzone w bieżącym rekordzie są tracone, jeśli:

•	Zastosowano metodę Edit lub AddNew, a następnie wykonano przejście do innego rekordu bez użycia metody Update.

•	Zastosowano metodę Edit lub AddNew, a następnie ponownie użyto metod Edit lub AddNew bez zastosowania metody Update.

•	Ustawiono właściwość Bookmark na inny rekord.

•	Zamknięto zestaw_rekordów bez uprzedniego użycia metody Update.

•	Anulowano operację Edit przy użyciu metody CancelUpdate.

Aby rekord poddać edycji, należy zastosować metodę Edit w celu skopiowania zawartości bieżącego rekordu do bufora kopii. Jeśli nie zostanie użyta najpierw metoda Edit, zastosowanie metody Update lub próba zmiany wartości pola spowoduje wystąpienie błędu.

W obszarze roboczym ODBCDirect można wykonywać uaktualnienia wsadowe, przy założeniu, że biblioteka kursorów pozwala na uaktualnienia wsadowe i obiekt Recordset został otwarty z opcją optymistycznego blokowania wsadowego.

W obszarze roboczym Microsoft Jet, jeśli właściwość LockEdits obiektu Recordset jest ustawiona na wartość True (blokowanie pesymistyczne) w środowisku wielodostępnym, rekord pozostaje zablokowany od momentu użycia metody Edit do wykonania metody Update lub anulowania edycji. Jeśli właściwość LockEdits ustawiona jest na wartość False (blokowanie optymistyczne), rekord jest blokowany i tuż przed uaktualnieniem go w bazie danych jest porównywany ze zmodyfikowanym rekordem. Jeśli od momentu zastosowania metody Edit rekord zmienił się, operacja Update jest przerywana z błędem. Bazy danych źródła danych ODBC dołączonego do aparatu i dostępnej poprzez instalowalny sterownik ISAM zawsze stosują blokowanie optymistyczne. Aby kontynuować operację Update ze zmianami wprowadzonymi przez bieżącego użytkownika, należy zastosować ponownie metodę Update. Aby przywrócić rekord do postaci ze zmianami wprowadzonymi przez innego użytkownika, należy odświeżyć bieżący rekord za pomocą operacji Move 0.

Uwaga   Aby dodać, poddać edycji lub usunąć rekord, musi istnieć w tym źródle danych unikatowy indeks dla rekordu. Jeśli nie ma takiego indeksu, w momencie wywołania metod AddNew, Delete lub Edit w obszarze roboczym Microsoft Jet, występuje błąd typu “Brak uprawnień”, natomiast w obszarze roboczym ODBCDirect w momencie wywołania metody Update występuje błąd typu “Niepoprawny argument”.


Cancel - metoda (DAO)
Cancel - metoda

Anuluje asynchroniczne wykonywanie metody (tylko obszary robocze ODBCDirect).

Składnia

obiekt.Cancel

Składnia metody Cancel zawiera następujące elementy:

Element	Opis
obiekt	Wyrażenie znakowe, którego wartością jest jeden z obiektów podanych na liście "Dotyczy".
Użycie

Metoda Cancel służy do przerywania wykonywania asynchronicznych metod Execute, MoveLast, OpenConnection lub OpenRecordset (to znaczy takich, które zostały wywołane z opcją dbRunAsync). Jeżeli w metodzie, której wykonywanie ma zostać przerwane, nie użyto opcji dbRunAsync, metoda Cancel zwróci błąd czasu wykonania.

Poniższa tabela pokazuje, która metoda jest zatrzymywana w przypadku użycia metody Cancel w stosunku do konkretnego typu obiektu.

Typ obiektu	Zatrzymywana metoda asynchroniczna
Connection	Execute lub OpenConnection
QueryDef	Execute
Recordset	MoveLast lub OpenRecordset
Jeżeli po wywołaniu metody Cancel nastąpi próba odwołania się do obiektu, który mógł być utworzony przez wywołanie asynchroniczne metody OpenConnection lub OpenRecordset (to znaczy do obiektu Connection lub Recordset, z którego wywołano metodę Cancel), wówczas wystąpi błąd.


NextRecordset - metoda (DAO)
NextRecordset - metoda

Pobiera kolejny zestaw rekordów (o ile takie istnieją) zwracany przez wieloczęściową kwerendę wybierającą wywołaną przez metodę OpenRecordset. Zwraca wartość Boolean wskazującą, czy dostępne są dalsze rekordy (tylko obszary robocze ODBCDirect).

Składnia

Set boolean = zestaw_rek.NextRecordset

Składnia metody NextRecordset zawiera następujące elementy:

Element	Opis
boolean	Zmienna typu Boolean. Wartość True oznacza, że w obiekcie zestaw_rek dostępne są dalsze rekordy; wartość False oznacza, że nie ma dalszych rekordów i że obiekt zestaw_rek jest obecnie pusty.
zestaw_rek	Istniejąca zmienna typu Recordset, do której mają być zwrócone kolejne rekordy.
Użycie

W obszarze roboczym ODBCDirect istnieje możliwość otwarcia obiektu Recordset zawierającego więcej niż jedną kwerendę wybierającą jako argument źródło metody OpenRecordset lub jako właściwość SQL obiektu QueryDef reprezentującego kwerendę wybierającą, jak to pokazano w poniższym przykładzie.

SELECT Nazwisko, Imię FROM Autorzy
WHERE Nazwisko = 'Nowak';
SELECT Tytuł, ISBN FROM Tytuły
WHERE Pub_ID = 9999

Zwracany obiekt Recordset będzie początkowo zawierał wyniki pierwszej kwerendy. Aby pobrać zestawy wynikowe kolejnych kwerend, należy skorzystać z metody NextRecordset.

Jeżeli dostępnych jest więcej rekordów (czyli w wywołaniu metody OpenRecordset lub we właściwości SQL podana była kolejna kwerenda wybierająca), rekordy zwrócone przez kolejną kwerendę zostaną załadowane do obiektu Recordset, a metoda NextRecordset zwróci wartość True, co będzie oznaczało, że są dostępne dalsze rekordy. Jeżeli dalszych rekordów nie ma (wyniki ostatniej kwerendy zostały już załadowane do obiektu Recordset), metoda NextRecordset zwróci wartość False, a obiekt Recordset będzie pusty.

Do wyczyszczenia zawartości obiektu Recordset można także użyć metody Cancel, jednak metoda Cancel spowoduje także pominięcie innych, jeszcze nie załadowanych rekordów.


OpenConnection - metoda (DAO)
OpenConnection - metoda

Otwiera obiekt Connection w źródle danych ODBC (tylko obszary robocze ODBCDirect).

Składnia

Set połączenie = obszar_roboczy.OpenConnection (nazwa, opcje, tylko_do_odczytu, połącz)

Składnia metody OpenConnection zawiera następujące elementy:

Element	Opis
połączenie	Zmienna obiektowa typu Connection, do której będzie przypisane nowe połączenie.
obszar_roboczy	Element nieobowiązkowy. Zmienna obiektowa typu Workspace odwołująca się do istniejącego obiektu Workspace, który będzie zawierał nowe połączenie.
nazwa	Wyrażenie znakowe. Patrz opis w sekcji “Użycie”.
opcje	Element nieobowiązkowy. Wartość typu Variant ustawiająca różne opcje połączenia, jak podano w sekcji “Ustawienia”. W oparciu o tę wartość Menedżer sterowników ODBC żąda od użytkownika podania informacji o połączeniu, takich jak nazwa źródła danych (Data Source Name, DSN), nazwa użytkownika i hasło.
tylko_do_odczytu	Element nieobowiązkowy. Wartość typu Boolean ustawiana na True, jeżeli otwierane połączenie wykorzystywane będzie do dostępu w trybie tylko do odczytu, lub ustawiana na False, jeżeli otwierane połączenie będzie wykorzystywane do dostępu w trybie odczytu i zapisu (wartość domyślna).
połącz	Element nieobowiązkowy. Ciąg połączenia ODBC. Poszczególne elementy i składnia tego ciągu są podane w opisie właściwości Connect. Konieczny jest przedrostek ”ODBC;". Jeżeli element połącz zostanie pominięty, UID (user identifier - identyfikator użytkownika) i/lub PWD (password - hasło) zostaną pobrane z właściwości UserName i Password obiektu Workspace.
Ustawienia

Argument opcje określa, czy i kiedy użytkownik jest pytany o dane potrzebne do nawiązania połączenia oraz o to czy połączenie ma być otwarte w sposób asynchroniczny czy też nie. Jako wartości tego argumentu można podawać następujące stałe:

Stała	Opis
dbDriverNoPrompt	Menedżer sterowników ODBC wykorzystuje ciąg połączenia podany w argumentach nazwa_bd i połącz. Jeżeli nie zostaną podane wystarczające informacje, pojawi się błąd wykonania.
dbDriverPrompt	Menedżer sterowników ODBC powoduje wyświetlenie okna dialogowego Źródła danych ODBC, w którym podane są wszystkie istotne informacje podane w argumentach nazwa_bd lub połącz. Połączenie nawiązywane jest ze źródłem danych (DSN) wybranym przez użytkownika w oknie dialogowym lub, jeżeli użytkownik nie określi źródła danych, z domyślnym źródłem danych.
dbDriverComplete	Wartość domyślna. Jeżeli argument połącz zawiera wszystkie informacje niezbędne do nawiązania połączenia, Menedżer sterowników ODBC wykorzystuje ciąg podany w argumencie połącz. W przeciwnym wypadku metoda działa tak jak przy podaniu stałej dbDriverPrompt.
dbDriverCompleteRequired	Opcja ta powoduje takie same zachowanie jak opcja dbDriverComplete, z tym wyjątkiem, że sterownik ODBC wyłącza wszelkie żądania podania informacji, które nie są niezbędne do nawiązania połączenia.
dbRunAsync	Powoduje asynchroniczne wykonanie metody. Ta stała może być wykorzystywana łącznie z pozostałymi stałymi parametru opcje.
Użycie

Metoda OpenConnection służy do nawiązania połączenia ze źródłem danych ODBC z obszaru roboczego ODBCDirect. Metoda OpenConnection jest podobna do metody OpenDatabase, ale  nie jest jej równoważna. Podstawowa różnica między tymi metodami polega na tym, że metoda OpenConnection jest dostępna tylko w obszarze roboczym ODBCDirect.

Jeżeli w argumencie połącz zostanie podana zarejestrowana nazwa źródła danych OBDC (DSN), jako argument nazwa może być podany dowolny poprawny ciąg znaków, który będzie przypisany do właściwości Name obiektu Connection. Jeżeli w argumencie połącz nie zostanie podana poprawna nazwa źródła danych, argument nazwa musi odwoływać się do poprawnej nazwy źródła danych ODBC (DSN), która także zostanie przypisana do właściwości Name. Jeżeli argumenty nazwa i połącz nie zawierają poprawnej nazwy źródła danych, menedżer sterowników ODBC może być tak ustawiony (za pomocą argumentu opcje), by użytkownik został zapytany o wszystkie niezbędne do nawiązania połączenia informacje. Nazwa źródła danych podana w odpowiedzi na to pytanie będzie wówczas użyta jako właściwość Name.

Metoda OpenConnection zwraca obiekt Connection zawierający informacje o połączeniu. Obiekt Connection jest podobny do obiektu Database. Podstawowa różnica między tymi obiektami polega na tym, że obiekt Database zwykle reprezentuje bazę danych, może być jednak przy tym wykorzystywany do reprezentowania połączenia do źródła danych ODBC z obszarem roboczym Microsoft Jet.


SetOption - metoda (DAO)
SetOption - metoda

Tymczasowo przesłania wartości kluczy dotyczących aparatu bazy danych Microsoft Jet w Rejestrze Windows (tylko obszary robocze Microsoft Jet).

Składnia

DBEngine.SetOption parametr, nowa_wartość

Składnia metody SetOption zawiera następujące elementy:

Element	Opis
parametr	Stała typu Long opisana w sekcji “Ustawienia”.
nowa_wartość	Wartość typu Variant, na jaką ma być ustawiony parametr.
Ustawienia

Każda stała odnosi się do odpowiadającego jej klucza rejestru o ścieżce dostępu Jet\3.5\Engines\Jet 3.5\ (czyli kluczowi dbSharedAsyncDelay odpowiada ścieżka Jet\3.5\Engines\Jet 3.5\SharedAsyncDelay i tak dalej).

Stała	Opis
dbPageTimeout	Klucz PageTimeout
dbSharedAsyncDelay	Klucz SharedAsyncDelay
dbExclusiveAsyncDelay	Klucz ExclusiveAsyncDelay
dbLockRetry	Klucz LockRetry
dbUserCommitSync	Klucz UserCommitSync
dbImplicitCommitSync	Klucz ImplicitCommitSync
dbMaxBufferSize	Klucz MaxBufferSize
dbMaxLocksPerFile	Klucz MaxLocksPerFile
dbLockDelay	Klucz LockDelay
dbRecycleLVs	Klucz RecycleLVs
dbFlushTransactionTimeout	Klucz FlushTransactionTimeout
Użycie

Metoda SetOption służy do zmiany wartości rejestru w czasie wykonywania programu. Nowe wartości ustawione za pomocą metody SetOption będą uwzględniane do momentu ich zmiany za pomocą kolejnego wywołania metody SetOption lub dopóki obiekt DBEngine nie zostanie zamknięty. Dalsze informacje na temat znaczenia i wartości kluczy rejestru można znaleźć pod hasłem Inicjowanie sterownika aparatu bazy danych Microsoft Jet 3.5.


PopulatePartial - metoda (DAO)
PopulatePartial - metoda

Synchronizuje wszystkie zmiany w replice częściowej z repliką pełną, usuwa wszystkie rekordy w replice częściowej, a następnie ponownie wypełnia replikę częściową w oparciu o bieżące ustawienia filtrów repliki (tylko bazy danych Microsoft Jet).

Składnia

baza_danych.PopulatePartial nazwa_bd

Składnia metody PopulatePartial zawiera następujące elementy:

Element	Opis
baza_danych	Zmienna obiektowa, która odwołuje się do obiektu Database repliki częściowej, która ma być wypełniona.
nazwa_bd	Wartość typu String określająca ścieżkę i nazwę repliki pełnej, z której mają być pobierane rekordy wypełniające replikę częściową.
Użycie

Podczas synchronizacji repliki częściowej z repliką pełną, istnieje możliwość utworzenia w replice częściowej rekordów „osieroconych”. Na przykład, załóżmy że w tabeli Klienci, właściwość ReplicaFilter jest ustawiona na "Region = 'CA'". Jeśli użytkownik zmieni w replice częściowej region klienta z CA na NY, a następnie zostanie wykonana synchronizacja za pomocą metody Synchronize, zmiana przeniesie się do repliki pełnej, ale rekord w replice częściowej zawierający wartość NY zostanie osierocony, ponieważ w tej sytuacji nie spełnia kryterium filtru.

Aby rozwiązać problem rekordów osieroconych, należy użyć metody PopulatePartial. Metoda PopulatePartial jest podobna do metody Synchronize, ale podczas jej wykonania wszelkie zmiany synchronizowane są z repliką pełną, potem wszystkie rekordy w replice częściowej są usuwane, a następnie replika częściowa zostaje ponownie wypełnione w oparciu o bieżące filtry repliki. Nawet jeśli filtry repliki nie zostały zmienione, metoda PopulatePartial zawsze usunie wszystkie rekordy w replice częściowej, a następnie wypełni ją ponownie w oparciu o bieżące filtry.

Metody PopulatePartial używa się głównie podczas tworzenia repliki częściowej oraz przy zmianach filtrów repliki. Jeśli aplikacja zmienia filtry repliki:

1	Wykonaj synchronizację repliki pełnej z tą repliką częściową, w której są zmienione filtry.

2	Aby wykonać żądane zmiany w filtrze repliki, użyj właściwości ReplicaFilter i PartialReplica.

3	Wywołaj metodę PopulatePartial w celu usunięcia wszystkich rekordów z repliki częściowej i przesłania z repliki pełnej wszystkich rekordów spełniających kryteria określone przez nowy filtr.

Jeśli filtr repliki został zmieniony, a metoda Synchronize została wywołana bez wcześniejszego wywołania metody PopulatePartial, wystąpi błąd przechwytywalny.

Metoda PopulatePartial może być wywołana tylko dla takiej repliki częściowej, która została otwarta w trybie wyłączności. Ponadto, nie można wywoływać metody PopulatePartial z kodu uruchamianego wewnątrz samej repliki częściowej. Zamiast tego należy otworzyć replikę częściową z repliki pełnej lub innej bazy danych w trybie wyłączności, a następnie wywołać metodę PopulatePartial.

Uwaga   Mimo, że metoda PopulatePartial realizuje jednokierunkową synchronizację przed usunięciem zawartości i ponownym wypełnieniem repliki częściowej, dobrą praktyką jest przed wywołaniem metody PopulatePartial wywołanie metody Synchronize. Wówczas jeśli wywołanie metody Synchronize będzie nieudane, spowoduje to wystąpienie błędu przechwytywalnego. Ten błąd można wykorzystać w celu podjęcia decyzji, czy metoda PopulatePartial (która usunie wszystkie rekordy z repliki częściowej) powinna być wykonana. Jeśli metoda PopulatePartial jest wywoływana samodzielnie i podczas synchronizacji rekordów wystąpi błąd, rekordy w replice częściowej pozostaną usunięte, co może być niepożądane.


AbsolutePosition - właściwość (DAO)
AbsolutePosition - właściwość

Ustawia lub zwraca względny numer rekordu dla bieżącego obiektu typu Recordset.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest liczbą całkowitą typu Long z przedziału od 0 do pomniejszonej o jeden liczby rekordów w obiekcie typu Recordset. Wartość ta odpowiada numerowi porządkowemu bieżącego rekordu w obiekcie typu Recordset.

Użycie

Właściwość AbsolutePosition może być stosowana do ustawiania wskaźnika bieżącego rekordu na określonym rekordzie, według jego numeru porządkowego obiekcie Recordset typu zestaw dynamiczny lub utrwalonego. Ponadto, sprawdzając ustawienia właściwości AbsolutePosition, można określić numer bieżącego rekordu.

W związku z tym, że właściwość AbsolutePosition liczona jest od zera (czyli wartość 0 odnosi się do pierwszego rekordu obiektu Recordset), nie można ustawić jej na wartość większą lub równą liczbie rekordów w zestawie; próba ustawienia takiej wartości powoduje wystąpienie błędu przechwytywalnego. Liczbę rekordów w obiekcie Recordset można określić, sprawdzając ustawienie właściwości RecordCount. Maksymalnym dopuszczalnym ustawieniem właściwości AbsolutePosition jest wartość właściwości RecordCount minus 1.

Jeżeli nie ma bieżącego rekordu, jak w przypadku, gdy w obiekcie Recordset nie ma żadnych rekordów, właściwość AbsolutePosition zwraca –1. Jeżeli bieżący rekord jest usunięty, wartość właściwości AbsolutePosition nie jest zdefiniowana, i próba użycia wskazywanego przez nią rekordu powoduje wystąpienie błędu przechwytywalnego. Nowe rekordy są dodawane na końcu sekwencji rekordów.

Nie należy używać tej właściwości w zastępstwie numeru rekordu. Zalecanym sposobem zachowywania i powracania do bieżącej pozycji pozostaje stosowanie zakładki, które są jednocześnie jedynym sposobem ustawienia bieżącego rekordu, niezależnie od typów obiektów Recordset. W szczególności, pozycja rekordu zmieni się, gdy zostanie usunięty jeden lub więcej poprzedzających go rekordów. Ponadto nie ma pewności, że gdy obiekt Recordset zostanie utworzony ponownie, rekord będzie miał tę samą pozycję bezwzględną, ponieważ porządek poszczególnych rekordów w obiekcie Recordset nie jest w żaden sposób zapewniany, chyba że obiekt jest tworzony za pomocą instrukcji SQL z klauzulą ORDER BY.

Uwagi

•	Ustawienie właściwości AbsolutePosition na wartość większą od zera dla nowo otwartego, lecz jeszcze nie wypełnionego obiektu Recordset powoduje wystąpienie błędu przechwytywalnego. W pierwszym rzędzie należy wypełnić obiekt Recordset, wykorzystując metodę MoveLast.

•	Właściwość AbsolutePosition nie jest dostępna dla obiektów Recordset typu progresywnego oraz dla obiektów Recordset otwartych przez kwerendę przekazującą skierowaną do baz danych ODBC połączonych z aparatem Microsoft Jet.


AllowZeroLength - właściwość (DAO)
AllowZeroLength - właściwość

Ustawia lub zwraca wartość wskazującą, czy dopuszczalne jest ustawienie ciągu o długości zerowej ("") dla właściwości Value obiektu Field o typie danych Text lub Memo.

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu Boolean i wskazuje, czy wartość jest dopuszczalna. Wartość właściwości wynosi True, jeżeli obiekt Field dopuszcza we właściwości Value ciąg o długości zerowej; domyślną wartością jest False.

Użycie

Dla obiektu, który nie został jeszcze dołączony do kolekcji Fields właściwość ta może być odczytywana i zapisywana.

Po dołączeniu do kolekcji Fields dostępność właściwości AllowZeroLength zależy od obiektu zawierającego kolekcję Fields, jak przedstawiono w poniższej tabeli.

Jeżeli kolekcja Fields należy do	To właściwość AllowZeroLength
obiektu typu Index	nie jest dostępna.
obiektu typu QueryDef	jest tylko do odczytu.
obiektu typu Recordset	jest tylko do odczytu.
obiektu typu Relation	nie jest dostępna.
obiektu typu TableDef	jest do odczytu i zapisu.
Właściwość ta może być stosowana razem z właściwościami Required, ValidateOnSet lub ValidationRule do określenia poprawności wartości w polu.


AllPermissions - właściwość (DAO)
AllPermissions - właściwość

Zwraca wszystkie uprawnienia odnoszące się do bieżącej właściwości UserName obiektu Container lub Document, włączając zarówno uprawnienia specyficzne dla użytkownika, jak i uprawnienia, które użytkownik dziedziczy z tytułu przynależności do grupy (tylko obszary robocze Microsoft Jet).

Wartości zwracane

W przypadku obiektu typu Container lub Document zwracana jest wartość typu Long bądź stała lub stałe, przytoczone poniżej.

Stała	Opis
dbSecReadDef	Użytkownik może czytać definicję tabeli, łącznie z informacjami o kolumnach i indeksach.
dbSecWriteDef	Użytkownik może modyfikować lub usuwać definicję tabeli, łącznie z informacjami o kolumnach i indeksach.
dbSecRetrieveData	Użytkownik może pobierać dane z obiektu typu Document.
dbSecInsertData	Użytkownik może dodawać rekordy.
dbSecReplaceData	Użytkownik może modyfikować rekordy.
dbSecDeleteData	Użytkownik może usuwać rekordy.
Dodatkowo, pojemnika Databases lub dowolnego obiektu Document z kolekcji Documents mogą dotyczyć następujące stałe:

Stała	Opis
dbSecDeleteData	Użytkownik może usuwać rekordy.
dbSecDBAdmin	Użytkownik może replikować bazę danych i zmieniać hasło dostępu do bazy danych.
dbSecDBCreate	Użytkownik może tworzyć nowe bazy danych. To ustawienie jest dopuszczalne tylko dla pojemnika Databases w pliku informacji grupy roboczej (System.mdw).
dbSecDBExclusive	Użytkownik ma wyłączny dostęp do bazy danych.
dbSecDBOpen	Użytkownik może otwierać bazę danych.
Użycie

Właściwość ta różni się od właściwości Permissions, która zwraca tylko uprawnienia specyficzne dla użytkownika i nie uwzględnia uprawnień, które użytkownik może posiadać jako członek grup. Jeżeli bieżącą wartością właściwości UserName jest grupa, właściwość AllPermissions zwraca te same wartości, co właściwość Permissions.


Attributes - właściwość (DAO)
Attributes - właściwość

Ustawia lub zwraca wartość wskazującą jedną lub więcej cech obiektów Field, Relation lub TableDef.

Ustawienia i wartości zwracane

Ustawiana lub zwracana jest wartość typu Long, a wartością domyślną jest 0.

Dla obiektu typu Field, wartość właściwości określa cechy pola reprezentowanego przez obiekt Field i może być kombinacją poniższych stałych:

Stała	Opis
dbAutoIncrField	Dla nowych rekordów wartość pola jest automatycznie inkrementowana do niepowtarzalnej liczby całkowitej typu Long, która nie może zostać zmieniona (w obszarze roboczym Microsoft Jet, cecha dostępna tylko dla tabel bazy danych Microsoft Jet).
dbDescending	Pole jest sortowane w porządku malejącym (od Ż do A lub od 100 do 0); opcja ta dotyczy tylko obiektu Field w kolekcji Fields obiektu Index. Jeśli stała zostanie pominięta, pole sortowane jest w porządku rosnącym (od A do Ż lub od 0 do 100). Jest to wartość domyślna dla pól obiektów Index i TableDef (dotyczy tylko obszarów roboczych Microsoft Jet).
dbFixedField	Pole jest stałego rozmiaru (ustawienie domyślne dla pól liczbowych).
dbHyperlinkField	Pole zawiera informacje o hiperłączach (dotyczy tylko pól typu Memo).
dbSystemField	Pole przechowuje informacje o replikacji dotyczącej replik; pola tego typu nie można usunąć (dotyczy tylko obszarów roboczych Microsoft Jet).
dbUpdatableField	Wartość pola może być zmieniana.
dbVariableField	Rozmiar pola jest zmienny (dotyczy tylko pól typu Text).
Dla obiektu typu Relation, wartość właściwości określa cechy związku reprezentowanego przez obiekt Relation i może być kombinacją poniższych stałych:

Stała	Opis
dbRelationUnique	Związek jest typu jeden-do-jeden.
dbRelationDontEnforce	Związek nie jest wymuszany (brak integralności referencyjnej).
dbRelationInherited	Związek obowiązuje w bazie danych, która nie jest bieżąca, zawierającej dwie tabele połączone.
dbRelationUpdateCascade	Uaktualnianie będzie wykonywane kaskadowo.
dbRelationDeleteCascade	Usuwanie będzie wykonywane kaskadowo.
Uwaga   Jeśli właściwość Attributes obiektu Relation zostanie ustawiona w stan umożliwiający wykonywanie operacji kaskadowych, aparat bazy danych Microsoft Jet automatycznie uaktualnia lub usuwa rekordy w wielu tabelach, jako efekt dokonywania zmian w powiązanych z nimi tabelach podstawowych.

Na przykład, ustalono relację usuwania kaskadowego pomiędzy tabelą Klienci a tabelą Zamówienia. Jeśli z tabeli Klienci zostaną usunięte rekordy, odpowiadające im rekordy z tabeli Zamówienia zostaną również usunięte. Ponadto, jeśli pomiędzy tabelą Zamówienia a innymi tabelami zostanie ustalona relacja kaskadowego usuwania, rekordy z tych tablic będą automatycznie usuwane, gdy zostaną usunięte rekordy z tabeli Klienci.

Dla obiektu TableDef, wartość właściwości określa cechy tabeli reprezentowanej przez ten obiekt TableDef i może być kombinacją poniższych stałych typu Long.

Stała	Opis
dbAttachExclusive	Dla baz danych, które stosują aparat bazy danych Microsoft Jet, tabela jest tabelą połączoną otwartą do wyłącznego użytku. Stała ta może być ustawiona w dołączonym obiekcie TableDef dla tabeli lokalnej, ale nie dla tabeli zdalnej.
dbAttachSavePWD	Dla baz danych, które stosują aparat bazy danych Microsoft Jet, identyfikator użytkownika i hasło odnoszące się do tabeli połączonej zdalnie są zachowywane wraz z informacją o połączeniu. Stała ta może być ustawiona w dołączonym obiekcie TableDef dla tabeli zdalnej, ale nie dla tabeli lokalnej.
dbSystemObject	Tabela jest tabelą systemową założoną przez aparat bazy danych Microsoft Jet. Stała ta może być ustawiona w dołączonym obiekcie TableDef.
dbHiddenObject	Tabela jest tabelą ukrytą założoną przez aparat bazy danych Microsoft Jet. Stała ta może być ustawiona w dołączonym obiekcie TableDef.
dbAttachedTable	Tabela jest tabelą połączoną pochodzącą ze źródła danych, które nie jest źródłem danych ODBC, takiego jak baza danych Microsoft Jet lub Paradox (tylko do odczytu).
dbAttachedODBC	Tabela jest tabelą połączoną pochodzącą ze źródła danych ODBC, takiego jak Microsoft SQL Server (tylko do odczytu).
Użycie

Dla obiektu, który nie został jeszcze dołączony do kolekcji właściwość ta może być czytana i zapisywana.

W przypadku dołączonego obiektu Field, dostępność właściwości Attributes zależy od obiektu zawierającego kolekcję Fields.

Jeżeli obiekt Field należy do	To właściwość Attributes
obiektu typu Index	jest do odczytu i zapisu do momentu, aż obiekt typu TableDef, do którego jest dołączony obiekt Index, zostanie dołączony do obiektu Database; wówczas właściwość jest tylko do odczytu.
obiektu typu QueryDef	jest tylko do odczytu.
obiektu typu Recordset	jest tylko do odczytu.
obiektu typu Relation	nie jest dostępna.
obiektu typu TableDef	jest do odczytu i zapisu.
Dla dołączonego obiektu Relation, właściwość Attributes jest przeznaczona tylko do odczytu.

W przypadku dołączonego obiektu TableDef, właściwość jest przeznaczona do odczytu i zapisu, ale jeśli obiekt jest dołączony nie można dla ustawień używać wszystkich stałych, jak opisano w sekcji "Ustawienia i wartości zwracane".

Przy ustawianiu wielu atrybutów można je łączyć, sumując właściwe stałe. Nieprawidłowe wartości są ignorowane, nie powodując wygenerowania błędu.


BOF, EOF - właściwości (DAO)
BOF, EOF - właściwości

•	BOF — zwraca wartość wskazującą, czy pozycja bieżącego rekordu znajduje się przed pierwszym rekordem obiektu Recordset.

•	EOF — zwraca wartość wskazującą, czy pozycja bieżącego rekordu znajduje się za ostatnim rekordem obiektu Recordset.

Wartości zwracane

Dla właściwości BOF i EOF zwracane są wartości typu Boolean.

Właściwość BOF zwraca wartość True, jeżeli pozycja odpowiadająca bieżącemu rekordowi znajduje się przed pierwszym rekordem i wartość False, jeżeli pozycja ta znajduje się na lub za pierwszym rekordem.

Właściwość EOF zwraca wartość True, jeżeli pozycja odpowiadająca bieżącemu rekordowi znajduje się za ostatnim rekordem i wartość False, jeżeli pozycja ta znajduje się na lub przed ostatnim rekordem.

Użycie

Właściwości BOF i EOF mogą być stosowane przy określaniu, czy obiekt Recordset zawiera rekordy i czy podczas przechodzenia od rekordu do rekordu przekroczone zostały granice obiektu Recordset.

Położenie wskaźnika bieżącego rekordu określa wartości zwracane przez właściwości BOF i EOF.

Jeżeli obie właściwości BOF i EOF zwracają wartość True, nie ma bieżącego rekordu.

Jeżeli zostanie otwarty obiekt Recordset nie zawierający rekordów, obie właściwości BOF i EOF są ustawione na wartość True, a wartość właściwości RecordCount obiektu Recordset wynosi 0. Jeżeli zostanie otwarty obiekt Recordset zawierający przynajmniej jeden rekord, pierwszy rekord staje się bieżącym, a właściwości BOF i EOF mają wartości False; ich wartości pozostają False do momentu, aż nastąpi przejście poza początek lub poza koniec obiektu Recordset za pomocą metod, odpowiednio, MovePrevious i MoveNext. Jeżeli nastąpi przejście poza początek lub poza koniec obiektu Recordset, oznacza to, że nie ma bieżącego rekordu lub żaden rekord nie istnieje.

Jeżeli zostanie usunięty ostatni rekord obiektu Recordset, właściwości BOF i EOF mogą mieć w dalszym ciągu wartości False, aż zostanie zmienione położenie bieżącego rekordu.

Jeżeli w stosunku do obiektu Recordset zawierającego rekordy zostanie użyta metoda MoveLast, bieżącym rekordem stanie się rekord ostatni; jeżeli następnie zostanie zastosowana metoda MoveNext, bieżący rekord stanie się nieprawidłowy, a właściwość EOF przyjmie wartość True. Na odwrót, jeżeli w stosunku do obiektu Recordset zawierającego rekordy zostanie użyta metoda MoveFirst, bieżącym rekordem stanie się rekord pierwszy; jeżeli następnie zostanie zastosowana metoda MovePrevious, żaden rekord nie będzie bieżącym i właściwość BOF przyjmie wartość True.

Zazwyczaj, gdy konieczne jest przetworzenie wszystkich rekordów obiektu Recordset, w kodzie umieszczana jest pętla po wszystkich rekordach wykorzystująca metodę MoveNext, wykonywana do czasu, aż właściwość EOF przyjmie wartość True.

Stosowanie metody MoveNext, podczas gdy właściwość EOF ma wartość True, lub metody MovePrevious, podczas gdy właściwość BOF ma wartość True, powoduje wystąpienie błędu.

Poniższa tabela określa, które metody typu Move są dozwolone z różnymi kombinacjami wartości właściwości BOF i EOF.

	MoveFirst, MoveLast	MovePrevious, Move < 0	Move 0	MoveNext, Move > 0
BOF=True, EOF=False	Dozwolona	Błąd	Błąd	Dozwolona
BOF=False, EOF=True	Dozwolona	Dozwolona	Błąd	Błąd
Obie True	Błąd	Błąd	Błąd	Błąd
Obie False	Dozwolona	Dozwolona	Dozwolona	Dozwolona
Oznaczenie metody typu Move jako dozwolonej nie oznacza, że metoda ta zawsze znajdzie szukane rekordy. Jest to jedynie wskazówka, że wykonanie określonej metody Move jest dopuszczalne i nie spowoduje wystąpienia błędu. Stan właściwości BOF i EOF może zmieniać się w wyniku wykonania metody typu Move.

Metoda OpenRecordset wewnętrznie wywołuje metodę MoveFirst. Stąd zastosowanie metody OpenRecordset na pustym zestawie rekordów ustawia właściwości BOF i EOF na wartość True. (W tabeli poniżej podano efekt zakończonego niepowodzeniem wykonania metody MoveFirst.)

Wszystkie metody typu Move po znalezieniu rekordu ustawiają obie właściwości BOF i EOF na wartość False.

W obszarze roboczym Microsoft Jet dodanie rekordu do pustego zestawu rekordów Recordset powoduje ustawienie właściwości BOF na wartość False, natomiast właściwość EOF pozostaje True wskazując, że bieżącą jest pozycja na końcu zestawu Recordset. W obszarze roboczym ODBCDirect obie właściwości BOF i EOF przyjmują wartości False wskazując, że bieżącą pozycją jest pozycja nowego rekordu.

Żadna z metod Delete, nawet jeżeli usuwa ostatni, jedyny rekord z obiektu Recordset, nie powoduje zmiany wartości właściwości BOF i EOF.

Poniższa tabela przedstawia wpływ metod typu Move na ustawienia właściwości BOF i EOF w sytuacji, gdy rekord nie zostanie znaleziony.

	BOF	EOF
MoveFirst, MoveLast	True	True
Move 0	Bez zmiany	Bez zmiany
MovePrevious, Move < 0	True	Bez zmiany
MoveNext, Move > 0	Bez zmiany	True


Bookmark - właściwość (DAO)
Bookmark - właściwość

Ustawia lub zwraca zakładkę, która jednoznacznie identyfikuje bieżący rekord w obiekcie Recordset.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest wyrażeniem znakowym lub wyrażeniem wariantowym, którego wartość jest równa poprawnej zakładce. Typem danych jest tablica typu Variant o elementach typu Byte.

Użycie

Dla obiektu Recordset bazującego wyłącznie na tabelach Microsoft Jet, wartością właściwości Bookmarkable jest True, i wówczas można stosować właściwość Bookmark dla tego obiektu Recordset. Inne bazy danych mogą nie pozwalać na stosowanie zakładek. Na przykład, nie można stosować zakładek dla dowolnego obiektu Recordset bazującego na połączonej tabeli Paradox, która nie ma klucza podstawowego.

Utworzenie lub otwarcie obiektu Recordset powoduje przyporządkowanie każdemu rekordowi unikatowej zakładki. Przypisanie wartości właściwości Bookmark do zmiennej pozwala na zapamiętanie zakładki bieżącego rekordu. Aby szybko powrócić do tego rekordu w dowolnym momencie po przejściu do innego rekordu, należy ustawić wartość właściwości Bookmark obiektu Recordset na wartość tej zmiennej.

Liczba definiowanych zakładek nie jest ograniczona. Aby utworzyć zakładkę dla rekordu innego niż bieżący, należy przejść do żądanego rekordu i przypisać wartość właściwości Bookmark do zmiennej typu String identyfikującej ten rekord.

Aby upewnić się, że obiekt Recordset pozwala na stosowanie zakładek, należy przed użyciem jego właściwości Bookmark sprawdzić wartość właściwości Bookmarkable. Jeżeli wartość właściwości Bookmarkable wynosi False, obiekt Recordset nie umożliwia stosowania zakładek, a próba wykorzystania właściwości Bookmark powoduje wystąpienie błędu przechwytywalnego.

Jeżeli do utworzenia kopii obiektu Recordset zostanie użyta metoda Clone, ustawienia właściwości Bookmark dla oryginalnego i powielonego obiektu Recordset są identyczne i mogą być stosowane zamiennie. Nie można jednak zamiennie stosować zakładek pochodzących od różnych obiektów Recordset, nawet jeśli zostały one utworzone przy użyciu tego samego obiektu lub tej samej instrukcji SQL.

Ustawienie właściwości Bookmark na wartość reprezentującą usunięty rekord powoduje wystąpienie błędu.

Wartość właściwości Bookmark nie jest równa numerowi rekordu.


Bookmarkable - właściwość (DAO)
Bookmarkable - właściwość

Zwraca wartość wskazującą, czy obiekt Recordset umożliwia stosowanie zakładki, które można ustawiać za pomocą właściwości Bookmark.

Wartości zwracane

Zwracana wartość jest typu Boolean; przyjmuje ona wartość True, jeśli obiekt umożliwia stosowanie zakładek.

Użycie

Przed próbą ustawienia lub sprawdzenia wartości właściwości Bookmark należy sprawdzić ustawienie właściwości Bookmarkable obiektu Recordset.

Dla obiektu typu Recordset bazującego wyłącznie na tabelach Microsoft Jet wartością właściwości Bookmarkable jest True, i wówczas można stosować zakładki. Jednak inne bazy danych mogą nie pozwalać na stosowanie zakładek. Na przykład, nie można stosować zakładek dla dowolnego obiektu Recordset bazującego na połączonej tabeli Paradox, która nie ma klucza podstawowego.


CacheSize - właściwość (DAO)
CacheSize - właściwość

Ustawia lub zwraca liczbę rekordów pobieranych ze źródła danych ODBC, które są buforowane lokalnie w pamięci.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Long; musi zawierać się w przedziale od 5 do 1200, ale nie może być większa niż pozwala dostępna pamięć. Typową wartością jest 100. Ustawienie wartości 0 wyłącza buforowanie.

Użycie

Umieszczanie danych w buforze w pamięci lokalnej zwiększa wydajność, jeżeli obiekty Recordset są stosowane do pobierania danych ze zdalnego serwera. Bufor jest obszarem w pamięci lokalnej, w którym umieszczane są dane ostatnio wydobyte z serwera. Technika buforowania jest przydatna, gdy podczas działania aplikacji użytkownicy powtórnie żądają tych samych danych. Gdy użytkownicy żądają danych, aparat bazy danych Microsoft Jet szuka potrzebnych danych najpierw w buforze, zamiast od razu wydobywać je z serwera, co zabiera więcej czasu. Bufor zapamiętuje jedynie dane pochodzące ze źródła danych ODBC.

Dowolne źródło danych ODBC dołączone do aparatu, takie jak tabela połączona, może mieć lokalny bufor. Aby utworzyć bufor, należy otworzyć obiekt Recordset, pochodzący ze zdalnego źródła danych, ustawić właściwości CacheSize i CacheStart, a następnie zastosować metodę FillCache lub przejść po wszystkich rekordach, wykorzystując metody typu Move.

Obszar roboczy źródła danych ODBCDirect może korzystać z lokalnego bufora. Aby utworzyć bufor, należy ustawić właściwość CacheSize dla obiektu QueryDef. Dla obiektu Relation, właściwość CacheSize jest przeznaczona tylko do odczytu i zależy od wartości właściwości CacheSize obiektu QueryDef. Nie można korzystać z właściwości CacheStart i metody FillCache w obszarze roboczym ODBCDirect.

Ustawienia właściwości CacheSize można wiązać z liczbą rekordów, które są jednocześnie obsługiwane przez aplikację użytkownika. Na przykład, jeśli obiekt Recordset jest wykorzystywany jako źródło danych wyświetlanych na ekranie, właściwość CacheSize można ustawić na 20, aby usprawnić wyświetlanie jednocześnie 20 rekordów.

Aparat bazy danych Microsoft Jet pobiera z bufora rekordy z zakresu mieszczącego się w tej pamięci, a rekordów spoza tego zakresu żąda od serwera.

Rekordy wydobywane z bufora nie odzwierciedlają zmian w źródle danych, dokonywanych współbieżnie przez innych użytkowników.

Aby wymusić uaktualnienie danych w buforze, należy ustawić właściwość CacheSize obiektu Recordset na 0, a następnie ponownie ustawić poprzedni rozmiar bufora i użyć metody FillCache.


Clustered - właściwość (DAO)
Clustered - właściwość

Ustawia lub zwraca wartość wskazującą, czy obiekt typu Index reprezentuje indeks klastrowy tabeli (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest daną typu Boolean, która przyjmuje wartość True, jeśli obiekt Index reprezentuje indeks klastrowy.

Użycie

Niektóre formaty pulpitowej bazy danych dostępnej poprzez instalowalny sterownik ISAM używają indeksów klastrowych. Indeks klastrowy składa się z jednego lub więcej pól niekluczowych, które, brane razem, układają wszystkie rekordy tabeli w z góry ustalonym porządku. Indeks klastrowy umożliwia efektywny dostęp do rekordów w tabeli, w której wartości indeksu mogą nie być unikatowe.

Właściwość Clustered jest przeznaczona do odczytu i zapisu dla nowego obiektu Index, który nie został jeszcze dołączony do kolekcji, oraz jest przeznaczona tylko do odczytu dla obiektu Index umieszczonego już w kolekcji Indexes.

Uwagi

•	Bazy danych Microsoft Jet ignorują właściwość Clustered, gdyż aparat bazy danych Microsoft Jet nie obsługuje indeksów klastrowych.

•	Dla źródła danych ODBC, właściwość Clustered zawsze zwraca wartość False: w przypadku źródeł danych ODBC nie jest możliwe określenie, czy źródło to posiada indeks klastrowy, czy też nie.


CollatingOrder - właściwość (DAO)
CollatingOrder - właściwość

Zwraca wartość określającą sekwencję porządku sortowania danych typu Text stosowaną przy porównywaniu ciągów znaków lub sortowaniu (tylko obszary robocze Microsoft Jet).

Wartości zwracane

Zwracana wartość jest daną typu Long lub stałą, która może przyjmować jedną z poniższych wartości:

Stała	Porządek sortowania
dbSortGeneral	ogólny (angielski, francuski, niemiecki, portugalski, włoski i hiszpański współczesny)
dbSortArabic	arabski
dbSortChineseSimplified	chiński uproszczony
dbSortChineseTraditional	chiński tradycyjny
dbSortCyrillic	rosyjski
dbSortCzech	czeski
dbSortDutch	holenderski
dbSortGreek	grecki
dbSortHebrew	hebrajski
dbSortHungarian	węgierski
dbSortIcelandic	islandzki
dbSortJapanese	japoński
dbSortKorean	koreański
dbSortNeutral	neutralny
dbSortNorwDan	norweski lub duński
dbSortPDXIntl	paradox - międzynarodowy
dbSortPDXNor	paradox - norweski lub duński
dbSortPDXSwe	paradox - szwedzki lub fiński
dbSortPolish	polski
dbSortSlovenian	słoweński
dbSortSpanish	hiszpański
dbSortSwedFin	szwedzki lub fiński
dbSortThai	tajlandzki
dbSortTurkish	turecki
dbSortUndefined	nie zdefiniowany lub nieznany
Użycie

Dostępność właściwości CollatingOrder zależy od obiektu zawierającego kolekcję Fields, jak przedstawiono w poniższej tabeli.

Jeżeli kolekcja Fields należy do	To właściwość CollatingOrder
obiektu Index	nie jest dostępna.
obiektu QueryDef	jest tylko do odczytu.
obiektu Recordset	jest tylko do odczytu.
obiektu Relation	nie jest dostępna.
obiektu TableDef	jest tylko do odczytu.
Ustawienie właściwości CollatingOrder odpowiada argumentowi region metody CreateDatabase użytej do utworzenia bazy danych lub metody CompactDatabase zastosowanej przy ostatniej defragmentacji bazy danych.

Aby dla bazy danych lub pola określić metodę porównywania ciągów znaków, należy sprawdzić ustawienie właściwości CollatingOrder obiektu Database lub obiektu Field. Właściwość CollatingOrder można ustawić dla nowego, nie dołączonego obiektu Field, jeśli to ustawienie dla obiektu Field ma różnić się od ustawienia zawierającego obiektu Database.

Ustawienia obu właściwości CollatingOrder i Attributes obiektu Field w kolekcji Fields należącej do obiektu Index określają sekwencję i kierunek porządku sortowania indeksu. Nie można jednak ustalić sposobu porządkowania dla pojedynczego indeksu—można go ustalić jedynie dla całej tabeli.


ConflictTable - właściwość (DAO)
ConflictTable - właściwość

Zwraca nazwę tabeli konfliktów zawierającej rekordy bazy danych, które nie zgadzały się podczas synchronizacji dwóch replik (tylko obszary robocze Microsoft Jet).

Zwracane wartości

Zwracana wartość jest daną typu String, która jest ciągiem o długości zerowej, jeżeli nie ma tabeli konfliktów lub baza danych nie jest repliką.

Użycie

Jeśli dwóch użytkowników pracujących na dwóch osobnych replikach dokona zmiany w tym samym rekordzie bazy danych, zmiany wprowadzone przez jednego z nich nie zostaną uwzględnione w drugiej replice. W konsekwencji, użytkownik odpowiedzialny za odrzuconą zmianę musi rozwiązać ten konflikt.

Niezgodności występują na poziomie rekordów, a nie pomiędzy polami. Na przykład, jeżeli jeden użytkownik zmieni zawartość pola Adres, a inny uaktualni pole Telefon w tym samym rekordzie, wówczas jedna z tych zmian jest odrzucana. W związku z tym, że konflikty występują na poziomie rekordów, odrzucenie może nastąpić nawet wtedy, gdy zmiana przyjęta i zmiana odrzucona nie powodują rzeczywistego konfliktu informacji.

Mechanizm synchronizacji obsługuje niezgodności pomiędzy rekordami, tworząc tabelę konfliktów zawierającą informacje, które byłyby umieszczone w tabeli, gdyby zmiana została zaakceptowana. Tabele konfliktów mogą być przeglądane wiersz po wierszu, pozwalając użytkownikowi na naprawę właściwych rekordów.

Wszystkie tabele konfliktów mają nazwy tabela_conflict, gdzie tabela jest oryginalną nazwą tabeli skróconą tak, aby nie przekroczyć maksymalnej długości nazwy tabeli.


Connect - właściwość (DAO)
Connect - właściwość

Ustawia lub zwraca wartość dostarczającą informacji o źródle otwartego połączenia, o otwartej bazie danych, o bazie danych stosowanej w kwerendzie przekazującej lub o tabeli połączonej. Dla obiektów typu Database, nowych obiektów typu Connection, tabel połączonych i obiektów typu TableDef, które nie zostały jeszcze dołączone do kolekcji, właściwość ta jest przeznaczona do odczytu i zapisu. Dla obiektów typu QueryDef i tabel bazowych, właściwość ta jest przeznaczona tylko do odczytu.

Składnia

obiekt.Connect = typ_bazy_danych;parametry;

Składnia właściwości Connect zawiera następujące elementy.

Element	Opis
obiekt	Jest to wyrażenie obiektowe, którego wartość wyznacza obiekt na liście Dotyczy.
typ_bazy_danych	Element nieobowiązkowy. Jest to wartość typu String określająca typ bazy danych. Argument ten jest pomijany w przypadku baz danych Microsoft Jet; jeżeli występują parametry, należy pozostawić średnik (;) jako znak rozdzielający.
parametry	Element nieobowiązkowy. Jest to wartość typu String podająca dodatkowe parametry przekazywane do sterowników ODBC lub instalowalnych sterowników ISAM. Do rozdzielania parametrów stosowane są średniki.
Ustawienia

Ustawienie właściwości Connect konstruuje się jako wartość typu String składającą się z określenia typu bazy danych i zera lub więcej parametrów rozdzielonych średnikami. Właściwość Connect przekazuje dodatkowe potrzebne informacje do sterowników ODBC i niektórych sterowników ISAM.

Aby wykonać kwerendę przekazującą SQL dla tabeli połączonej z plikiem (.mdb) bazy danych Microsoft Jet, najpierw należy ustawić właściwość Connect bazy danych zawierającej połączoną tabelę na właściwy ciąg połączenia ODBC.

Dla obiektu TableDef reprezentującego tabelę połączoną, ustawienie właściwości Connect składa się z jednego lub dwóch elementów (określenie typu bazy danych i ścieżka do bazy), z których każdy zakończony jest średnikiem.

Ścieżka, jak przedstawiono w poniższej tabeli, jest pełną ścieżką do katalogu zawierającego pliki baz danych, która musi być poprzedzona identyfikatorem DATABASE=. W niektórych przypadkach (na przykład dla baz danych Microsoft Excel i Microsoft Jet) należy do ścieżki dodać konkretną nazwę pliku.

Poniższa tabela prezentuje możliwe typy baz danych oraz odpowiadające im specyfikatory i ścieżki dla ustawienia właściwości Connect. Można także jako ścieżkę podać “FTP://ścieżka/itd.” lub “HTTP://ścieżka/itd.”. W obszarach roboczych ODBCDirect można używać tylko specyfikatora "ODBC".

Typ bazy danych	Określenie	Przykład
Baza danych Microsoft Jet	[baza_danych];	dysk:\ścieżka\nazwa_pliku.mdb
dBASE III	dBASE III;	dysk:\ścieżka
dBASE IV	dBASE IV;	dysk:\ścieżka
dBASE 5	dBASE 5.0;	dysk:\ścieżka
Paradox 3.x	Paradox 3.x;	dysk:\ścieżka
Paradox 4.x	Paradox 4.x;	dysk:\ścieżka
Paradox 5.x	Paradox 5.x;	dysk:\ścieżka
FoxPro 2.0	FoxPro 2.0;	dysk:\ścieżka
FoxPro 2.5	FoxPro 2.5;	dysk:\ścieżka
FoxPro 2.6	FoxPro 2.6;	dysk:\ścieżka
Excel 3.0	Excel 3.0;	dysk:\ścieżka\nazwa_pliku.xls
Excel 4.0	Excel 4.0;	dysk:\ścieżka\nazwa_pliku.xls
Excel 5.0 lub Excel 95	Excel 5.0;	dysk:\ścieżka\nazwa_pliku.xls
Excel 97	Excel 97;	dysk:\ścieżka\nazwa_pliku.xls
Import HTML	HTML Import;	dysk:\ścieżka\nazwa_pliku
Eksport HTML	HTML Export;	dysk:\ścieżka
Tekst	Text;	dysk:\ścieżka
ODBC	ODBC; DATABASE=baza danych; UID=użytkownik;  PWD=hasło; DSN= nazwa_źródła danych; [LOGINTIMEOUT= sekundy;]	brak
Exchange	Exchange;  MAPILEVEL=ścieżka_ do_folderu; [TABLETYPE={ 0 | 1 }]; [PROFILE=profil;] [PWD=hasło;] [DATABASE=baza_danych;]	dysk:\ścieżka\nazwa_pliku.mdb
Użycie

Jeżeli podano jedynie "ODBC;", sterownik ODBC wyświetla okno dialogowe zawierające listę nazw wszystkich zarejestrowanych źródeł danych ODBC, pozwalając na wybór bazy danych.

Jeżeli hasło jest wymagane, a nie podano go w ustawieniach właściwości Connect, przy pierwszym dostępie sterownika ODBC do tabeli oraz po każdym zamknięciu i powtórnym otwarciu połączenia wyświetlane jest okno dialogowe logowania.

Dla danych programu Microsoft Exchange, kluczowi MAPILEVEL należy nadać wartość w postaci jednoznacznej ścieżki do folderu (na przykład: "Mailbox - Pat SmithIAlpha/Today"). Ścieżka nie zawiera nazwy folderu, ktory zostanie otwarty jako tabela; nazwa tego folderu powinna zostać podana jako argument nazwa w metodzie CreateTable. Klucz TABLETYPE powinien mieć wartość "0", aby otworzyć folder (wartość domyślna), lub "1", aby otworzyć książkę adresową. Kulcz PROFILE domyślnie wskazuje aktualnie używany profil.

Dla tabel bazowych w bazie danych Microsoft Jet (.mdb) właściwość Connect jest ciągiem o długości zerowej ("").

Właściwość Connect dla obiektu Database może być ustawiona przez podanie argumentu źródło w wywołaniu metody OpenDatabase. Na podstawie tej właściwości można określić dla bazy danych typ, ścieżkę, identyfikator użytkownika, hasło lub źródło danych ODBC.

W przypadku obiektu typu QueryDef w obszarze roboczym Microsoft Jet można zastosować właściwość Connect wraz z właściwością ReturnsRecords do utworzenia kwerendy przekazującej SQL typu ODBC. Argument typ_bazy_danych ciągu połączenia ma wartość "ODBC;", a pozostała część ciągu zawiera informacje specyficzne dla sterownika ODBC użytego do dostępu do zdalnych danych. Aby uzyskać więcej informacji, należy sprawdzić dokumentację określonego sterownika.

Uwagi

•	Właściwość Connect należy ustawić przed ustawieniem właściwości ReturnsRecords.

•	Użytkownik musi mieć zezwolenie na dostęp do komputera z serwerem obsługującym żądaną bazę danych.


Container - właściwość (DAO)
Container - właściwość

Zwraca nazwę obiektu Container, do którego należy obiekt Document (tylko obszary robocze Microsoft Jet).

Wartości zwracane

Zwracana wartość jest typu String.


Count - właściwość (DAO)
Count - właściwość

Zwraca liczbę obiektów w kolekcji.

Zwracana wartość

Zwracana wartość jest typu Integer.

Użycie

W związku z tym, że numeracja kolekcji zaczyna się od 0, pętle programowe powinny zawsze zaczynać się od elementu 0 i kończyć na wartości właściwości Count minus 1. Jeśli użytkownik organizuje pętlę dla wszystkich elementów kolekcji nie stosując właściwości Count, może wykorzystać w zamian instrukcję For Each...Next.

Właściwość Count nie przybiera nigdy wartości Null. Jeżeli wartość wynosi 0, oznacza to brak obiektów w kolekcji.


DataUpdatable - właściwość (DAO)
DataUpdatable - właściwość

Zwraca wartość, która wskazuje, czy dane w polu reprezentowanym przez obiekt Field są modyfikowalne.

Wartości zwracane

Wartość zwracana o typie danych Boolean przyjmuje wartość True, jeżeli dane w polu są modyfikowalne.

Użycie

Właściwość ta określa, czy można zmienić wartość właściwości Value obiektu Field. Dla obiektu Field, którego właściwość Attributes jest ustawiona na dbAutoIncrField, właściwość ta ma zawsze wartość False.

Właściwości DataUpdatable można używać w obiektach Field, które są dołączone do kolekcji Fields obiektów QueryDef, Recordset i Relation, ale nie do kolekcji Fields obiektów Index lub TableDef.


DateCreated, LastUpdated - właściwości (DAO)
DateCreated, LastUpdated - właściwości

•	DateCreated — zwraca datę i godzinę utworzenia obiektu lub datę i godzinę utworzenia tabeli bazowej, jeżeli obiekt jest obiektem Recordset typu tabela (tylko obszary robocze Microsoft Jet).

•	LastUpdated — zwraca datę i godzinę ostatniej zmiany w obiekcie lub w tabeli bazowej, jeżeli obiekt jest obiektem Recordset typu tabela (tylko obszary robocze Microsoft Jet).

Wartości zwracane

Wartość zwracana jest typu Variant (podtyp Date/Time).

Użycie

Dla obiektów Recordset typu tabela, data i godzina są zgodne z ustawieniami komputera, na którym utworzono lub uaktualniano tabelę bazową. Dla innych obiektów, właściwości DateCreated i LastUpdated zwracają datę i godzinę utworzenia lub ostatniej aktualizacji obiektu. W środowisku wielodostępny, użytkownicy powinni pobierać te dane bezpośrednio z serwera plików, aby w ten sposób uniknąć niezgodności w ustawieniach właściwości DateCreated i LastUpdated.


DefaultUser, DefaultPassword - właściwości (DAO)
DefaultUser, DefaultPassword - właściwości

•	DefaultUser — ustawia nazwę użytkownika, która jest używana przy tworzeniu domyślnego obiektu Workspace w trakcie jego inicjowania.

•	DefaultPassword — ustawia hasło, które jest używane przy tworzeniu domyślnego obiektu Workspace w trakcie jego inicjowania.

Ustawienia

Ustawienie właściwości DefaultUser jest typu danych String. W obszarze roboczym Microsoft Jet może ono zawierać od 1 do 20 znaków, natomiast w obszarze roboczym ODBCDirect może być dowolnej długości; może składać się ze znaków alfabetycznych, znaków akcentowanych, cyfr, spacji i symboli z wyjątkiem takich znaków, jak: " (znaki cudzysłowu), / (kreska ukośna prawa), \ (kreska ukośna lewa, [ ] (nawiasy kwadratowe), : (dwukropek), | (kreska pionowa), < (znak mniejszości), > (znak większości), + (znak plus), = (znak równości), ; (średnik), , (przecinek), ? (znak zapytania), * (gwiazdka), spacje poprzedzające i znaki sterujące (od znaku 00 do 31 kodu ASCII).

Wartość właściwości DefaultPassword jest typu danych String; w bazach danych Microsoft Jet może składać się z maksymalnie 14 znaków, a połączeniach ODBCDirect może mieć dowolną długość. Wartość ta może zawierać dowolne znaki z wyjątkiem znaku o kodzie 0 (zero) zestawu znaków ASCII.

Domyślnie, właściwość DefaultUser jest ustawiona na ciąg "admin", a właściwość DefaultPassword na ciąg o długości zerowej ("").

Użycie

Na ogół w nazwach użytkowników nie są uwzględnianie wielkości liter; jednak, jeżeli ponownie tworzymy konto użytkownika, które zostało usunięte lub utworzone w innej grupie roboczej, nazwa użytkownika musi być zgodna z nazwą oryginalną z uwzględnieniem małych i wielkich liter. W hasłach rozróżniane są małe i wielkie litery.

Zwykle do utworzenia obiektu Workspace z podanymi nazwą użytkownika i hasłem służy metoda CreateWorkspace. Jednak, dla zapewnienia zgodności z wcześniejszymi wersjami oraz dla wygody w sytuacji, gdy użytkownik nie implementuje zabezpieczonej bazy danych, aparat bazy danych Microsoft Jet w razie potrzeby tworzy automatycznie domyślny obiekt Workspace, jeżeli obiekt taki nie został jeszcze otwarty. W takim przypadku, właściwości DefaultUser i DefaultPassword określają użytkownika i hasło dla tego domyślnego obiektu Workspace.

Aby właściwość ta obowiązywała, trzeba ją ustawić przed wywołaniem dowolnej metody DAO.


DefaultValue - właściwość (DAO)
DefaultValue - właściwość

Ustawia i zwraca wartość domyślną obiektu Field. Dla obiektu Field nie dołączonego jeszcze do kolekcji Fields, właściwość ta jest właściwością przeznaczoną zarówno do odczytu, jak i do zapisu (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu danych String i może zawierać maksymalnie 255 znaków. Może to być tekst lub wyrażenie. Jeżeli ustawienie właściwości jest wyrażeniem, to nie może zawierać funkcji zdefiniowanych przez użytkownika, funkcji agregacji języka SQL aparatu bazy danych Microsoft Jet lub odesłań do kwerend, formularzy lub innych obiektów Field.

Uwaga   Właściwości DefaultValue obiektu Field w obiekcie TableDef można także nadać specjalną wartość w postaci ciągu "GenUniqueID( )". Wówczas tuż po dodaniu lub utworzeniu nowego rekordu do pola tego jest wpisywana liczba przypadkowa, nadając każdemu rekordowi unikatowy identyfikator. Właściwość Type pola musi odpowiadać typowi Long.

Użycie

Dostępność właściwości DefaultValue zależy od obiektu, który zawiera kolekcję Fields, jak przedstawiono w poniższej tabeli.

Jeżeli kolekcja należy do	To właściwość DefaultValue jest
obiektu Index	nie obsługiwana.
obiektu QueryDef	przeznaczona tylko do odczytu.
obiektu Recordset	przeznaczona tylko do odczytu.
obiektu Relation	nie obsługiwana.
obiektu TableDef	przeznaczona do odczytu i zapisu.
Po utworzeniu nowego rekordu wartość właściwości DefaultValue jest automatycznie wpisywana w pole. Wartość tego pola można zmienić, ustawiając odpowiednio jego właściwość Value.

Nie można stosować właściwości DefaultValue do pól typu Autonumer i Long Binary.


Description - właściwość (DAO)
Description - właściwość

Zwraca ciąg znaków zawierający opis błędu.

Wartości zwracane

Zwracana wartość typu danych String opisuje błąd.

Użycie

Właściwość Description zawiera krótki opis błędu. Właściwości tej należy używać w celu powiadomienia użytkownika o błędzie, którego nie możemy lub nie chcemy obsłużyć.


DistinctCount - właściwość (DAO)
DistinctCount - właściwość

Zwraca wartość, która określa liczbę unikatowych wartości z obiektu Index, zawartych w skojarzonej tabeli (tylko obszary robocze Microsoft Jet).

Wartości zwracane

Zwracana wartość jest typu danych Long.

Użycie

Właściwość służy DistinctCount do określenia liczby unikatowych wartości (kluczy) w indeksie. Każdy klucz jest liczony tylko raz, nawet jeśli występuje wielokrotnie (co jest możliwe w przypadku, gdy indeks dopuszcza duplikaty). Informacje zawarte w tej właściwości są przydatne dla aplikacji, które próbują zoptymalizować dostęp do danych na podstawie danych z indeksu. Liczba unikatowych wartości znana jest również jako liczebność obiektu Index.

Właściwość DistinctCount nie zawsze odzwierciedla faktyczną liczbę kluczy w określonym momencie. Na przykład, zmiana wywołana wycofaniem transakcji nie zostanie natychmiast odzwierciedlona we właściwości DistinctCount. Właściwość DistinctCount może także nie ujawnić liczby usuniętych rekordów z unikatowymi kluczami. Liczba ta będzie dokładna bezpośrednio po użyciu metody CreateIndex.


EditMode - właściwość (DAO)
EditMode - właściwość

Zwraca wartość, która wskazuje stan edycji bieżącego rekordu.

Wartości zwracane

Zwracana wartość typu Long wskazuje stan edycji, zgodnie z poniższą tabelą

Stała	Opis
dbEditNone	Edycja nie odbywa się.
dbEditInProgress	Wywołano metodę Edit i bieżący rekord znajduje się w buforze kopii.
dbEditAdd	Wywołano metodę AddNew i bieżący rekord z bufora kopiowania jest nowym rekordem, który nie został zapisany w bazie danych.
Użycie

Właściwość EditMode jest przydatna, gdy proces edycji zostanie przerwany, na przykład przez pojawienie się błędu podczas kontroli poprawności. Na podstawie właściwości EditMode można określić, czy należy zastosować metodę Update, czy CancelUpdate.

Można także określić, czy bieżąca strona jest zablokowana sprawdzając, czy właściwość LockEdits ma wartość True i czy właściwość EditMode jest ustawiona na dbEditInProgress,.


Filter - właściwość (DAO)
Filter - właściwość

Ustawia i zwraca wartość określającą rekordy, które będą zawarte w otwieranym obiekcie Recordset (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu danych String i zawiera klauzulę WHERE instrukcji SQL bez zastrzeżonego słowa WHERE.

Użycie

Właściwość Filter umożliwia zastosowanie filtra dla obiektu Recordset typu zestaw dynamiczny, utrwalonego lub progresywnego.

Właściwość Filter można wykorzystać także do ograniczenia rekordów zwracanych z istniejącego obiektu, gdy w oparciu o istniejący obiekt Recordset został otwarty nowy obiekt Recordset.

W wielu przypadkach nowy obiekt Recordset można otworzyć szybciej za pomocą instrukcji SQL, która zawiera klauzulę WHERE.

Przy filtrowaniu pól zawierających daty należy używać formatu daty stosowanego w Stanach Zjednoczonych (miesiąc-dzień-rok), nawet jeżeli wersja aparatu bazy danych Microsoft Jet nie jest wersją przeznaczoną dla Stanów Zjednoczonych (w takiej sytuacji należy łączyć elementy daty, na przykład strMiesiąc & "-" & strDzień & "-" & strRok). W przeciwnym razie dane nie będą filtrowane tak, jak należałoby się tego spodziewać.

Jeżeli właściwość ta ma postać ciągu połączonego z wartością niecałkowitą i parametry systemowe określają separator dziesiętny inny niż przyjęty w Stanach Zjednoczonych, taki jak znak przecinka (na przykład strFiltr = "CENA > " & lngCena, a lngCena = 125,50), to przy próbie otwarcia następnego obiektu Recordset wystąpi błąd. Dzieje się tak dlatego, że podczas łączenia ciągów liczba jest przekształcana na ciąg używający systemowego, domyślnego separatora dziesiętnego, a Microsoft Jet SQL akceptuje tylko znaki separatorów dziesiętnych stosowane w Stanach Zjednoczonych.


Foreign - właściwość (DAO)
Foreign - właściwość

Zwraca wartość, która wskazuje, czy obiekt Index reprezentuje klucz obcy w tabeli (tylko obszary robocze Microsoft Jet).

Wartości zwracane

Wartość zwracana jest typu danych Boolean i zwraca wartość True, jeżeli obiekt Index reprezentuje klucz obcy.

Użycie

Klucz obcy składa się z jednego lub więcej pól z tabeli obcej, które jednoznacznie określają każdy wiersz w tabeli podstawowej.

Podczas tworzenia przez użytkownika związku wymuszającego integralność referencyjną aparat bazy danych Microsoft Jet tworzy dla tabeli obcej obiekt Index i ustawia właściwość Foreign.


ForeignName - właściwość (DAO)
ForeignName - właściwość

Ustawia lub zwraca wartość określającą dla związku nazwę obiektu Field z tabeli obcej, który odpowiada polu w tabeli podstawowej (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu danych String i określa nazwę obiektu Field w skojarzonej kolekcji Fields obiektu TableDef.

Jeżeli obiekt Relation nie jest dołączony do Database, natomiast obiekt Field jest dołączony do obiektu Relation, właściwość ForeignName jest przeznaczona zarówno do odczytu, jak i zapisu. Po dołączeniu obiektu Relation do bazy danych właściwość ForeignName można tylko odczytywać.

Użycie

Właściwość ForeignName występuje tylko w obiekcie Field, który należy do kolekcji Fields obiektu Relation.

Ustawienia właściwości Name i ForeignName dla obiektu Field wyznaczają nazwy odpowiednich pól w tabeli podstawowej i tabeli obcej związku. Ustawienia właściwości Table i ForeignTable dla obiektu Relation określają tabelę podstawową i obcą związku.

Na przykład, jeżeli w tabeli DostępneCzęści jest zapisana lista poprawnych kodów artykułów (w polu o nazwie NumCzęści), to można byłoby ustalić związek z tabelą PozZamówienia polegający na tym, że kod artykułu mógłby być wprowadzony do tabeli PozZamówienia tylko wtedy, gdy istnieje on już w tabeli DostępneCzęści. Jeżeli tabela DostępneCzęści nie zawiera określonego kodu artykułu i nie ustawiono właściwości Attributes obiektu Relation na dbRelationDontEnforce, to wystąpi błąd przechwytywalny.

W takim przypadku tabela DostępneCzęści jest tabelą obcą, a więc właściwość ForeignTable obiektu Relation byłaby ustawiona na tabelę DostępneCzęści, a właściwość Table obiektu Relation na tabelę PozZamówienia. Właściwości Name i ForeignName obiektu Field w kolekcji Fields obiektu Relation byłyby ustawione na pole NumCzęści.

Opisany powyżej związek można zilustrować następująco:


ForeignTable - właściwość (DAO)
ForeignTable - właściwość

Ustawia lub zwraca nazwę tabeli obcej w związku (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu danych String i określa nazwę tabeli w kolekcji TableDefs obiektu Database. Dla nowego obiektu Relation, który nie jest jeszcze dołączony do kolekcji, właściwość ta jest przeznaczona zarówno do odczytu, jak i do zapisu, natomiast dla obiektu Relation istniejącego już w kolekcji Relations jest przeznaczona tylko do odczytu.

Użycie

Ustawienie właściwości ForeignTable obiektu Relation jest ustawieniem właściwości Name obiektu TableDef lub QueryDef, który reprezentuje obcą tabelę lub kwerendę; ustawienie właściwości Table jest ustawieniem właściwości Name obiektu TableDef lub QueryDef, który reprezentuje tabelę podstawową lub kwerendę.

Na przykład, jeżeli w tabeli DostępneCzęści jest zapisana lista poprawnych kodów artykułów (w polu o nazwie NumCzęści), to można byłoby ustalić związek z tabelą PozZamówienia polegający na tym, że kod artykułu mógłby być wprowadzony do tabeli PozZamówienia tylko wtedy, gdy istnieje on już w tabeli DostępneCzęści. Jeżeli tabela nie zawiera określonego kodu artykułu i nie ustawiono właściwości Attributes obiektu Relation na dbRelationDontEnforce, to wystąpi błąd przechwytywalny.

W takim przypadku tabela DostępneCzęści jest tabelą podstawową, a więc właściwość Table obiektu Relation byłaby ustawiona na tabelę DostępneCzęści, a właściwość ForeignTable obiektu Relation na tabelę PozZamówienia. Właściwości Name i ForeignName obiektu Field w kolekcji Fields obiektu Relation byłyby ustawione na pole NumCzęści.

Opisany powyżej związek można zilustrować następująco:


HelpContext, HelpFile - właściwości (DAO)
HelpContext, HelpFile - właściwości

•	HelpContext — zwraca jako zmienną typu Long identyfikator kontekstu dla tematu w pliku Pomocy Microsoft Windows.

•	HelpFile — zwraca wartość typu String, która wskazuje pełną ścieżkę dostępu do pliku Pomocy.

Użycie

Jeżeli we właściwości HelpFile określono plik Pomocy Microsoft Windows, to uwzględniając wartość właściwości HelpContext, można automatycznie wyświetlać wskazywany przez nią temat Pomocy.

Uwaga   W aplikacji należy napisać procedury do obsługi typowych błędów. Przy programowaniu kodu obiektu można wykorzystać tekst umieszczony w pliku Pomocy dla tego obiektu, aby usprawnić obsługę błędów lub aby wyświetlić użytkownikowi komunikat o błędzie, jeżeli błędu nie można usunąć w kodzie.


IgnoreNulls - właściwość (DAO)
IgnoreNulls - właściwość

Ustawia lub zwraca wartość, która wskazuje, czy rekordy o wartości Null w polach indeksowanych, mają pozycje w indeksie (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana typu danych Boolean jest równa True, jeżeli pola z wartościami Null nie mają pozycji w indeksie. Dla nowego obiektu Index, nie dołączonego jeszcze do kolekcji, właściwość ta jest przeznaczona zarówno do odczytu, jak i do zapisu, natomiast dla obiektu Index istniejącego już w kolekcji Indexes jest przeznaczona tylko do odczytu.

Użycie

Aby przyspieszyć wyszukiwanie rekordów, można dla pola zdefiniować indeks. Jeżeli w polu indeksowanym pozycje Null są dozwolone i przypuszczalnie będzie dużo pozycji Null, to dla obiektu Index warto ustawić właściwość IgnoreNulls na wartość True, aby zmniejszyć obszar pamięci zajęty przez indeks.

Właściwości IgnoreNulls i Required określają wspólnie, czy rekordowi z wartością Null w polu indeksowym odpowiada pozycja w indeksie.

Wartość IgnoreNulls jest równa	Wartość Required jest równa	Efekt
True	False	Wartość Null w polu indeksowym jest dozwolona; pozycja w indeksie nie jest dodawana.
False	False	Wartość Null w polu indeksowym jest dozwolona; pozycja w indeksie jest dodawana.
True lub False	True	Wartość Null w polu indeksowym nie jest dozwolona; pozycja w indeksie nie jest dodawana.


Index - właściwość (DAO)
Index - właściwość

Ustawia lub zwraca wartość, która wskazuje nazwę bieżącego obiektu Index w obiekcie Recordset typu tabela (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu danych String, który określa nazwę obiektu Index w kolekcji Indexes obiektu TableDef lub obiektu Tabledef lub obiektu Recordset typu tabela.

Użycie

Rekordy w tabelach bazowych nie są pamiętane w jakimś określonym porządku. Ustawienie właściwości Index zmienia kolejność rekordów zwracanych z bazy danych; nie wpływa jednak na kolejność ich zapisu.

Podany obiekt Index musi być uprzednio zdefiniowany. Próba ustawienia właściwości Index na nie istniejący obiekt Index lub próba użycia metody Seek, gdy właściwość Index nie jest ustawiona, kończy się błędem przechwytywalnym.

Aby określić, jakie obiekty Index są dostępne dla obiektów Recordset typu tabela utworzonych z tego obiektu TableDef, należy sprawdzić kolekcję Indexes obiektu TableDef.

Nowy indeks dla tabeli można utworzyć, tworząc nowy obiekt Index, ustawiając jego właściwości, dołączając go do kolekcji Indexes odpowiedni obiekt TableDef i ponownie otwierając obiekt Recordset.

Rekordy zwrócone z obiektu Recordset typu tabela mogą być porządkowane tylko przez indeksy zdefiniowane dla podlegającego obiektu TableDef. Aby sortować rekordy w innej kolejności, można otworzyć obiekt Recordset typu zestaw dynamiczny, utrwalonego lub progresywnego za pomocą instrukcji SQL z klauzulą ORDER BY.

Uwagi

•	Nie ma obowiązku tworzenia indeksów dla tabel. W przypadku dużych, nie indeksowanych tabel, dostęp do określonego rekordu lub utworzenie obiektu Recordset może zajmować jednak dużo czasu. Z drugiej strony, utworzenie zbyt dużej liczby indeksów spowalnia operacje aktualizacji, dołączania i usuwania, ponieważ wszystkie indeksy są automatycznie uaktualniane.

•	Rekordy odczytywane z tabeli bez indeksów nie są zwracane w żadnym określonym porządku.

•	Właściwość Attributes każdego obiektu Field w obiekcie Index określa kolejność rekordów i sposoby dostępu stosowane do tego indeksu.

•	Indeks unikatowy umożliwia optymalizowanie wyszukiwania rekordów.

•	Indeksy nie wpływają na fizyczny porządek w tabeli bazowej — indeksy oddziaływują tylko na to, w jaki sposób obiekt Recordset typu tabela uzyskuje dostęp do rekordów po wybraniu określonego indeksu lub po otwarciu obiektu Recordset.


Inherit - właściwość (DAO)
Inherit - właściwość

Ustawia lub zwraca wartość, która wskazuje, czy nowe obiekty Document odziedziczą domyślne ustawienie właściwości Permissions (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu danych Boolean. Jeżeli właściwości tej nadamy wartość True, to obiekty Document będą dziedziczyły domyślne ustawienie właściwości Permissions.

Użycie

Właściwość Inherit w połączeniu z właściwością Permissions służą do definiowania uprawnień, jakie będą nabywały automatycznie po utworzeniu nowe dokumenty. Jeżeli właściwość Inherit zostanie ustawiona na True i następnie zostanie ustawione uprawnienie dotyczące pojemnika, to uprawnienie to będzie też dotyczyło każdego nowego dokumentu utworzonego w tym pojemniku. Jest to bardzo wygodny sposób inicjalnego ustawiania uprawnień dotyczących użycia obiektu.

Właściwość Inherit nie wpływa na dokumenty istniejące już w pojemniku — nie można zmodyfikować wszystkich uprawnień w stosunku do wszystkich dokumentów istniejących w pojemniku przez ustawienie właściwości Inherit i nowego uprawnienia. Działanie takie ma wpływ tylko na nowe dokumenty, utworzone po ustawieniu właściwości Inherit.


Inherited - właściwość (DAO)
Inherited - właściwość

Zwraca wartość, która wskazuje, czy obiekt Property jest dziedziczony z obiektu bazowego.

Wartości zwracane

Wartość zwracana jest typu danych Boolean, ma wartość True, jeżeli obiekt Property jest dziedziczony. Dla wbudowanych obiektów Property reprezentujących właściwości predefiniowane, jedyną możliwą wartością zwracaną jest False. W obszarze roboczym ODBCDirect właściwość ta ma zawsze wartość False.

Użycie

Właściwość Inherited służy do określenia, czy zdefiniowany przez użytkownika obiekt Property został utworzony dla obiektu, którego dotyczy, czy też obiekt Property został odziedziczony z innego obiektu. Na przykład, przypuśćmy, że tworzymy nowy obiekt Property dla obiektu QueryDef i następnie otwieramy obiekt Recordset z obiektu QueryDef. Ten nowy obiekt Property będzie elementem kolekcji Properties obiektu Recordset a jego właściwość Inherited będzie ustawiona na True, ponieważ została ona utworzona dla obiektu QueryDef, a nie dla obiektu Recordset.


IniPath - właściwość (DAO)
IniPath - właściwość

Ustawia lub zwraca informacje o kluczu Rejestru Windows zawierającym wartości dla aparatu bazy danych Microsoft Jet (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu danych String; wskazuje ona dostarczoną przez użytkownika część klucza Rejestru Windows zawierającą ustawienia aparatu bazy danych Microsoft Jet lub parametry potrzebne dla baz danych dostępnych poprzez instalowalny sterownik ISAM.

Użycie

Aparat bazy danych Microsoft Jet można skonfigurować za pomocą Rejestru Windows. W Rejestrze można ustawić różne opcje, takie jak biblioteka dołączana dynamicznie instalowalnego systemu ISAM.

Aby opcja ta działała, trzeba przed wywołaniem jakiegokolwiek innego kodu DAO ustawić właściwość IniPath. Zakres tego ustawienia jest ograniczony do danej aplikacji i nie można go zmienić bez ponownego uruchomienia tej aplikacji.

Rejestr Windows zawiera również parametry inicjujące dla niektórych sterowników instalowalnych baz danych ISAM. Na przykład, aby użyć wersji 4.0 programu Paradox, należy ustawić właściwość IniPath na część Rejestru, która zawiera odpowiednie parametry.

Właściwość ta rozpoznaje klucz HKEY_LOCAL_MACHINE lub klucz HKEY_LOCAL_USER. Domyślnie, stosowany jest klucz HKEY_LOCAL_MACHINE.

Aparat bazy danych Microsoft Jet w wersji 2.5 lub wcześniejszej przechowuje parametry inicjujące w plikach o rozszerzeniu .ini.


IsolateODBCTrans - właściwość (DAO)
IsolateODBCTrans - właściwość

Ustawia lub zwraca wartość, która wskazuje, czy transakcje wykorzystujące to samo źródło danych ODBC dołączone do aparatu są izolowane (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu danych Boolean; ma ona wartość True, jeżeli transakcje używające tego połączenia ODBC mają być izolowane. Właściwość ta ustawiona na False (wartość domyślna) zezwala na to, by wiele transakcji wykorzystywało to samo połączenie ODBC.

Użycie

W niektórych sytuacjach zachodzi potrzeba zastosowania wielu transakcji jednocześnie korzystających z tego samego połączenia ODBC. W tym celu należy dla każdej transakcji otworzyć oddzielny obiekt Workspace. Chociaż każdy obiekt Workspace może mieć własne połączenie ODBC z bazą danych, to jednak działanie systemu jest przez to wolniejsze. Ponieważ izolowanie transakcji nie jest zwykle potrzebne, połączenia ODBC z wieloma obiektami Workspace otwartymi przez tego samego użytkownika są domyślnie współdzielone.

Niektóre serwery ODBC, takie jak serwer Microsoft SQL, nie umożliwiają realizacji wielu transakcji jednocześnie w pojedynczym połączeniu. Jeżeli trzeba, by transakcje oczekiwały na wolne połączenie, należy w każdym obiekcie Workspace natychmiast po jego otwarciu ustawić właściwość IsolateODBCTrans na True. Takie ustawienie wymusza oddzielne połączenie ODBC dla każdego obiektu Workspace.


LastModified - właściwość (DAO)
LastModified - właściwość

Zwraca zakładkę wskazującą ostatnio dodany lub zmieniony rekord.

Wartości zwracane

Zwracana wartość jest tablicą typu Variant danych typu Byte.

Użycie

Właściwość LastModified może być użyta w celu przejścia do ostatnio dodanego lub zmienionego rekordu. Należy jej używać z obiektami Recordset typu tabela lub typu zestaw dynamiczny. Aby właściwość LastModified miała wartość, dany rekord musi być dodany lub zmieniony drogą użycia obiektu Recordset.


LockEdits - właściwość (DAO)
LockEdits - właściwość

Ustawia lub zwraca wartość oznaczającą typ zablokowany aktywny podczas edycji.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Boolean i określa tryb blokowania, jak podano poniżej.

Wartość	Opis
True	Wartość domyślna. Aktywne jest blokowanie pesymistyczne. Strona o wielkości 2KB zawierająca edytowany rekord jest blokowana natychmiast po wywołaniu metody Edit.
False	Aktywne jest blokowanie optymistyczne. Strona o wielkości 2KB zawierająca edytowany rekord nie jest blokowana, dopóki nie zostanie wywołana metoda Update.
Użycie

Właściwość LockEdits może być używana z modyfikowalnymi obiektami Recordset.

Jeśli strona jest zablokowana, żaden inny użytkownik nie może dokonać edycji rekordów znajdujących się na tej stronie. Nadanie właściwości LockEdits wartości True podczas gdy inny użytkownik zablokował stronę, spowoduje błąd podczas wywołania metody Edit. Inni użytkownicy mogą odczytywać dane z zablokowanych stron.

Nadanie właściwości LockEdits wartości False i późniejsze wywołanie metody Update spowoduje błąd, jeśli inny użytkownik zablokował stronę. Aby obejrzeć zmiany dokonane w rekordzie przez innych użytkowników, należy użyć metody Move, podając jako argument 0. Należy jednak pamiętać, że w ten sposób traci się własne zmiany.

Podczas pracy ze źródłem danych ODBC dołączonym do aparatu właściwość LockEdits ma zawsze wartość False, czyli ustawione jest blokowanie optymistyczne. Aparat bazy danych Microsoft Jet nie ma kontroli nad mechanizmami blokowania używanymi w zewnętrznych serwerach baz danych.

Uwaga   Właściwość LockEdits może zostać ustawiona wcześniej, przy pierwszym otwarciu obiektu Recordset, przez podanie argumentu blokowanie metody OpenRecordset. Wartość dbPessimistic tego argumentu powoduje ustawienie właściwości LockEdits na wartość True; jakakolwiek inna wartość ustawia właściwość LockEdits na wartość False.


LoginTimeout - właściwość (DAO)
LoginTimeout - właściwość

Ustawia lub zwraca czas w sekundach, po jakim pojawia się błąd w trakcie logowania do bazy danych ODBC.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Integer i określa liczbę sekund, po których pojawia się błąd przekroczenia limitu czasu. Domyślna wartość właściwości LoginTimeout wynosi 20 sekund. Ustawienie właściwości LoginTimeout na wartość 0 oznacza, że błąd przekroczenia limitu czasu nie będzie zgłaszany.

Użycie

Próba logowania do bazy danych ODBC, takiej jak Microsoft SQL Server, może być nieudana z powodu błędów sieciowych lub z powodu nieaktywności serwera. Domyślny czas oczekiwania wynosi 20 sekund; można określić, jak długo należy oczekiwać, zanim zostanie zgłoszony błąd. Logowanie do serwera jest niejawnym elementem wielu różnych zdarzeń, takich jak wykonywanie kwerendy w bazie danych zewnętrznego serwera.

Właściwość LoginTimeout obiektu DBEngine może być używana zarówno w obszarze roboczym Microsoft Jet, jak i obszarze roboczym ODBCDirect. Dla obiektu Workspace właściwość LoginTimeout może być użyta tylko w obszarze roboczym ODBCDirect. Ustawienie właściwości na -1 w obiekcie Workspace powoduje, że domyślnie będzie wykorzystana bieżąca wartość DBEngine.LoginTimeout. W obiekcie Workspace wartość tej właściwości może być zmieniana w dowolnej chwili; zmiana będzie uwzględniona przy następnym otwarciu obiektu Connection lub Database.

Wartość domyślna jest określana przez sterownik ODBC. W obszarze roboczym Microsoft Jet wartość domyślna sterownika może zostać zmieniona przez wprowadzenie nowego klucza “ODBC” w ścieżce Rejestru \HKEY_LOCAL_MACHINE\SOFTWARE\Jet\3.5\, utworzenie parametru LoginTimeout dla tego klucza i przypisanie mu wymaganej wartości.


LogMessages - właściwość (DAO)
LogMessages - właściwość

Ustawia lub zwraca wartość określającą, czy komunikaty pochodzące ze źródła danych ODBC dołączonych do aparatu są rejestrowane (tylko obszary robocze Microsoft Jet).

Uwaga   Przed ustawieniem lub odczytaniem wartości właściwości LogMessages należy utworzyć tę właściwość metodą CreateProperty i dodać ją do kolekcji Properties obiektu QueryDef.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Boolean i jest równa True jeśli komunikaty pochodzące ze źródła danych ODBC są rejestrowane.

Użycie

Niektóre kwerendy przekazujące mogą oprócz danych zwracać również komunikaty. Ustawienie właściwości LogMessages na wartość True powoduje, że aparat bazy danych Microsoft Jet tworzy tabelę zawierającą otrzymane komunikaty. Nazwa tabeli jest tworzona z nazwy użytkownika przez dodanie łącznika (-) i numeru seryjnego, poczynając od 00. Przykładowo: domyślną nazwą użytkownika jest Admin, a więc tworzone tabele będą miały nazwy Admin-00, Admin-01 itd.

Jeśli kwerenda będzie zwracała komunikaty, należy utworzyć i dodać definiowaną przez użytkownika właściwość LogMessages obiektu QueryDef, określić jej typ na Boolean, a wartość na True.

Po przetworzeniu zawartości tych tabel można je usunąć z bazy danych wraz z tymczasową kwerendą, która spowodowała ich utworzenie.


Name - właściwość (DAO)
Name - właściwość

Ustawia lub zwraca nazwę obiektu DAO, zdefiniowanego przez użytkownika. Jeśli obiekt nie znajduje się w kolekcji, właściwość można odczytywać i zapisywać.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu String i określa nazwę; musi zaczynać się od litery. Maksymalna długość nazwy zależy od typu obiektu, do którego odnosi się właściwość Name, i została podana poniżej. Może zawierać cyfry i znaki podkreślenia ( _ ), ale nie może zawierać znaków przestankowych ani spacji.

Użycie

Obiekty TableDef, QueryDef, Field, Index, User i Group nie mogą mieć takiej samej nazwy, co inny obiekt w tej samej kolekcji.

Dla obiektu Recordset otwartego za pomocą instrukcji SQL, właściwość Name zawiera pierwsze 256 znaków instrukcji SQL.

Właściwość Name obiektu może być używana w języku Visual Basic for Applications w instrukcji Dim tworzącej dalsze instancje obiektu.

Uwaga   Dla wielu obiektów DAO, właściwość Name odzwierciedla nazwę znaną w obiekcie Database, taką jak nazwa obiektu TableDef, Field czy QueryDef. Nie istnieje żaden bezpośredni związek pomiędzy nazwą obiektu DAO i zmienną obiektową odsyłającą do niego.

Możliwość zapisu/odczytu właściwości Name zależy od typu obiektu, którego dotyczy, oraz od tego, czy obiekt został dodany do kolekcji. W obszarze roboczym ODBCDirect, właściwość Name obiektu dołączonego do kolekcji zawsze można tylko odczytywać. Poniższa tabela określa, kiedy właściwość Name w obszarze roboczym Microsoft Jet może być zapisywana, a kiedy tylko odczytywana w przypadku obiektów dołączonych do kolekcji (chyba że podano inaczej). Podano również maksymalną długość w przypadkach, gdy właściwość może być zapisywana.

Obiekt	Użycie	Maksymalna długość
Container	tylko odczyt
Connection	tylko odczyt
Database	tylko odczyt
Document	tylko odczyt
Field
nie dołączony	odczyt/zapis	64
dołączony do Index	tylko odczyt
dołączony do QueryDef	tylko odczyt
dołączony do Recordset	tylko odczyt
dołączony do TableDef (prosty)	odczyt/zapis	64
dołączony do TableDef (połączony)	tylko odczyt
dołączony do Relation	tylko odczyt
Group
nie dołączony	odczyt/zapis	20
dołączony	tylko odczyt
Index
nie dołączony	odczyt/zapis	64
dołączony	tylko odczyt
Parameter	tylko odczyt
Property
nie dołączony	odczyt/zapis	64
dołączony	tylko odczyt
wbudowany	tylko odczyt
QueryDef
nie dołączony	odczyt/zapis	64
tymczasowy	tylko odczyt
dołączony	odczyt/zapis	64
Recordset	tylko odczyt
Relation
nie dołączony	odczyt/zapis	64
dołączony	tylko odczyt
TableDef	odczyt/zapis	64
User
nie dołączony	odczyt/zapis	20
dołączony	tylko odczyt
Workspace
nie dołączony	odczyt/zapis	20
dołączony	tylko odczyt


NoMatch - właściwość (DAO)
NoMatch - właściwość

Określa, czy dany rekord został znaleziony metodą Seek lub jedną z metod Find (tylko obszary robocze Microsoft Jet).

Wartości zwracane

Zwracana wartość jest typu Boolean i wynosi True, jeśli rekord nie został odnaleziony. Bezpośrednio po otwarciu lub utworzeniu obiektu Recordset, jego właściwość NoMatch ma wartość False.

Użycie

Do wyszukania rekordu w obiekcie Recordset typu tabela należy użyć metody Seek; dla obiektu Recordset typu utrwalonego lub typu zestaw dynamiczny należy użyć jednej z metod Find. W celu sprawdzenia, czy rekord został odnaleziony, należy pamiętać, by zbadać właściwość NoMatch.

Jeśli użycie metod Seek lub Find nie powiodło się i właściwość NoMatch ma wartość True, bieżący rekord nie jest prawidłowy. W celu powrotu do tego rekordu należy przed użyciem metod Seek lub Find odczytać zakładkę bieżącego rekordu.

Uwaga   Użycie którejkolwiek z metod Move obiektu Recordset nie ma wpływu na wartość właściwości NoMatch.


Number - właściwość (DAO)
Number - właściwość

Zwraca wartość liczbową określającą błąd. Właściwość Number jest domyślną właściwością obiektu Error.

Wartości zwracane

Zwracana wartość jest typu Long i określa numer błędu.

Użycie

Właściwość Number pozwala na określenie zaistniałego błędu. Wartość tej właściwości odpowiada unikatowemu numerowi przechwycenia, który z kolei odpowiada warunkowi błędu. Pełną listę wszystkich numerów przechwycenia i warunków błędu można znaleźć pod hasłem Błędy przechwytywalne Microsoft Jet i DAO.


ODBCTimeout - właściwość (DAO)
ODBCTimeout - właściwość

Określa czas w sekundach, po jakim pojawia się błąd przekroczenia limitu czasu podczas wykonywania QueryDef w bazie danych ODBC.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Integer i określa liczbę sekund, po których pojawia się błąd przekroczenia limitu czasu.

Wartość właściwości ODBCTimeout równa -1 oznacza, że limit czasu będzie odczytany z bieżącego ustawienia właściwości QueryTimeout obiektu Connection lub Database zawierającego obiekt QueryDef. Wartość właściwości ODBCTimeout równa 0 oznacza brak sygnalizacji błędu przekroczenia limitu czasu.

Użycie

Podczas pracą z bazą danych ODBC, taką jak Microsoft SQL Server, mogą pojawiać się opóźnienia związane z ruchem w sieci lub obciążeniem serwera. Aby uniknąć nieograniczonego oczekiwania, można określić czas, po którym zostanie zasygnalizowany błąd.

Ustawienie wartości ODBCTimeout w obiekcie QueryDef przesłania wartość określoną we właściwości QueryTimeout obiektu Connection lub Database zawierającego obiekt QueryDef, ale tylko dla tego konkretnego obiektu QueryDef.

Uwaga   W obszarze roboczym ODBCDirect, po ustawieniu właściwości ODBCTimeout na konkretną wartość można przywrócić jej wartość domyślną (czyli -1) tylko raz w trakcie istnienia obiektu QueryDef. W przeciwnym razie zostanie zasygnalizowany błąd.


OrdinalPosition - właściwość (DAO)
OrdinalPosition - właściwość

Ustawia lub zwraca względną pozycję obiektu Field w kolekcji Fields. W przypadku obiektu nie dodanego do kolekcji Fields, właściwość ta może być odczytywana i zapisywana.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Integer i określa kolejność pól. Domyślną wartością jest 0.

Użycie

Dostępność właściwości OrdinalPosition zależy od obiektu, w którym znajduje się kolekcja Fields, jak pokazano w poniższej tabeli.

Jeśli kolekcja Fields należy do obiektu	To właściwość OrdinalPosition jest
Index	niedostępna.
QueryDef	tylko do odczytu.
Recordset	tylko do odczytu.
Relation	niedostępna.
TableDef	do odczytu i zapisu.
Ogólnie, pozycja obiektu w kolekcji zależy od kolejności dołączania obiektów do kolekcji. Pierwszy dołączony obiekt ma pozycję pierwszą (0), drugi dołączony obiekt ma pozycję drugą (1) itd. Ostatni dołączony obiekt ma pozycję licznik – 1, gdzie licznik jest liczbą obiektów w kolekcji, podawaną we właściwości Count.

Właściwość OrdinalPosition może być wykorzystana do określenia innej pozycji nowego obiektu Field niż wynika to z kolejności dołączenia obiektów do kolekcji. W ten sposób możliwe jest określenie kolejności pól dla tabel, kwerend i zestawów rekordów w trakcie używania ich w aplikacji. Na przykład kolejność, w jakiej zwracane są pola w kwerendzie SELECT *, jest określona przez bieżące ustawienia właściwości OrdinalPosition.

Przez ustawienie dodatnich wartości właściwości OrdinalPosition kolejność, w jakiej pola są zwracane w zestawach rekordów, zostaje określona na stałe.

Dwa lub więcej obiektów Field należących do tej samej kolekcji może mieć tę samą wartość właściwości OrdinalPosition; w takim wypadku są one porządkowane w kolejności alfabetycznej. Na przykład, jeśli istnieje pole o nazwie Wiek i właściwości OrdinalPosition równej 4, a zostanie dodane pole o nazwie Waga i wartości także 4, to pole Wiek jest zwracane po polu Waga.

Właściwość OrdinalPosition może przyjmować wartości większe niż liczba pól minus 1. Takie pole będzie zwracane w kolejności ustalonej względem największego numeru. Na przykład, jeśli właściwość OrdinalPosition pewnego pola zostanie ustawiona na 20 (a jest tylko 5 pól), a dwa inne pola mają wartości odpowiednio 10 i 30, to pole z wartością 20 będzie znajdowało się między polami o wartościach 10 i 30.

Uwaga   Nawet jeśli kolekcja Fields obiektu TableDef nie była odświeżona, kolejność pól w obiekcie Recordset otwartym z obiektu TableDef będzie odzwierciedlać dane z właściwości OrdinalPosition obiektu TableDef. Obiekt Recordset typu tabela zachowuje te same wartości właściwości OrdinalPosition jak w tabeli bazowej, ale obiekt Recordset każdego innego typu będzie miał nowe dane we właściwościach OrdinalPosition (rozpoczynając od 0) odzwierciedlające kolejność określoną przez właściwości OrdinalPosition obiektu TableDef.


Owner - właściwość (DAO)
Owner - właściwość

Ustawia lub zwraca wartość określającą właściciela obiektu (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu String i zawiera nazwę obiektu User z kolekcji Users lub nazwę obiektu Group z kolekcji Groups.

Użycie

Właściciel obiektu posiada pewne uprawnienia dostępu, zabronione innym użytkownikom. Każdy indywidualny użytkownik (reprezentowany przez obiekt User) oraz grupa indywidualnych użytkowników (reprezentowana przez obiekt Group) może w dowolnej chwili zmienić właściwość Owner, jeśli tylko posiada odpowiednie uprawnienia.


Password - właściwość (DAO)
Password - właściwość

Ustawia hasło dla konta użytkownika (tylko obszary robocze Microsoft Jet).

Ustawienia

Ustawiana wartość jest typu String, może mieć do 14 znaków długości i zawierać dowolne znaki z wyjątkiem znaku o kodzie 0 (zero) zestawu znaków ASCII. Dla nowych obiektów, nie dołączonych jeszcze do kolekcji, właściwość ta może być tylko zapisywana; w przypadku istniejących obiektów jest niedostępna.

Użycie

Właściwość Password należy ustawiać razem z właściwością PID podczas tworzenia nowego obiektu User.

Do zmiany właściwości Password istniejącego obiektu User służy metoda NewPassword. Aby usunąć hasło, należy argument nowe_hasło metody NewPassword ustawić na ciąg o długości zerowej ("").

W hasłach uwzględniana wielkość liter.

Uwaga   Do zmiany hasła dowolnego użytkownika wymagane jest odpowiednie uprawnienie dostępu.


PercentPosition - właściwość (DAO)
PercentPosition - właściwość

Ustawia lub zwraca wartość określającą przybliżone położenie bieżącego rekordu w obiekcie Recordset mierzone w procentach względem rekordów zawartych w obiekcie Recordset.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Single i zawiera się w przedziale od 0,0 do 100,00.

Użycie

Aby sprawdzić lub ustawić przybliżoną pozycję wskaźnika bieżącego rekordu w obiekcie Recordset, należy odczytać lub ustawić właściwość PercentPosition. Podczas pracy z obiektem Recordset typu utrwalonego lub typu zestaw dynamiczny otwartym bezpośrednio z tabelą bazową, przed ustawieniem lub odczytaniem właściwości PercentPosition należy zapełnić obiekt Recordset, przechodząc do ostatniego rekordu. Wcześniejsze użycie właściwości PercentPosition spowoduje, że zakres działania będzie ograniczony do liczby rekordów przetworzonych do tej pory, według wartości właściwości RecordCount. Ostatni rekord można osiągnąć za pomocą metody MoveLast.

Uwaga   Używanie właściwości PercentPosition do przesunięcia wskaźnika bieżącego rekordu do konkretnego rekordu w obiekcie Recordset nie jest zalecane — do tego celu lepiej nadaje się właściwość Bookmark.

Po ustawieniu właściwości PercentPosition bieżący staje się rekord znajdujący się na pozycji w przybliżeniu odpowiadającej ustawionej wartości, zaś właściwość PercentPosition jest ustawiana na wartość odpowiadającą pozycji bieżącego rekordu. Na przykład, jeśli obiekt Recordset zawiera tylko pięć rekordów, a właściwość PercentPosition zostanie ustawiona na 77, to wartość zwracana przez właściwość PercentPosition będzie równa 80, a nie 77.

Właściwość PercentPosition występuje w obiektach Recordset wszystkich typów z wyjątkiem typu progresywnego oraz obiektów Recordset otwieranych na bazie kwerend przekazujących wystosowanych do odległych baz danych.

Właściwość PercentPosition może być stosowana wraz z paskiem przewijania w formularzu lub polu tekstowym w celu określenia położenia bieżącego rekordu w obiekcie Recordset.


Permissions - właściwość (DAO)
Permissions - właściwość

Ustawia lub zwraca wartość określającą uprawnienia użytkownika lub grupy wskazanych właściwością UserName obiektu Container lub Document (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest stałą typu Long określającą uprawnienia. Poniższa tabela zawiera spis możliwych stałych dla właściwości Permissions różnych obiektów DAO. Wszystkie wartości odnoszą się także do obiektów Document, chyba że podano inaczej.

Poniższa tabela zawiera spis możliwych wartości dla obiektów Container innych niż kontenery Tables i Databases.

Stała	Opis
dbSecNoAccess	Użytkownik nie ma prawa dostępu do obiektu (nie dotyczy obiektów Document).
dbSecFullAccess	Użytkownik ma pełen dostęp do obiektu.
dbSecDelete	Użytkownik może usunąć obiekt.
dbSecReadSec	Użytkownik może odczytać informacje związane z ochroną obiektu.
dbSecWriteSec	Użytkownik ma prawo zmieniać uprawnienia dostępu.
dbSecWriteOwner	Użytkownik może zmieniać właściwość Owner.
Poniższe tabele zawierają spis możliwych ustawień i zwracanych wartości dla pojemnika Tables.

Stała	Opis
dbSecCreate	Użytkownik może tworzyć nowe dokumenty (nie dotyczy obiektów Document).
dbSecReadDef	Użytkownik może odczytywać definicję obiektu, łącznie z informacjami o kolumnach i indeksach.
dbSecWriteDef	Użytkownik może modyfikować i usuwać definicję tabeli, łącznie z informacjami o kolumnach i indeksach.
dbSecRetrieveData	Użytkownik może odczytywać dane z obiektu Document.
dbSecInsertData	Użytkownik może dodawać rekordy.
dbSecReplaceData	Użytkownik może modyfikować rekordy.
dbSecDeleteData	Użytkownik może usuwać rekordy.
Poniższe tabele zawierają spis możliwych ustawień i zwracanych wartości dla pojemnika Databases.

Stała	Opis
dbSecDBAdmin	Użytkownik może replikować bazę danych i zmieniać hasło bazy danych (nie dotyczy obiektów Document).
dbSecDBCreate	Użytkownik może tworzyć nowe bazy danych. Ta opcja jest dozwolona tylko dla pojemnika Databases w pliku informacyjnym grupy roboczej (System.mdw). Ta stała jest niedozwolona w obiektach Document.
dbSecDBExclusive	Użytkownik ma wyłączny dostęp do bazy danych.
dbSecDBOpen	Użytkownik może otwierać bazę danych.
Użycie

Ta właściwość może być używana do odczytywania i ustawiania rodzaju uprawnień do zapisu i odczytu, jakie użytkownik posiada w stosunku do obiektów Container i Document.

Obiekt Document dziedziczy uprawnienia z obiektu Container pod warunkiem, że właściwość Inherit obiektu Container jest ustawiona dla tych użytkowników lub grupy, do której użytkownicy należą. Ustawiając później właściwości Permissions i UserName obiektu Document, można dodatkowo uszczegółowić sterowanie dostępem do obiektu.

Do ustawiania lub odczytywania uprawnień użytkownika, wraz z uprawnieniami odziedziczonymi z grup, do których użytkownik należy, służy właściwość AllPermissions.


PID - właściwość (DAO)
PID - właściwość

Ustawia identyfikator osobisty (PID) dla grupy lub konta użytkownika (tylko obszary robocze Microsoft Jet).

Ustawienia

Ustawiana wartość jest typu String i zawiera od 4 do 20 znaków alfanumerycznych. Ta właściwość może być tylko zapisywana dla nowych, jeszcze nie dołączonych do kolekcji obiektów i nie jest dostępna dla obiektów istniejących.

Użycie

Właściwość PID należy ustawiać wraz z właściwością Name podczas tworzenia nowego obiektu Group. Przy tworzeniu nowego obiektu User właściwość PID należy ustawiać razem z właściwościami Name i Password.


Primary - właściwość (DAO)
Primary - właściwość

Ustawia lub zwraca wartość określającą, czy obiekt Index reprezentuje indeks podstawowy dla tabeli (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Boolean i wynosi True, jeśli obiekt Index reprezentuje indeks podstawowy.

Właściwość Primary można zapisywać i odczytywać dla nowego obiektu Index nie dołączonego jeszcze do kolekcji oraz można tylko odczytywać w przypadku istniejącego obiektu Index znajdującego się w kolekcji Indexes. Jeśli obiekt Index jest dołączony do obiektu TableDef, ale obiekt TableDef nie jest dołączony do kolekcji TableDefs, to właściwość Index można odczytywać i zapisywać.

Użycie

Indeks podstawowy składa się z jednego lub więcej pól identyfikujących jednoznacznie wszystkie rekordy w tabeli w określonej kolejności. Ponieważ pole indeksu musi być unikatowe, właściwość Unique obiektu Index jest ustawiona na True. Jeśli indeks podstawowy składa się z kilku pól, to pojedyncze pole może zawierać duplikaty, ale każda kombinacja wszystkich pól tworzących indeks musi być unikatowa. Indeks podstawowy składa się z klucza tabeli i zawiera zazwyczaj te same pola, co klucz podstawowy.

Uwaga  Nie jest konieczne tworzenie indeksów dla tabel, ale w dużych, nie indeksowanych tabelach dostęp do konkretnego rekordu może wymagać dużo czasu. Właściwość Attributes każdego obiektu Field znajdującego się w obiekcie Index wyznacza kolejność rekordów i, w konsekwencji, określa technikę dostępu stosowaną dla danego indeksu. Przy tworzeniu nowej tabeli w bazie danych warto utworzyć indeks na podstawie jednego lub kilku pól jednoznacznie określających każdy rekord, a następnie ustawić właściwość Primary obiektu Index na wartość True.

Po określeniu klucza podstawowego dla tabeli, taki klucz jest automatycznie definiowany jako indeks podstawowy dla tej tabeli.


QueryTimeout - właściwość (DAO)
QueryTimeout - właściwość

Ustawia lub zwraca wartość określającą czas w sekundach, po jakim pojawia się błąd przekroczenia limitu czasu podczas wykonywania kwerendy w stosunku do źródła danych ODBC.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Integer i określa liczbę sekund, po których wystąpi błąd przekroczenia limitu czasu. Domyślną wartością jest 60.

Użycie

Przy pracy z bazą danych ODBC, taką jak Microsoft SQL Server, mogą pojawiać się opóźnienia związane z ruchem w sieci lub obciążeniem serwera ODBC. Aby uniknąć nieograniczonego oczekiwania, można określić czas maksymalny czekania.

Właściwość QueryTimeout obiektu Connection lub Database dotyczy globalnej wartości dla wszystkich kwerend związanych z bazą danych. Dla konkretnej kwerendy wartość tę można przesłonić, ustawiając właściwość ODBCTimeout odpowiedniego obiektu QueryDef.

W obszarze roboczym Microsoft Jet można przesłonić wartość domyślną przez utworzenie nowego klucza “ODBC” w ścieżce Rejestru \HKEY_LOCAL_MACHINE\SOFTWARE\Jet\3.5\, utworzenie parametru QueryTimeout dla tego klucza i przypisanie mu wymaganej wartości.


RecordCount - właściwość (DAO)
RecordCount - właściwość

Zwraca liczbę rekordów w obiekcie Recordset, do których został wykonany dostęp. W przypadku obiektu Recordset typu tabela i obiektu TableDef zwraca całkowitą liczbę rekordów.

Wartości zwracane

Zwracana wartość jest typu Long.

Użycie

Właściwość RecordCount zawiera informację, do ilu rekordów obiektu Recordset lub TableDef został wykonany dostęp. Właściwość RecordCount nie określa całkowitej liczby rekordów dla obiektu Recordset typu utrwalonego, zestaw dynamiczny lub progresywnego, dopóki dostęp nie zostanie wykonany do wszystkich rekordów. Po dostępie do ostatniego rekordu właściwość RecordCount podaje całkowitą liczbę nie usuniętych rekordów w obiekcie Recordset lub TableDef. Aby wymusić dostęp do ostatniego rekordu, można użyć metody MoveLast obiektu Recordset. W celu określenia przybliżonej liczby rekordów, jakie zwróci kwerenda, można też użyć funkcji SQL Count.

Uwaga   Użycie metody MoveLast w celu zapełnienia obiektu Recordset tuż po jego otwarciu wpływa negatywnie na efektywność. Jeśli nie jest wymagana dokładna wartość właściwości RecordCount bezpośrednio po otwarciu obiektu Recordset, lepiej poczekać na zapełnienie obiektu Recordset prze dalszą część kodu i dopiero później sprawdzać wartość właściwości RecordCount.

W miarę jak aplikacja usuwa rekordy z obiektu Recordset typu zestaw dynamiczny, wartość właściwości RecordCount jest odpowiednio zmniejszana. Jednakże usuwanie rekordów przez innych użytkowników nie jest zauważane przez właściwość RecordCount, dopóki bieżący rekord nie zostanie ustawiony na rekord usunięty. Jeśli zostanie wykonana transakcja zmieniająca właściwość RecordCount, a następnie transakcja zostanie wycofana, to właściwość RecordCount nie będzie odzwierciedlać faktycznej liczby pozostałych rekordów.

Właściwość RecordCount obiektu Recordset typu utrwalonego lub progresywnego nie odzwierciedla zmian dokonywanych w tabelach, na których bazuje obiekt.

Obiekt Recordset lub TableDef nie zawierający rekordów ma właściwość RecordCount ustawioną na 0.

Podczas pracy z połączonymi obiektami TableDef, właściwość RecordCount ma zawsze wartość –1.

Po użyciu metody Requery obiektu Recordset właściwość RecordCount jest przywracana, tak jakby kwerenda została ponownie wykonana.


RecordsAffected - właściwość (DAO)
RecordsAffected - właściwość

Zwraca liczbę rekordów, które zostały zmienione przez ostatnio wykonaną metodę Execute.

Wartości zwracane

Zwracana wartość jest typu Long i zawiera 0 lub liczbę oznaczającą, ile rekordów zostało zmienionych przez ostatnio wykonaną metodę Execute obiektu Database lub QueryDef.

Użycie

Po użyciu metody Execute w celu wykonania kwerendy funkcjonalnej z obiektu QueryDef właściwość RecordsAffected zawiera liczbę rekordów usuniętych, zmodyfikowanych lub wstawionych.

W obszarze roboczym ODBCDirect właściwość RecordsAffected nie będzie zawierać użytecznych danych po wykonaniu kwerendy funkcjonalnej SQL DROP TABLE.


Required - właściwość (DAO)
Required - właściwość

Ustawia lub zwraca wartość określającą, czy obiekt Field wymaga wartości innej niż Null lub czy wszystkie pola w obiekcie Index muszą mieć wartość.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Boolean; jeśli jest równa True, to pole nie może zawierać wartości Null.

Dla obiektów nie dołączonych jeszcze do kolekcji, ta właściwość może być odczytywana i zapisywana. W przypadku obiektu Index, ta właściwość może być tylko odczytywana dla obiektów dołączonych do kolekcji Indexes w obiektach Recordset i TableDef.

Użycie

Dostępność właściwości Required zależy od obiektu, który zawiera kolekcję Fields, jak podano poniżej.

Jeśli kolekcja Fields należy do obiektu	To właściwość Required jest
Index	niedostępna.
QueryDef	tylko do odczytu.
Recordset	tylko do odczytu.
Relation	niedostępna.
TableDef	do odczytu i zapisu.
W przypadku obiektu Field, właściwości Required można używać wraz z właściwościami AllowZeroLength, ValidateOnSet i ValidationRule w celu określenia poprawności ustawienia właściwości Value tego obiektu. Jeśli właściwość Required ma wartość False, pole może zawierać wartość Null, jak również wartości spełniające warunki określone właściwościami AllowZeroLength i ValidationRule.

Uwaga   Jeśli ta właściwość może być ustawiona zarówno dla obiektu Index, jak i obiektu Field, należy ją ustawić dla obiektu Field. Poprawność ustawienia właściwości jest sprawdzana najpierw dla obiektu Field, a dopiero później dla obiektu Index.


Restartable - właściwość (DAO)
Restartable - właściwość

Zwraca wartość określającą, czy obiekt Recordset obsługuje metodę Requery wykonującą powtórną kwerendę, na której bazuje obiekt Recordset.

Wartości zwracane

Zwracana wartość jest typu Boolean i wynosi True, jeśli obiekt Recordset obsługuje metodę Requery. Obiekty Recordset typu tabela zawsze zwracają wartość False.

Użycie

Przed użyciem metody Requery obiektu Recordset należy sprawdzić właściwość Restartable tego obiektu. Jeśli ma wartość False, należy w celu ponownego wykonania kwerendy użyć metody OpenRecordset odpowiedniego obiektu QueryDef.


ReturnsRecords - właściwość (DAO)
ReturnsRecords - właściwość

Ustawia lub zwraca wartość określającą, czy kwerenda przekazująca SQL skierowana do zewnętrznej bazy danych zwraca rekordy.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Boolean i wynosi True (wartość domyślna), jeśli przekazująca kwerenda SQL zwraca rekordy.

Użycie

Nie wszystkie przekazujące kwerendy SQL skierowane do zewnętrznych baz danych zwracają rekordy. Na przykład, instrukcja SQL UPDATE modyfikuje rekordy, ale ich nie zwraca; instrukcja SQL SELECT zwraca rekordy. Jeśli kwerenda zwraca rekordy, należy ustawić właściwość ReturnsRecords na wartość True; jeśli kwerenda nie zwraca rekordów, należy ustawić właściwość ReturnsRecords na wartość False.

Uwaga   Przed ustawieniem właściwości ReturnsRecords musi być ustawiona właściwość Connect.


Size - właściwości (DAO)
Size - właściwość

Ustawia lub zwraca wartość oznaczającą maksymalny rozmiar obiektu typu Field, w bajtach.

Ustawienia i wartości zwracane

Ustawieniem lub wartością zwracaną jest stała oznaczająca maksymalny rozmiar obiektu Field. W przypadku obiektu nie dołączonego jeszcze do kolekcji Fields, właściwość ta jest przeznaczona do odczytu i do zapisu. Ustawienie to zależy od ustawień właściwości Type obiektu Field, co opisano poniżej.

Użycie

W przypadku pól (z wyjątkiem pól typu Memo) zawierających dane znakowe, właściwość Size określa maksymalną liczbę znaków, które mogą się znaleźć w polu. W przypadku pól numerycznych, właściwość Size podaje wymaganą wielkość potrzebnej pamięci, w bajtach.

Sposób użycia właściwości Size, co pokazano w poniższej tabeli, zależy od obiektu zawierającego kolekcję Fields, do którego dołączany jest obiekt Field.

Obiekt dołączany do	Użycie
Index	Nie przewidziano
QueryDef	Tylko do odczytu
Recordset	Tylko do odczytu
Relation	Nie przewidziano
TableDef	Nie przewidziano
Jeśli tworzony jest obiekt Field o typie danych innym niż Text, ustawienie właściwości Type automatycznie określa ustawienie właściwości Size; nie trzeba go ustalać. Jeśli jednak obiekt Field zawiera dane typu Text, można ustawić właściwość Size na dowolną liczbę całkowitą ograniczoną maksymalną wielkością tekstu (w przypadku bazy danych Microsoft Jet wynoszącą 255). Brak liczby spowoduje, że rozmiar pola osiągnie wielkość dopuszczalną przez bazę danych.

W przypadku obiektów Field typu Long Binary i Memo, właściwość Size uzyskuje zawsze wartość 0. Właściwość FieldSize obiektu Field pozwala ustalić wielkość danych w określonym rekordzie. Maksymalną wielkość pól Long Binary i Memo ograniczają jedynie możliwości sprzętowe, jak również limity określone przez bazę danych.


Sort - właściwość (DAO)
Sort - właściwość

Ustala lub zwraca porządek sortowania dla rekordów obiektu typu Recordset (dotyczy tylko obszaru roboczego Microsoft Jet).

Ustawienia i wartości zwracane

Ustawieniem lub wartością zwracaną jest wartość typu String zawierająca klauzulę ORDER BY instrukcji SQL bez słów zastrzeżonych ORDER BY.

Użycie

Właściwość Sort może być stosowana z obiektami Recordset typu zestaw dynamiczny i utrwalonego.

Przypisanie obiektowi tej właściwości spowoduje, że podczas tworzenia z niego następnego obiektu Recordset dojdzie do sortowania. Ustawienie właściwości Sort ma pierwszeństwo przed wszystkimi porządkami sortowania określonymi dla obiektu QueryDef.

Domyślnym porządkiem sortowania jest porządek rosnący (od A do Ż i od 0 do 100).

Właściwość Sort nie ma zastosowania do obiektów Recordset typu tabela ani typu progresywnego. Do sortowania obiektu Recordset typu tabela służy właściwość Index.

Uwaga   W wielu przypadkach szybszym sposobem otwarcia nowego obiektu Recordset jest skorzystanie z instrukcji SQL zawierającej kryteria sortowania.


Source - właściwość (DAO)
Source - właściwość

Zwraca nazwę tego obiektu lub aplikacji, który pierwotnie spowodował błąd.

Wartości zwracane

Wartością zwracaną jest wartość typu String reprezentująca obiekt bądź aplikację, która spowodowała błąd.

Użycie

Wartością właściwości Source jest zazwyczaj nazwa klasy obiektu albo identyfikator ustalany programowo. Stosowanie właściwości Source umożliwia zawiadamianie innych użytkowników, że kod nie jest w stanie uporać się z błędem wywołanym w obiekcie znajdującym się w innej aplikacji.

Przykładowo, jeśli uruchomienie aplikacji Microsoft Excel spowoduje powstanie błędu „Dzielenie przez zero”, wówczas aplikacja ta ustawi wartość Error.Number na kod oznaczający błąd aplikacji Microsoft Excel oraz właściwość Source na Excel.Application. Należy zauważyć, że jeśli błąd spowodował inny obiekt, do którego odwołuje się Microsoft Excel, wówczas aplikacja ta przechwytuje ten błąd i nadal ustawia Error.Number na kod oznaczający Microsoft Excel. Jednak inne właściwości obiektu Error (w tym Source) zachowają wartości ustawione przez obiekt, który spowodował błąd. Właściwość Source zawsze zawiera nazwę obiektu, który jako pierwszy spowodował błąd.

Oparcie się na całości informacji dotyczących błędu umożliwia napisanie kodu, który odpowiednio obsłuży ten błąd. Jeśli zawiedzie program obsługi błędu, wówczas wykorzystanie informacji z obiektu Error pozwoli na opisanie błędu użytkownikom, przy czym właściwość obiektu Source, jak też inne właściwości obiektu Error, umożliwią przekazanie użytkownikom danych na temat obiektu, który pierwszy spowodował błąd, jego opisu i tak dalej.

Uwaga   Przy zajmowaniu się błędami powstającymi podczas uzyskiwania dostępu do innych obiektów konstrukcja On Error Resume Next może być lepsza od konstrukcji On Error GoTo. Sprawdzanie właściwości obiektu Error po każdym kontakcie z obiektem zapobiega powstawaniu dwuznaczności przy określaniu, do którego obiektu kod miał dostęp w chwili, gdy doszło do błędu. Dzięki temu uzyskuje się pewność, który obiekt umieścił kod błędu we właściwości Error.Number, jak też który jako pierwszy wywołał błąd (właściwość Error.Source).


SourceField, SourceTable - właściwości (DAO)
SourceField, SourceTable - właściwości

•	SourceField — zwraca wartość oznaczającą nazwę pola będącego pierwotnym źródłem danych dla obiektu typu Field.

•	SourceTable — zwraca wartość oznaczającą nazwę tabeli będącej pierwotnym źródłem danych dla obiektu typu Field.

Wartości zwracane

Wartością zwracaną jest wartość typu String określająca nazwę pola bądź tabeli będących źródłem danych.

Użycie

W przypadku obiektu Field, zakres stosowania właściwości SourceField i SourceTable zależy, jak to pokazano w poniższej tabeli, od rodzaju obiektu zawierającego kolekcję Fields, do której dołączony jest obiekt Field.

Obiekt dołączony do	Użycie
Index	Nie przewidziano
QueryDef	Tylko do odczytu
Recordset	Tylko do odczytu
Relation	Nie przewidziano
TableDef	Tylko do odczytu
Właściwości powyższe podają nazwy pierwotnych pól i tabel związanych z obiektem Field. Przykładowo, można z nich skorzystać przy określaniu źródła danych dla pola kwerendy, którego nazwa nie ma nic wspólnego z nazwą pola w tabeli będącej przedmiotem kwerendy.

Uwaga   Właściwość SourceTable użyta z obiektem Field w kolekcji Fields obiektów Recordset typu tabela nie zwróci poprawnej nazwy tabeli.


SourceTableName - właściwość (DAO)
SourceTableName - właściwość

Ustawia lub zwraca wartość określającą nazwę tabeli połączonej bądź też nazwę tabeli bazowej (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawieniem lub wartością zwracaną jest wartość typu String określająca nazwę tabeli. W przypadku tabeli bazowej, ustawieniem jest ciąg o długości zerowej (""). Wartość ta jest przeznaczona tylko do odczytu w przypadku tabeli bazowej, natomiast do odczytu i do zapisu w przypadku tabeli połączonej albo obiektu nie dołączonego do kolekcji.


SQL - właściwość (DAO)
SQL - właściwość

Ustawia lub zwraca instrukcję SQL określającą kwerendę wykonywaną przez obiekt typu QueryDef.

Ustawienia i wartości zwracane

Ustawieniem lub wartością zwracaną jest wartość typu String zawierająca instrukcję SQL.

Użycie

Właściwość SQL zawiera instrukcję SQL określającą, w jaki sposób podczas wykonywania kwerendy wybierane, grupowane i porządkowane są rekordy. Kwerenda ta może służyć do wybierania rekordów, które mają się znaleźć w obiekcie Recordset. Można też zdefiniować kwerendy funkcjonalne, które modyfikują dane bez zwracania rekordów.

Używana w kwerendzie składnia języka SQL musi być zgodna z dialektem SQL stosowanym przez aparat obsługi kwerend, określonym przez rodzaj obszaru roboczego. W przypadku obszaru roboczego Microsoft Jet, należy stosować dialekt Microsoft Jet SQL, pod warunkiem wszakże, że nie tworzy się przekazującej kwerendy SQL, ponieważ wówczas należy zastosować dialekt serwera. W przypadku obszaru roboczego ODBCDirect, należy użyć dialektu serwera SQL.

Uwaga   Za pośrednictwem połączenia ODBCDirect można wysyłać kwerendy DAO do różnych serwerów bazy danych, przy czym serwery te mogą rozpoznawać różne dialekty języka SQL. W związku z tym, przed przystąpieniem do korzystania z połączeń ODBCDirect lub kwerend przekazujących w aplikacjach typu kilent/serwer podłączonych do aparatu Microsoft Jet warto zapoznać się z dokumentacją opisującą dialekt SQL używanego serwera bazy danych.

Jeśli instrukcja SQL przewiduje dla kwerendy parametry, przed wykonaniem muszą one zostać ustawione. Dopóki nie dokona się zmiany ustawień parametrów, przy każdym wykonywaniu kwerendy stosowane są te same wartości parametrów.

W obszarze roboczym ODBCDirect właściwość SQL można również wykorzystać do wykonania na serwerze instrukcji przygotowanej. Przykładowo, ustawienie właściwości SQL na poniższy ciąg znaków spowoduje, że Microsoft SQL Server wykona jednoparametrową instrukcję przygotowaną o nazwie “GetData”.

"{call GetData (?)}"

W przypadku obszaru roboczego Microsoft Jet zalecanym sposobem dokonywania operacji przekazujących SQL w odniesieniu do źródła danych ODBC dołączonych do aparatu jest użycie obiektu QueryDef. Ustawienie właściwości Connect obiektu QueryDef na źródle danych ODBC umożliwi stosowanie w kwerendzie, która ma zostać przesłana do serwera zewnętrznego, dialektu języka SQL bazy danych innej niż Microsoft Jet. Przykładowo, można korzystać z instrukcji TRANSACT języka SQL (w odniesieniu do baz danych Microsoft SQL lub Sybase SQL Server), które aparat bazy danych Microsoft Jet jest w stanie przetwarzać tylko w ten właśnie sposób.

Uwaga   Jeśli ustawi się tę właściwość na ciąg znaków z dołączaną na końcu wartością nie będącą liczbą całkowitą, zaś parametry systemu jako znak separatora dziesiętnego uznają inny znak niż stosowana w USA kropka, taki jak przecinek (na przykład, strSQL = "CENA > " & lngCena i lngCena = 125,50), wówczas przy próbie wykonania w bazie danych Microsoft Jet obiektu QueryDef wystąpi błąd. Stanie się tak, ponieważ podczas dołączania liczba przekształcana jest w ciąg znaków zgodnie z domyślnym dla każdego systemu znakiem separatora dziesiętnego, natomiast Microsoft Jet SQL przyjmuje jedynie znaki dziesiętne zgodne ze standardem stosowanym w USA.


Table - właściwość (DAO)
Table - właściwość

Oznacza nazwę tabeli podstawowej obiektu Relation. Powinna ona odpowiadać ustawieniu właściwości Name obiektu TableDef lub QueryDef (dotyczy tylko obszaru roboczego Microsoft Jet).

Ustawienia i wartości zwracane

Ustawieniem lub wartością zwracaną jest wartość typu String określająca nazwę tabeli z kolekcji TableDefs albo kwerendy z kolekcji QueryDefs. Właściwość Table w odniesieniu do nowego obiektu Relation, nie dołączonego jeszcze do kolekcji, jest przeznaczona do odczytu i do zapisu, natomiast w odniesieniu do istniejącego obiektu Relation w kolekcji Relations może służyć tylko do odczytu.

Użycie

Właściwości Table wraz z właściwością ForeignTable należy użyć do określenia obiektu Relation, który odpowiada związkowi pomiędzy polami dwóch tabel lub kwerend. Właściwości Table należy nadać wartość właściwości Name podstawowego obiektu TableDef lub QueryDef, a właściwości ForeignTable należy nadać wartość właściwości Name obcego (wskazującego) obiektu TableDef lub QueryDef. Właściwość Attributes określa rodzaj związku łączącego dwa obiekty.

Przykładowo, jeśli istnieje spis poprawnych kodów artykułów (w polu o nazwie NumCzęści) przechowywany w tabeli DostępneCzęści, można ustanowić taki związek jeden-do-wielu z tabelą PozZamówienia, że do tabeli PozZamówienia można wprowadzić jedynie kod już istniejący w tabeli DostępneCzęści. Jeśli wprowadzi się kod nie istniejący w tabeli DostępneCzęści, a właściwość Attributes obiektu Relation nie jest ustawiona na wartość dbRelationDontEnforce, wystąpi błąd przechwytywalny.

W powyższym przypadku, tabela DostępneCzęści jest tabelą podstawową, tak że właściwość Table obiektu Relation uzyska wartość DostępneCzęści, właściwość ForeignTable obiektu Relation uzyska wartość PozZamówienia. Właściwość Name i ForeignName obiektu Field kolekcji Fields obiektu Relation uzyska wartość NumCzęści.

Poniższy rysunek ilustruje tę relację.


Transactions - właściwość (DAO)
Transactions - właściwość

Zwraca wartość wskazującą, czy obiekt dopuszcza transakcje.

Wartości zwracane

Wartością zwracaną jest typ danych Boolean o wartości True, jeśli obiekt dopuszcza transakcje.

Użycie

W obszarach roboczych ODBCDirect właściwość Transactions istnieje dla obiektów Connection i Database i określa, czy używany sterownik ODBC obsługuje transakcje.

W obszarze roboczym Microsoft Jet, można używać właściwości Transactions z obiektami Recordset typu tabela lub typu zestaw dynamiczny. Obiekty Recordset typu utrwalonego i progresywnego jako wartość tej właściwości zawsze zwracają False.

Jeśli Recordset typu zestaw dynamiczny albo typu tabela bazuje na tabeli bazy danych Microsoft Jet, właściwość Transactions ma wartość True i wtedy można stosować transakcje. Inne aparaty bazy danych mogą nie dopuszczać transakcji. Nie można na przykład użyć transakcji w przypadku obiektów Recordset typu zestaw dynamiczny, bazujących na tabeli Paradox.

Przed użyciem metody BeginTrans w odniesieniu do obiektu Workspace obiektu Recordset należy sprawdzić właściwość Transactions, aby w ten sposób przekonać się, czy transakcje są dopuszczalne. W stosunku do obiektów, które nie dopuszczają transakcji, nie działają metody BeginTrans, CommitTrans ani Rollback.


Type - właściwość (DAO)
Type - właściwość

Ustawia lub zwraca wartość oznaczającą typ operacyjny obiektu lub jego typ danych.

Ustawienia i wartości zwracane

Ustawieniem lub wartością zwracaną jest stała oznaczającą typ operacyjny lub typ danych. W przypadku obiektu Field lub Property, dopóki obiekt ten nie zostanie dołączony do kolekcji lub do innego obiektu, właściwość ta jest przeznaczona do odczytu i do zapisu, natomiast po dołączeniu, można ją tylko czytać. W przypadku obiektów QueryDef, Recordset bądź Workspace właściwość ta jest przeznaczona tylko do odczytu. W przypadku obiektu Parameter w obszarze roboczym Microsoft Jet właściwość ta jest przeznaczona tylko do odczytu, podczas gdy w obszarze roboczym ODBCDirect właściwość jest zawsze przeznaczona do zapiso i do odczytu.

Poniżej opisane są możliwe Ustawienia i wartości zwracane w przypadku obiektów Field, Parameter lub Property.

Stała	Opis
dbBigInt	Big Integer
dbBinary	Binary
dbBoolean	Boolean
dbByte	Byte
dbChar	Char
dbCurrency	Currency
dbDate	daty i godziny
dbDecimal	Decimal
dbDouble	Double
dbFloat	Float
dbGUID	GUID
dbInteger	Integer
dbLong	Long
dbLongBinary	Long Binary (obiekt OLE)
dbMemo	Memo
dbNumeric	Numeric
dbSingle	Single
dbText	Text
dbTime	Time
dbTimeStamp	TimeStamp
dbVarBinary	VarBinary
Poniżej opisane są możliwe Ustawienia i wartości zwracane w przypadku obiektu QueryDef.

Stała	Typ kwerendy
dbQAction	Kwerenda funkcjonalna
dbQAppend	Kwerenda dołączająca
dbQCompound	Kwerenda złożona
dbQCrosstab	Kwerenda krzyżowa
dbQDDL	Kwerenda definiująca dane
dbQDelete	Kwerenda usuwająca
dbQMakeTable	Kwerenda tworząca tabelę
dbQProcedure	Kwerenda proceduralna (tylko obszary robocze DBCDirect)
dbQSelect	Kwerenda wybierająca
dbQSetOperation	Kwerenda składająca
dbQSPTBulk	Wartość używana wraz z dbQSQLPassThrough dla określenia kwerendy, która nie zwraca rekordów (tylko obszary robocze Microsoft Jet).
dbQSQLPassThrough	Kwerenda przekazująca (tylko obszary robocze Microsoft Jet)
dbQUpdate	Kwerenda aktualizująca
Uwaga Nie trzeba koniecznie bezpośrednio ustawiać właściwości Type na wartość dbQSQLPassThrough, aby w obszarze roboczym Microsoft Jet utworzyć kwerendę przekazującą SQL. Aparat bazy danych Microsoft Jet czyni to automatycznie podczas tworzenia obiektu QueryDef oraz ustawiania właściwości Connect.

Oto możliwe Ustawienia i wartości zwracane w przypadku obiektu Recordset.

Stała	Typ obiektu Recordset
dbOpenTable	Tabela (tylko obszary robocze Microsoft Jet)
dbOpenDynamic	Dynamiczny (tylko obszary robocze ODBCDirect)
dbOpenDynaset	Zestaw dynamiczny
dbOpenSnapshot	Utrwalony
dbOpenForwardOnly	Progresywny
Poniżej opisane są możliwe Ustawienia i wartości zwracane w przypadku obiektu Workspace.

Stała	Typ obiektu Workspace
dbUseJet	Obiekt Workspace jest podłączony do aparatu bazy danych Microsoft Jet
dbUseODBC	Obiekt Workspace jest podłączony do źródła danych ODBC.
Użycie

Jeśli do kolekcji obiektu Index, QueryDef, Recordset lub TableDef zostanie dołączony nowy obiekt Field, Parameter bądź Property, zaś stosowana baza danych nie dopuszcza typu danych określonego dla nowego obiektu, wówczas wystąpi błąd.


Unique - właściwość (DAO)
Unique - właściwość

Ustawia lub zwraca wartość wskazującą, czy obiekt Index stanowi unikatowy (kluczowy) indeks tabeli (dotyczy tylko obszaru roboczego Microsoft Jet).

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest to wartość typu Boolean, równa True, jeśli obiekt Index stanowi indeks unikatowy. Dopóki obiekt Index nie zostanie dołączony do kolekcji, właściwość ta jest przeznaczona do odczytu i do zapisu, gdy już tak się stanie, służy tylko do odczytu.

Użycie

Indeks unikatowy składa się z jednego lub więcej pól, które w sposób logiczny nadają wszystkim rekordom tabeli jednoznaczny, z góry określony porządek. Jeśli indeks zawiera tylko jedno pole, mieszczące się w nim wartości muszą być unikatowe w całej tabeli, jeśli natomiast pól tych jest więcej, każde z nich może zawierać wartości powielone, lecz każda kombinacja wartości we wszystkich polach indeksu musi być unikatowa.

Jeśli obie właściwości Unique i Primary, obiektu Index, mają wartość True, indeks jest unikatowy i podstawowy: jednoznacznie identyfikuje wszystkie rekordy tabeli w ustalonym z góry, logicznym porządku. Jeśli zaś właściwość Primary ma wartość False, indeks jest indeksem wtórnym. Indeksy wtórne (zarówno kluczowe, jak i niekluczowe) logicznie ustawiają rekordy w ustalonym z góry porządku, nie służąc jednak przy tym do identyfikowania rekordów w tabeli.

Wskazówki

•	Tabele nie muszą być indeksowane, gdy jednak są one obszerne, to przy braku indeksów dotarcie do określonego rekordu może zająć sporo czasu.

•	Rekordy wydobywane z tabel nieindeksowanych są zwracane w przypadkowej kolejności.

•	Właściwość Attributes każdego obiektu Field znajdującego się w obiekcie Index określa porządek rekordów, a przez to sposoby dostępu do tego obiektu Index.

•	Indeks unikatowy umożliwia optymalizację wyszukiwania rekordów.

•	Indeksy nie zmieniają fizycznego uporządkowania tabeli bazowej — wpływają jedynie na sposób, w jaki rekordy są dostępne dla obiektu Recordset typu tabela podczas używania określonego indeksu lub podczas tworzenia obiektów Recordset przez aparat bazy danych Microsoft Jet.


Updatable - właściwość (DAO)
Updatable - właściwość

Zwraca wartość wskazującą, czy można dokonać zmiany obiektu DAO.

Wartości zwracane

Wartością zwracaną jest typ danych Boolean o wartości True, jeśli obiekt można zmieniać lub uaktualniać. (Obiekty Recordset typu utrwalonego i progresywnego zawsze zwracają wartość False.)

Użycie

Jeśli właściwość Updatable ma wartość True, wówczas, zależnie od obiektu, prawdziwe są następujące stwierdzenia podane w poniższej tabeli.

Obiekt	Typ wskazuje, że
Database	można zmieniać obiekt.
QueryDef	można zmieniać definicję kwerendy.
Recordset	można uaktualniać rekordy.
TableDef	można zmieniać definicję tabeli.
Właściwość Updatable ma zawsze wartość True dla nowo utworzonego obiektu TableDef oraz wartość False dla tabeli połączonej obiektu TableDef. Nowy obiekt TableDef może być dołączony jedynie do takiej bazy danych, której bieżący użytkownik ma uprawnienia do pisania.

Liczne rodzaje obiektów mogą zawierać pola, których nie daje się uaktualniać. Można na przykład utworzyć obiekt Recordset typu zestaw dynamiczny, w którym dostępne do zmiany są tylko niektóre pola. Pola takie mogą mieć wartości stałe albo zawierać dane narastające automatycznie. Dynamiczny zestaw rekordów może też być wynikiem kwerendy łączącej tabele dające się uaktualniać z takimi, których uaktualniać nie można.

Jeśli obiekt zawiera wyłącznie pola tylko do odczytu, właściwość Updatable ma wartość False. Jeśli można uaktualnić choćby jedno pole, właściwość jest równa True. Podlegające edycji są jedynie pola dające się uaktualniać. Przypisanie nowej wartości polu tylko do odczytu spowoduje wystąpienie błędu przechwytywalnego.

Właściwość Updatable obiektu QueryDef ma wartość True, jeśli można uaktualniać definicję kwerendy, choćby nawet powstały w wyniku kwerendy obiekt Recordset nie dawał się uaktualniać.

Obiekt, który można uaktualniać, może zawierać pola przeznaczone tylko do odczytu, dlatego też przed przystąpieniem do edycji rekordu należy sprawdzić właściwość DataUpdatable każdego pola kolekcji Fields obiektu Recordset.


UserName - właściwość (DAO)
UserName - właściwość

Ustawia lub zwraca wartość określającą użytkownika, grupę użytkowników albo właściciela obiektu Workspace.

Ustawienia i wartości zwracane

Ustawieniem lub wartością zwracaną jest wartość typu String oznaczająca nazwę użytkownika. W obszarze roboczym Microsoft Jet odpowiada to obiektowi User z kolekcji Users albo obiektowi Group z kolekcji Groups. W przypadku obiektów Microsoft Jet Container i Document właściwość ta jest przeznaczona do odczytu i do zapisu. W przypadku wszystkich obiektów Workspace właściwość ta może być tylko czytana.

Użycie

Zależnie od typu obiektu, właściwość UserName odpowiada:

•	właścicielowi obiektu Workspace;

•	użytkownikowi lub grupie użytkowników  gdy ma miejsce operowanie na uprawnieniach na dostęp obiektu Container bądź obiektu Document (dotyczy to tylko obszaru roboczego Microsoft Jet).

Aby odnaleźć lub udzielić zezwolenia określonemu użytkownikowi bądź grupie użytkowników, należy najpierw tak ustawić właściwość UserName, aby zawarła poszukiwaną nazwę użytkownika czy też nazwę grupy. Następnym krokiem jest sprawdzenie na podstawie wartości właściwości Permissions rodzaj zezwolenia przyznanego owemu użytkownikowi bądź grupie użytkowników, albo odpowiednie ustawienie właściwości Permissions, w celu dokonania zmiany zezwoleń.

W przypadku obiektu Workspace, należy poprzez sprawdzenie właściwości UserName ustalić właściciela obiektu Workspace. Przed dołączeniem obiektu do kolekcji Workspaces należy poprzez właściwość UserName ustanowić właściciela obiektu Workspace.


V1xNullBehavior - właściwość (DAO)
V1xNullBehavior - właściwość

Wskazuje, czy ciągi o długości zerowej (""), używane w kodzie do wypełniania pól typu Text bądź Memo są przekształcane w wartość Null.

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu Boolean, i ma wartość True, jeśli ciągi znaków o długości zerowej są przekształcane na wartość Null.

Użycie

Właściwość ta stosuje się do baz danych wersji 1.x aparatu bazy danych Microsoft Jet, które zostały przekształcone do wersji 2.0 lub 3.0 baz danych aparatu Microsoft Jet.

Uwaga   Aparat bazy danych Microsoft Jet automatycznie tworzy tę właściwość podczas przekształcania bazy danych z wersji 1.x w bazę danych w wersji 2.0 albo 3.0. Baza danych w wersji 2.0 zachowa ową właściwość przy jej przekształcaniu w bazę danych w wersji 3.x.

Jeśli dokonuje się zmiany ustawienia tej właściwości, zmiana ta odniesie skutek dopiero po zamknięciu i ponownym otwarciu bazy danych.

Działanie programu będzie szybsze, jeżeli dokona się takiej modyfikacji kodu ustawiającego pola typu Text lub typu Memo na ciągi znaków o długości zerowej, aby pola te od razu otrzymywały wartość Null, oraz gdy usunie się właściwość V1xNullBehavior z kolekcji Properties.


ValidateOnSet - właściwość (DAO)
ValidateOnSet - właściwość

Ustawia lub zwraca wartość określającą, czy wartość obiektu Field jest poprawna natychmiast po ustawieniu właściwości Value tego obiektu (dotyczy tylko obszaru roboczego Microsoft Jet).

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu Boolean, o poniższych wartościach.

Wartość	Opis
True	Reguła poprawności określona właściwością ValidationRule obiektu Field sprawdzana jest podczas ustawiania dla obiektu właściwości Value
False	(domyślna) Kontrola poprawności dokonywana jest podczas uaktualniania rekordu.
Spośród obiektów Recordset jedynie obiekty Field dopuszczają, aby właściwość ValidateOnSet była przeznaczona do odczytu i do zapisu.

Użycie

Nadanie właściwości ValidateOnSet wartości True może być przydatne w przypadku, gdy użytkownik metody wprowadza rekordy zawierające istotne dane typu Memo. Oczekiwanie, aż wywołanie Update sprawdzi dane, może prowadzić do niepotrzebnej straty czasu potrzebnego na zapisanie obszernych danych typu Memo do bazy danych, jeśli okaże się, iż dane są i tak nieprawidłowe, ponieważ reguły poprawności zostały naruszone w innym polu.


ValidationRule - właściwość (DAO)
ValidationRule - właściwość

Ustawia lub zwraca wartość sprawdzającą dane w polu, które zostało zmienione lub dodane do tabeli (dotyczy tylko obszaru roboczego Microsoft Jet).

Ustawienia i wartości zwracane

Ustawieniem lub wartością zwracaną jest wartość typu String opisująca porównanie o postaci klauzuli WHERE języka SQL, lecz bez zastrzeżonego słowa WHERE. W przypadku obiektu, który nie został jeszcze dołączony do kolekcji Fields, właściwość ta jest przeznaczona do odczytu i do zapisu. Poniżej dokładniej opisano, kiedy można czytać i ustawiać wartość tej właściwości.

Użycie

Właściwość ValidationRule określa, czy pole zawiera prawidłowe dane. Jeśli nie są prawidłowe, wystąpi przechwytywalny błąd wykonania. Zwracanym komunikatem o błędzie będzie tekst właściwości ValidationText (jeśli istnieje) bądź też tekst wyrażenia określonego przez ValidationRule.

W przypadku obiektu Field, zakres stosowania właściwości ValidationRule zależy od obiektu zawierającego kolekcję Fields, do której dołączany jest obiekt Field.

Obiekt dołączony do	Użycie
Index	Nie przewidziane
QueryDef	Tylko do odczytu
Recordset	Tylko do odczytu
Relation	Nie przewidziane
TableDef	Do odczytu i do zapisu
W przypadku obiektu Recordset, właściwość ValidationRule można tylko odczytywać. W przypadku obiektu TableDef, sposób użycia właściwości ValidationRule zależy od stanu obiektu TableDef, jak to pokazano w poniższej tabeli.

TableDef	Użycie
Tabela bazowa	Do odczytu i do zapisu
Tabela połączona	Tylko do odczytu
Sprawdzanie poprawności ma zastosowanie jedynie do baz danych korzystających z aparatu bazy danych Microsoft Jet.

Wyrażenie znakowe określone właściwością ValidationRule obiektu Field może się odnosić wyłącznie do tego obiektu Field. Wyrażenie nie może się odnosić do funkcji definiowanych przez użytkownika, funkcji agregacji języka SQL ani do kwerend. Aby móc ustawić dla obiektu Field właściwość ValidationRule w przypadku, gdy jego właściwość ValidateOnSet ma wartość True, konieczny jest pomyślny rozbiór wyrażenia (przy czym domyślnym argumentem wyrażenia jest nazwa pola) oraz jego wartość musi wynieść True. W przypadku, gdy właściwość ValidateOnSet ma wartość False, ustawienie właściwości ValidationRule jest ignorowane.

Właściwość ValidationRule obiektu Recordset lub TableDef może się odnosić do wielu pól tego obiektu. Podane wyżej ograniczenia stosują się do obiektu Field.

W przypadku obiektu Recordset typu tabela, właściwość ValidationRule przejmuje ustawienia właściwości ValidationRule obiektu TableDef, wykorzystywane przy tworzeniu obiektu Recordset typu tabela.

W przypadku obiektu TableDef opartego na tabeli połączonej, właściwość ValidationRule przejmuje ustawienia właściwości ValidationRule dokonane dla właściwej tabeli bazowej. Jeśli ta tabela bazowa nie podlega sprawdzaniu, wartością tej właściwości jest ciąg o długości zerowej ("").

Uwaga   Jeśli ustawi się tę właściwość na ciąg znaków z dołączaną na końcu wartością nie będącą liczbą całkowitą, zaś parametry systemu jako znak separatora dziesiętnego uznają inny znak niż stosowana w USA kropka, taki jak przecinek (na przykład, strSQL = "CENA > " & lngCena i lngCena = 125,50), podczas sprawdzania przez kod dowolnych danych wystąpi błąd. Stanie się tak, ponieważ podczas dołączania liczba przekształcana jest w ciąg znaków zgodnie z domyślnym dla każdego systemu znakiem separatora dziesiętnego, natomiast Microsoft Jet SQL przyjmuje jedynie znaki dziesiętne zgodne ze standardem stosowanym w USA.


ValidationText - właściwość (DAO)
ValidationText - właściwość

Ustawia lub zwraca wartość określającą tekst komunikatu wyświetlanego przez aplikację w przypadku, gdy wartość obiektu Field nie spełnia warunków reguły poprawności określonych przez właściwość ValidationRule (dotyczy tylko obszaru roboczego Microsoft Jet).

Ustawienia i wartości zwracane

Ustawieniem lub wartością zwracaną jest wartość typu String określająca tekst wyświetlany wówczas, gdy użytkownik usiłuje wprowadzić w pole nieprawidłową wartość. W przypadku obiektu nie dołączonego jeszcze do kolekcji, właściwość ta jest przeznaczona do odczytu i do zapisu. W przypadku obiektu Recordset, właściwość ta jest przeznaczona tylko do odczytu. W przypadku obiektu TableDef, właściwość ta dla tabeli połączonej jest przeznacznona tylko do odczytu, zaś dla tabeli bazowej do odczytu i do zapisu.

Użycie

W przypadku obiektu Field, sposób użycia właściwości ValidationText zależy od obiektu zawierającego kolekcję Fields, do której dołączany jest obiekt Field, jak to pokazuje poniższa tabela.

Obiekt dołączany do	Użycie
Index	Nie przewidziane
QueryDef	Tylko do odczytu
Recordset	Tylko do odczytu
Relation	Nie przewidziane
TableDef	Do odczytu i do zapisu


Value - właściwość (DAO)
Value - właściwość

Ustawia lub zwraca wartość obiektu.

Ustawienia i wartości zwracane

Ustawienie lub wartość zwracana jest typu danych Variant i określa wartość właściwą dla typu danych określonego właściwością Type obiektu.

Użycie

Właściwość Value jest wykorzystywana głównie do pobierania i zmieniania danych w obiektach Recordset.

Właściwość Value jest domyślną właściwością obiektów Field, Parameter i Property. Z tego powodu, podczas ustawiania lub zwracania wartości jednego z tych obiektów można odwoływać się do nich bezpośrednio, bez wymieniania właściwości Value.

Próby dokonania ustawienia czy zwrócenia właściwości Value w nieodpowiednim kontekście (na przykład, właściwości Value obiektu Field z kolekcji Fields obiektu TableDef) powodują wystąpienie błędu przechwytywalnego.

Uwagi

•	W obszarze roboczym ODBCDirect, przeczytać czy ustawić właściwość Value pola obiektu Recordset, bez odświeżenia bieżącego rekordu, można najwyżej raz. Przykładowo, aby odczytać i potem ustawić właściwość Value, należy najpierw właściwość tę odczytać, potem za pomocą metody Move 0 odświeżyć bieżący rekord, a na koniec zapisać nową wartość.

•	Wartości dziesiętne odczytywane z bazy danych Microsoft SQL Server będą formatowane przez obszar roboczy Microsoft Jet zgodnie z notacją wykładniczą, jednak w obszarze roboczym ODBCDirect będą miały postać zwykłych wartości dziesiętnych.


Version - właściwość (DAO)
Version - właściwość

•	Obszar roboczy Microsoft Jet — W przypadku obiektu DBEngine, zwraca wersję aktualnie używanego obiektu DAO. W przypadku obiektu Database, zwraca wersję aparatu Jet, który utworzył dany plik .mdb.

•	Obszar roboczy ODBCDirect — W przypadku obiektu DBEngine, zwraca wersję aktualnie używanego obiektu DAO. W przypadku obiektu Database, zwraca wersję aktualnie używanego sterownika ODBC.

Wartości zwracane

Wartością zwracaną jest sformatowana jak poniżej wartość typu String, odpowiadająca numerowi wersji.

•	Obszar roboczy Microsoft Jet — numer wersji ma postać "starszy.młdoszy", na przykład "3.0". Numer wersji produktu składa się z numeru wersji (3), kropki i numeru wydania (0).

•	Obszar roboczy ODBCDirect — numer wersji DAO ma postać "starszy.młodszy", bądź też jest numerem sterownika ODBC w postaci "starszy.młodszy.numer". Przykładowo, wartość DBEngine.Version wynosząca “3.5” wskazuje na DAO w wersji 3.5. Wartość Version obiektu Database wynosząca 2.50.1032 wskazuje, że bieżąca instancja DAO jest połączona z ODBC w wersji 2.5, numer 1032.

Użycie

W przypadku obszaru roboczego Microsoft Jet, właściwość Version obiektu Database odpowiada wersji aparatu bazy danych Microsoft Jet, nie musi natomiast koniecznie zgadzać się z numerem wersji programu firmy Microsoft zawierającego aparat bazy danych. Przykładowo, właściwość Version obiektu Database utworzonego w programie Visual Basic 3.0 firmy Microsoft będzie równa 1.1, nie zaś 3.0.

Poniższa tabela wskazuje, która wersja aparatu bazy danych została zawarta w różnych wersjach produktów firmy Microsoft.

Wersja aparatu Microsoft Jet (rok wydania)	Microsoft Access	Microsoft Visual Basic	Microsoft Excel	Microsoft Visual C++
1.0 (1992)	1.0	N/D	N/D	N/D
1.1 (1993)	1.1	3.0	N/D	N/D
2.0 (1994)	2.0	N/D	N/D	N/D
2.5 (1995)	N/D	4.0 (16-bitowy)	N/D	N/D
3.0 (1995)	‘95 (7.0)	4.0 (32-bitowy)	‘95 (7.0)	4.x
3.5 (1996)	‘97 (8.0)	5.0	‘97 (8.0)	5.0


DesignMasterID - właściwość (DAO)
DesignMasterID - właściwość

Ustawia lub zwraca 16-bitową wartość, która jednoznacznie identyfikuje wzorzec w zestawie replik (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawianą lub zwracaną wartością jest GUID, który jednoznacznie identyfikuje wzorzec.

Użycie

Właściwość DesignMasterID powinna być ustawiana tylko w przypadku konieczności przeniesienia bieżącego wzorca. Ustawienie tej właściwości dla określonej repliki z zestawu replik wyznacza ją jako wzorzec.

Ostrzeżenie  W żadnym wypadku nie należy w zestawie replik tworzyć drugiego wzorca. Istnienie drugiego wzorca może spowodować utratę danych.

W ekstremalnych okolicznościach — na przykład, w przypadku zniszczenia lub uszkodzenia wzorca — można ustawić tę właściwość dla bieżącej repliki. Jednak jeśli w zestawie istnieje już wzorzec, ustawienie tej właściwości dla innej repliki może spowodować podział tego zestawu na dwa całkowicie niezgodne ze sobą zestawy i uniemożliwić w przyszłości przeprowadzenie jakiejkolwiek synchronizacji danych.

W przypadku wyznaczenia nowego wzorca dla zestawu, przed ustawieniem w replice właściwości DesignMasterID, należy zsynchronizować ten wzorzec z wszystkimi replikami w zestawie. Przed określeniem repliki jako wzorca, należy otworzyć ją w trybie wyłączności.

Jeśli replika, która ma być określona jako wzorzec, jest oznaczona jako tylko do odczytu, replika docelowa zostanie oznaczona jako do odczytu i zapisu. Również poprzedni wzorzec pozostanie oznaczony jako do odczytu i zapisu.

Ustawienie właściwości DesignMasterID jest przechowywane w tabeli systemowej MSysRepInfo.


KeepLocal - właściwość (DAO)
KeepLocal - właściwość

Ustawia lub zwraca wartość dla tabeli, kwerendy, formularza, raportu, makra lub modułu, które nie będą replikowane w przypadku replikowania bazy danych (tylko obszary robocze Microsoft Jet).

Uwaga Przed pobraniem lub ustawieniem właściwości KeepLocal dla obiektu TableDef lub QueryDef należy ją utworzyć za pomocą metody CreateProperty i dodać do kolekcji Properties obiektu.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Text. Jeśli właściwość zostanie ustawiona na "T", w przypadku replikowania bazy danych obiekt pozostanie lokalny. Aby skorzystać z właściwości KeepLocal, należy ją ustawiać przed wykonaniem replikacji obiektów.

Użycie

Raz ustawiona właściwość KeepLocal będzie pojawiać się w kolekcji Properties obiektu Document reprezentującego obiekt główny.

Przed ustawieniem właściwości KeepLocal należy sprawdzić wartość właściwości Replicable.

Po przekształceniu bazy danych na replikowalną, wszystkie nowe obiekty utworzone we wzorcu lub w jakichkolwiek innych replikach w tym zestawie są obiektami lokalnymi. Obiekty lokalne pozostają w tej replice, w której zostały utworzone i nie są kopiowane do elementów zestawów replik. Za każdym razem po utworzeniu nowej repliki w określonym zestawie, będzie ona zawierała wszystkie replikowalne obiekty z repliki źródłowej, ale bez obiektów lokalnych z tej repliki.

Jeśli w replice jest tworzony nowy obiekt i istnieje potrzeba zmiany jego typu z lokalnego na replikowalny, tak aby mogli go używać wszyscy użytkownicy, można go utworzyć we wzorcu lub importować go do wzorca. Należy koniecznie usunąć ten obiekt lokalny z wszystkich replik, inaczej wystąpi błąd projektu. Po umieszczeniu obiektu jako części wzorca, należy ustawić jego właściwość Replicable na True.

Obiekt, dla którego jest ustawiana właściwość KeepLocal, mógł wcześniej odziedziczyć ją z innego obiektu. Jednak wartość ustawiona przez ten inny obiekt nie ma wpływu na zachowanie się tego obiektu, który ma być określony jako lokalny. Właściwość ta musi być ustawiana jawnie, osobno dla każdego obiektu.


Replicable - właściwość (DAO)
Replicable - właściwość

Ustawia lub zwraca wartość, która określa, czy baza danych lub obiekt są replikowalne (tylko obszary robocze Microsoft Jet).

Uwaga  Przed pobraniem lub ustawieniem właściwości Replicable dla obiektu Database, TableDef lub QueryDef należy utworzyć ją za pomocą metody CreateProperty i dodać ją do kolekcji Properties obiektu.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Text.

Ustawienie tej właściwości na "T" dla obiektu Database powoduje, że baza danych będzie replikowalna. Po ustawieniu tej właściwości na "T" nie można już jej zmienić. W takim wypadku próba ustawienia jej na wartość "F" (lub jakąkolwiek inną niż "T") powoduje błąd.

Dla jakiegokolwiek obiektu w bazie danych ustawienie tej właściwości na "T" replikuje ten obiekt (i dalsze zmiany w obiekcie) do wszystkich replik w zestawie replik. Tę właściwość można również ustawić w arkuszu właściwości obiektu w programie Microsoft Access.

Uwaga   Aparat Microsoft Jet 3.5 obsługuje właściwość ReplicableBool typu Boolean. Jej działanie jest zgodne z działaniem właściwości Replicable, z wyjątkiem tego, że przyjmuje ona wartości typu Boolean. Ustawienie właściwości ReplicableBool na True pozwala replikować dany obiekt.

Użycie

Przed ustawieniem właściwości Replicable dla bazy danych należy wykonać kopię zapasową bazy danych. Jeśli próba ustawienia właściwości Replicable nie powiodła się, należy usunąć częściowo replikowaną bazę, wykonać nową kopię z kopii zapasowej i ponowić próbę.

Ustawienie tej właściwości dla obiektu Database spowoduje dodanie przez aparat Microsoft Jet do obiektów w tej bazie danych pewnych pól, tabel i właściwości. Microsoft Jet wykorzystuje te pola, tabele i właściwości do synchronizacji obiektów bazy danych. Na przykład, wszystkie istniejące tabele będą miały trzy nowe pola ułatwiające identyfikację rekordów, które zostały zmienione. Dodanie tych pól i innych obiektów powoduje powiększenie bazy danych.

W formularzach, raportach, makrach i modułach zdefiniowanych przez aplikację główną (taką jak Microsoft Access), dla obiektów zdefiniowanych przez program główny tę właściwość ustawia się za pomocą interfejsu użytkownika tego programu. Raz ustawiona właściwość Replicable będzie pojawiać się w kolekcji Properties obiektu Document reprezentującego obiekt główny.

Jeśli właściwość Replicable jest już ustawiona przy użyciu pola wyboru Replikowalny na arkuszu właściwości obiektu, nie można ponownie ustawić jej w kodzie.

Jeśli tworzona jest nowa tabela, kwerenda, formularz, makro lub moduł w replice, nowy obiekt jest traktowany jako lokalny i przechowywany tylko w tej replice. Jeśli zachodzi potrzeba wykorzystywania tego obiektu przez użytkowników w innych replikach, należy zmienić jego typ z lokalnego na replikowalny. Należy w tym celu utworzyć obiekt we wzorcu lub importować go do wzorca, a następnie ustawić właściwość Replicable na "T".

Obiekt, dla którego jest ustawiana właściwość Replicable, mógł wcześniej odziedziczyć ją z innego obiektu. Jednak wartość ustawiona przez ten inny obiekt nie ma wpływu na zachowanie się tego obiektu, który ma być określony jako replikowalny. Właściwość ta musi być ustawiana jawnie, osobno dla każdego obiektu.


ReplicaID - właściwość (DAO)
ReplicaID - właściwość

Zwraca 16-bitową wartość, która jednoznacznie identyfikuje replikę bazy danych (tylko obszary robocze Microsoft Jet).

Wartości zwracane

Wartością zwracaną jest GUID, który jednoznacznie identyfikuje replikę lub wzorzec.

Użycie

Przy tworzeniu nowej repliki, ta wartość jest automatycznie generowana przez aparat bazy danych Microsoft Jet.

Właściwość ReplicaID dla każdej repliki (również wzorca) jest przechowywana w tabeli systemowej MSysReplicas.


SystemDB - właściwość (DAO)
SystemDB - właściwość

Ustawia lub zwraca ścieżkę dostępu do bieżącego położenia pliku informacyjnego grupy roboczej (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu String i opisuje pełną ścieżkę dostępu pliku informacyjnego grupy roboczej.

Użycie

Aparat bazy danych Microsoft Jet umożliwia definiowanie grup roboczych i ustawianie dla każdego użytkownika w grupie roboczej różnych uprawnień dostępu do każdego obiektu w bazie danych. Grupa robocza jest zdefiniowana w pliku informacyjnym grupy, o standardowej nazwie "system.mda". Dla użytkowników, którzy żądają dostępu do obiektów bazy danych, które są zabezpieczone, DAO musi uzyskać informację o położeniu tego pliku. Położenie może być określone dla DAO albo przez ustawienia w Rejestrze Windows, albo przez ustawienie właściwości SystemDB. Po instalacji, domyślne ustawienie ma wartość "system.mda", bez ścieżki.

Aby ta opcja miała wpływ na działanie aplikacji, należy ustawić właściwość SystemDB przed zainicjowaniem przez aplikację obiektu DBEngine  (to znaczy przed utworzeniem wystąpienia jakiegokolwiek innego obiektu DAO). Zasięg widzialności tych ustawień jest ograniczony do aplikacji i bez ponownego uruchomienia aplikacji nie może być zmieniony.


PartialReplica - właściwość (DAO)
PartialReplica - właściwość

Ustawia lub zwraca wartość dotyczącą obiektu Relation, która określa czy ten związek powinien być brany pod uwagę podczas wykonywania repliki częściowej z repliki pełnej (tylko bazy danych Microsoft Jet).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Boolean i jest ustawiona na True, jeśli podczas synchronizacji związek powinien być wymuszany.

Użycie

Właściwość pozwala na replikację danych z repliki pełnej do repliki częściowej w oparciu o związki pomiędzy tabelami. Jeśli ustawienie samej właściwości ReplicaFilter nie jest w stanie odpowiednio określić, które dane powinny być replikowane do repliki częściowej, można użyć właściwości PartialReplica. Na przykład, załóżmy że w bazie danych znajduje się tabela Klienci pozostająca w związku jeden-do-wielu z tabelą Zamówienia i istnieje konieczność skonfigurowania repliki częściowej w taki sposób, aby replikowane były tylko zamówienia klientów z Kalifornii (a nie wszystkie zamówienia). Zrealizowanie tego nie jest możliwe przez ustawienie właściwości ReplicaFilter dla tabeli Zamówienia na Region = 'CA', ponieważ pole Region znajduje się w tabeli Klienci, a nie w tabeli Zamówienia.

Aby replikowane były wszystkie zamówienia z Kalifornii, należy określić, że związek pomiędzy tabelami Zamówienia i Klienci ma być aktywny podczas replikacji. Aby po utworzeniu repliki częściowej zapełnić ją wszystkimi zamówieniami z Kalifornii:

1	Ustaw właściwość ReplicaFilter dla obiektu TableDef tabeli Klienci na "Region = 'CA'".

2	Ustaw wartość właściwości PartialReplica na True dla obiektu Relation odpowiadającego związkowi pomiędzy tabelami Zamówienia i Klienci.

3	Wywołaj metodę PopulatePartial.

Ostrzeżenie   Jeśli dla repliki jest ustawiony filtr lub związek, rekordy, które nie spełniają kryteriów, zostaną usunięte z repliki częściowej, ale pozostaną w replice pełnej. Na przykład, jeśli w replice częściowej dla obiektu TableDef tabeli Klienci właściwość ReplicaFilter jest ustawiona na "Region = 'CA'" i baza danych zostanie ponownie zapełniona, zostaną wstawione lub uaktualnione wszystkie rekordy klientów z Kalifornii. Jeśli następnie właściwość ReplicaFilter zostanie ustawiona na "Region = 'FL'" i baza danych zostanie ponownie zapełniona, wszystkie rekordy klientów z Kalifornii w replice częściowej zostaną usunięte, a zostaną wstawione wszystkie rekordy klientów z Florydy znajdujące się w replice pełnej. W replice pełnej żaden rekord nie zostanie usunięty.

Przed ustawieniem właściwości ReplicaFilter lub PartialReplica wskazane jest wykonanie synchronizacji repliki częściowej, dla której te właściwości są ustawiane, z repliką pełną. Zapewnia to, że wszystkie nie zapisane zmiany dotyczące repliki częściowej zostaną zrealizowane w replice pełnej, przed usunięciem jakiegokolwiek rekordu z repliki częściowej.


ReplicaFilter - właściwość (DAO)
ReplicaFilter - właściwość

Ustawia lub zwraca wartość dotyczącą obiektu TableDef w replice częściowej, określającą jaki podzbiór rekordów jest replikowany do tej tabeli z repliki pełnej (tylko bazy danych Microsoft Jet).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu String lub Boolean i określa, jaki podzbiór rekordów jest replikowany, zgodnie z informacjami podanymi w poniższej tabeli:

Wartość	Opis
ciąg znaków	Kryterium, które musi spełniać rekord, aby był replikowany z tabeli w replice pełnej do tabeli w replice częściowej.
True	Wszystkie rekordy będą replikowane.
False	(Domyślnie) Żadne rekordy nie będą replikowane.
Użycie

Właściwość ta jest podobna do klauzuli WHERE języka SQL (bez słowa WHERE), ale wewnątrz kryterium nie można umieszczać podkwerend, funkcji agregacji (takich jak Count) ani funkcji zdefiniowanych przez użytkownika.

Dane mogą być synchronizowane tylko pomiędzy repliką pełną a repliką częściową. Synchronizacja danych pomiędzy dwoma replikami częściowymi nie jest możliwa. Dla częściowej replikacji można określić, jakie rekordy mają być replikowane, ale nie jest możliwe określenie, które pola będą replikowane.

Filtr dla repliki jest zazwyczaj zmieniany wtedy, gdy zachodzi potrzeba replikacji innego zestawu rekordów. Na przykład, jeśli przedstawicielstwo handlowe zostaje tymczasowo przejęte przez przedstawicielstwo w innym regionie, aplikacja bazy danych może tymczasowo replikować dane dotyczące obydwu przedstawicielstw, po czym można przywrócić poprzednią wartość filtru. W tej sytuacji aplikacja ustawia właściwość ReplicaFilter i ponownie wypełnia replikę częściową.

Jeśli aplikacja ma zmienić filtry dla repliki:

1	Aby zsynchronizować replikę pełną z repliką częściową, dla której będą zmieniane filtry, użyj metody Synchronize.

2	Użyj właściwości ReplicaFilter, aby wykonać żądane zmiany w filtrach repliki.

3	Użyj metody PopulatePartial w celu usunięcia wszystkich rekordów z repliki częściowej i przesłania do niej wszystkich tych rekordów z repliki pełnej, które spełniają nowe kryterium filtru.

Aby usunąć filtr, należy ustawić właściwość ReplicaFilter na wartość False. Jeśli wszystkie filtry będą usunięte i wywołana zostanie metoda PopulatePartial, w żadnej z replikowanych tabel w replice częściowej nie pojawi się żaden rekord.

Uwaga   Jeśli filtr repliki zostanie zmieniony, a następnie przed wywołaniem metody PopulatePartial wywołana zostanie metoda Synchronize, wystąpi błąd przechwytywalny.


BatchCollisionCount - właściwość (DAO)
BatchCollisionCount - właściwość

Zwraca liczbę rekordów, które nie zostały uaktualnione podczas wykonywania ostatniej aktualizacji grupowej (tylko obszary robocze ODBCDirect).

Wartości zwracane

Zwracana wartość jest typu Long i jest równa liczbie rekordów, dla których operacja aktualizacji była nieudana. Jeśli dla wszystkich rekordów operacja aktualizacji została zakończona pomyślnie, zwracana jest wartość 0.

Użycie

Wartość tej właściwości oznacza liczbę rekordów, dla których podczas próby wykonania ostatniej operacji aktualizacji grupowej wystąpiły kolizje lub które nie zostały uaktualnione z innych przyczyn. Wartość tej właściwości odpowiada liczbie zakładek we właściwości BatchCollisions.

Jeśli dla obiektu roboczego Recordset właściwość Bookmark będzie ustawiana na wartości zakładek z tablicy BatchCollisions, można w celu zakończenia ostatniej grupowej operacji Update przechodzić kolejno do każdego rekordu, dla którego ta operacja nie została zakończona pomyślnie.

Po poprawieniu rekordów, dla których wystąpiła kolizja, można ponownie wywołać w trybie grupowym metodę Update. W tym momencie DAO podejmie próbę wykonania następnej operacji aktualizacji grupowej i właściwość BatchCollisions ponownie będzie odzwierciedlała zestaw rekordów, dla których ta próba okazała się nieudana. Rekordy poprawnie uaktualnione podczas pierwszej próby nie będą poddane tej aktualizacji, ponieważ ich właściwość RecordStatus jest ustawiona na wartość dbRecordUnmodified. Ten proces może być kontynuowany, dopóki będą występować kolizje lub nastąpi przerwanie aktualizacji i zamknięcie zestawu wynikowego.


BatchCollisions - właściwość (DAO)
BatchCollisions - właściwość

Zwraca tablicę zakładek wskazującą wiersze, które podczas wykonywania ostatniej operacji aktualizacji grupowej spowodowały kolizje (tylko obszary robocze ODBCDirect).

Wartości zwracane

Zwracaną wartością jest wyrażenie wariantowe zawierające tablicę zakładek.

Użycie

Właściwość zawiera tablicę zakładek wskazującą na wiersze, które podczas ostatniej próby wykonania grupowej operacji Update spowodowały kolizje. Wartość właściwości BatchCollisionCount jest równa liczbie elementów w tej tablicy.

Jeśli dla obiektu roboczego Recordset właściwość Bookmark będzie ustawiana na wartości zakładek z tablicy BatchCollisions, można w celu zakończenia ostatniej grupowej operacji Update, przechodzić kolejno do każdego rekordu, dla którego nie została ona zakończona pomyślnie.

Po poprawieniu rekordów, dla których wystąpiła kolizja, można ponownie wywołać w trybie grupowym metodę Update. W tym momencie DAO podejmie próbę wykonania następnej operacji aktualizacji grupowej i właściwość BatchCollisions ponownie będzie odzwierciedlała zestaw rekordów, dla których ta próba okazała się nieudana. Rekordy poprawnie uaktualnione podczas pierwszej próby nie będą poddane tej aktualizacji, ponieważ ich właściwość RecordStatus jest ustawiona na wartość dbRecordUnmodified. Ten proces może być kontynuowany, dopóki będą występować kolizje lub nastąpi przerwanie aktualizacji i zamknięcie zestawu wynikowego.

Tablica jest ponownie tworzona za każdym uruchomieniem metody Update w trybie grupowym.


BatchSize - właściwość (DAO)
BatchSize - właściwość

Ustawia lub zwraca liczbę instrukcji odesłanych do serwera w każdej grupie (tylko obszary robocze ODBCDirect).

Ustawienia i wartości zwracane

Ustawiana i zwracana wartość jest typu Long i jest równa liczbie wysłanych do serwera instrukcji zgrupowanych w pojedynczej aktualizacji grupowej. Domyślnie wartość ta wynosi 15.

Użycie

Właściwość BatchSize określa liczność zbioru instrukcji wysyłanych do serwera podczas aktualizacji grupowej. Wartość tej właściwości określa liczbę instrukcji  wysyłanych do serwera w jednym buforze poleceń. Domyślnie, w każdej grupie wysyłanych jest 15 instrukcji. Właściwość ta może zostać zmieniona w dowolnym momencie. Jeśli serwer bazy danych nie dopuszcza grupowania instrukcji, należy ustawić tę właściwość na wartość 1, co spowoduje wysyłanie instrukcji pojedynczo.


CacheStart - właściwość (DAO)
CacheStart - właściwość

Ustawia lub zwraca wartość, która określa zakładkę pierwszego rekordu w obiekcie Recordset typu zestaw dynamiczny zawierającego dane ze źródła danych ODBC, które będą lokalnie buforowane (tylko obszary robocze Microsoft Jet).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu String i określa zakładkę.

Użycie

Buforowanie danych poprawia wydajność tych aplikacji, które odczytują dane ze zdalnych serwerów poprzez obiekty Recordset typu zestaw dynamiczny. Bufor jest to obszar w pamięci lokalnej, gdzie przechowywane są ostatnio odczytane dane na wypadek, gdyby zaistniała konieczność ich ponownego wykorzystania przez aplikację. Jeśli wystąpi żądanie dostępu do danych, aparat bazy danych Microsoft Jet sprawdzi zawartość bufora przed odczytaniem danych z serwera (która to operacja trwa znacznie dłużej). W buforze mogą być przechowywane tylko dane ze źródła danych ODBC.

Każde źródło danych ODBC połączone z aparatem Microsoft Jet, takie jak tabela połączona, może mieć lokalny bufor. Aby utworzyć bufor, należy ze zdalnego źródła danych otworzyć obiekt Recordset, ustawić właściwości CacheSize i CacheStart, a następnie użyć metody FillCache lub poruszać się po rekordach za pomocą metod Move.

Wartość właściwości CacheStart jest zakładką pierwszego rekordu w obiekcie Recordset, który będzie buforowany. Do ustawienia właściwości CacheStart można wykorzystać zakładkę dowolnego rekordu. Rekord, który ma być umieszczony na początku bufora, należy uczynić rekordem bieżącym, a następnie ustawić właściwość CacheStart na wartość właściwości Bookmark.

Aparat bazy danych Microsoft Jet pobiera z bufora rekordy mieszczące się w zakresie bufora, a rekordów spoza zakresu bufora żąda od serwera.

Zmiany w rekordach znajdujących się w buforze wykonywane w źródle bazy danych przez innych użytkowników nie są widoczne w buforze.

Aby wymusić uaktualnienie wszystkich buforowanych danych, należy ustawić właściwość CacheSize obiektu Recordset na wartość 0, następnie ustawić ją na pierwotnie żądaną wartość i wywołać metodę FillCache.


Connection - właściwość (DAO)
Connection - właściwość

W przypadku obiektu Database zwraca obiekt Connection odpowiadający bazie danych (tylko obszary robocze ODBCDirect).

W przypadku obiektu Recordset zwraca obiekt Connection, który jest właścicielem obiektu Recordset (tylko obszary robocze ODBCDirect).

Ustawienia i wartości zwracane

Zwracana wartość jest zmienną obiektową, która reprezentuje obiekt Connection. W przypadku obiektu Database właściwość Connection jest przeznaczona tylko do odczytu, natomiast w przypadku obiektu Recordset jest przeznaczona do odczytu i zapisu.

Użycie

Właściwości Connection obiektu Database należy używać w celu uzyskania odwołania do obiektu Connection odpowiadającego temu obiektowi Database. W DAO, obiekt Connection i odpowiadający mu obiekt Database są to dwa różne odwołania do tego samego obiektu, zawarte w zmiennych obiektowych. Właściwość Database obiektu Connection i właściwość Connection obiektu Database ułatwia zmianę połączeń ze źródłem danych ODBC nawiązanych poprzez aparat bazy danych Microsoft Jet dokonywaną w celu użycia ODBCDirect.


Database - właściwość (DAO)
Database - właściwość

Zwraca obiekt Database, który odpowiada danemu połączeniu (tylko obszary robocze ODBCDirect).

Wartości zwracane

Zwracaną wartością jest zmienną obiektową, która reprezentuje obiekt Database.

Użycie

W przypadku obiektu Connection właściwości Database należy używać w celu uzyskania odwołania do obiektu Database odpowiadającego temu obiektowi Connection. W DAO, obiekt Connection i odpowiadający mu obiekt Database są to dwa różne odwołania do tego samego obiektu, zawarte w zmiennych obiektowych. Właściwość Database obiektu Connection i właściwość Connection obiektu Database ułatwia zmianę połączeń ze źródłem danych ODBC nawiązanych poprzez aparat bazy danych Microsoft Jet dokonywaną w celu użycia ODBCDirect.


DefaultCursorDriver - właściwość (DAO)
DefaultCursorDriver - właściwość

Ustawia lub zwraca typ sterownika kursorów stosowanego przy połączeniu utworzonym za pomocą metody OpenConnection lub OpenDatabase (tylko obszary robocze ODBCDirect).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Long i może być równa jednej z następujących stałych:

Stała	Opis
dbUseDefaultCursor	(Wartość domyślna) Wykorzystywane są kursory po stronie serwera, jeśli serwer je obsługuje. W przeciwnym wypadku używana jest biblioteka kursorów ODBC.
dbUseODBCCursor	Zawsze wykorzystywana jest biblioteka kursorów ODBC. Ta opcja zwiększa wydajność dla niewielkich zestawów wynikowych, ale zmniejsza szybkość dla dużych zestawów wynikowych.
dbUseServerCursor	Zawsze wykorzystywane są kursory po stronie serwera. Dla większości skomplikowanych operacji ta opcja zwiększa wydajność, ale może być przyczyną zwiększenia obciążenia sieci.
dbUseClientBatchCursor	Zawsze wykorzystywana jest biblioteka kursorów grupowych klienta. Ta opcja jest wymagana dla aktualizacji grupowych.
dbUseNoCursor	Wszystkie kursory (czyli obiekty Recordset) otwierane są jako kursory typu progresywnego przeznaczone tylko do odczytu z wielkością zestawu wierszy równą 1. Taka operacja nazywana jest również   "kwerendą bez kursora".
Użycie

Wartość tej właściwości wpływa wyłącznie na te połączenia, które zostały nawiązane po jej ustawieniu. Zmiana wartości właściwości DefaultCursorDriver nie wpływa na już istniejące połączenia.


DefaultType - właściwość (DAO)
DefaultType - właściwość

Ustawia lub zwraca wartość, która określa, jaki typ obszaru roboczego (Microsoft Jet czy ODBCDirect) będzie użyty przez następny utworzony obiekt Workspace.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Long i może być równa jednej z następujących stałych:

Stała	Opis
dbUseJet	Tworzone są obiekty Workspace podłączone do aparatu bazy danych Microsoft Jet.
dbUseODBC	Tworzone są obiekty Workspace podłączone do źródła danych ODBC.
Użycie

Dla pojedynczego obiektu Workspace ustawienie to może być przesłonięte przez ustawienie argumentu typ metody CreateWorkspace.


Direction - właściwość (DAO)
Direction - właściwość

Ustawia lub zwraca wartość określającą, czy obiekt Parameter reprezentuje parametr wejściowy, wyjściowy, wejściowo-wyjściowy, czy też wartość zwracaną z procedury (tylko obszary robocze ODBCDirect).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Long i może być równa  jednej z następujących stałych:

Stała	Opis
dbParamInput	(Wartość domyślna) Przekazuje informację do procedury.
dbParamInputOutput	Przekazuje informację do procedury i z procedury.
dbParamOutput	Zwraca informację z procedury jako parametr wyjściowy instrukcji języka SQL.
dbParamReturnValue	Przekazuje wartość zwracaną z procedury.
Użycie

Właściwość Direction służy do określenia, czy parametr jest parametrem wejściowym, wyjściowym, wejściowo-wyjściowym, czy też zwraca wartość z procedury. Niektóre sterowniki ODBC nie dostarczają do instrukcji SELECT lub instrukcji wywołania procedury informacji o kierunkach parametrów. W tych przypadkach przed wykonaniem kwerendy konieczne jest ustawienie kierunku.

Na przykład, poniższa procedura zwraca wartość z przechowywanej w bazie danych procedury o nazwie "pobierz_prac":

{? = call pobierz_prac }

Wynikiem tego wywołania będzie jeden parametr — zwrócona wartość. Przed wykonaniem obiektu QueryDef należy ustawić kierunek tego parametru na dbParamOutput lub dbParamReturnValue.

Przed odczytaniem lub ustawieniem wartości parametrów lub wykonaniem obiektu QueryDef należy ustawić kierunek dla wszystkich parametrów z wyjątkiem parametrów o kierunku dbParamInput.

Dla wartości zwracanych należy używać stałej dbParamReturnValue, a jeśli sterownik lub serwer nie dopuszcza użycia tej opcji, zamiast niej należy używać stałej dbParamOutput.

Uwaga   Sterownik Microsoft SQL Server 6.0 automatycznie ustawia właściwość Direction dla wszystkich parametrów procedur. Nie wszystkie sterowniki ODBC mogą określić kierunek parametru kwerendy. W tych przypadkach przed wykonaniem kwerendy konieczne jest ustawienie tego kierunku.


FieldSize - właściwość (DAO)
FieldSize - właściwość

Ustawia lub zwraca liczbę bajtów przeznaczonych w bazie danych (a nie pamięci) dla obiektu Field typu Memo lub obiekt OLE znajdującego się w kolekcji Fields obiektu Recordset.

Wartości zwracane

Zwracana wartość jest typu Long i jest równa liczbie znaków (dla pól typu Memo) lub liczbie bajtów (dla pól typu Long Binary).

Użycie

Właściwości FieldSize razem z metodami AppendChunk i GetChunk można używać do wykonywania działań na dużych polach.

Ponieważ wielkość pola typu Memo lub Long Binary może przekraczać 64 KB, wartość zwracaną przez właściwość FieldSize należy przypisać do zmiennej o wielkości wystarczającej do przechowywania wartości typu Long.

Aby określić wielkość obiektu Field typu innego niż Memo i Long Binary, należy użyć właściwości Size.

Uwaga   Właściwość FieldSize w obszarze roboczym ODBCDirect jest niedostępna w następujących sytuacjach:

•	Jeśli serwer bazy danych lub sterownik ODBC nie obsługuje kursorów po stronie serwera.

•	Jeśli wykorzystywana jest biblioteka kursorów ODBC (to znaczy w sytuacji, kiedy właściwość DefaultCursorDriver jest ustawiona na wartość dbUseODBC lub na wartość dbUseDefault, jeśli serwer nie obsługuje kursorów po stronie serwera).

•	Jeśli stosowana jest kwerenda bez kursora (to znaczy właściwość DefaultCursorDriver jest ustawiona na wartość dbUseNoCursor).

Na przykład, Microsoft SQL Server w wersji 4.21 nie obsługuje kursorów po stronie serwera, w związku z czym właściwość FieldSize nie jest dostępna.


MaxRecords - właściwość (DAO)
MaxRecords - właściwość

Ustawia lub zwraca maksymalną liczbę rekordów, które mogą być zwrócone przez kwerendę.

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Long i reprezentuje liczbę rekordów, które mogą być zwrócone. Wartością domyślną  jest 0, co oznacza, że liczba zwracanych rekordów jest nie ograniczona.

Użycie

Kiedy do aplikacji zostanie zwrócona w obiekcie Recordset liczba rekordów równa wartości określonej we właściwości MaxRecords, zwracanie rekordów przez procesor kwerendy zostanie przerwane, nawet jeśli istnieją jeszcze rekordy kwalifikujące się do umieszczenia w obiekcie Recordset. Ta właściwość jest użyteczna w sytuacji, kiedy ograniczone zasoby po stronie klienta uniemożliwiają zarządzanie dużą liczbą rekordów.


OriginalValue - właściwość (DAO)
OriginalValue - właściwość

Zwraca tę wartość obiektu Field w bazie danych, która była ustawiona przed rozpoczęciem wykonywania ostatniej aktualizacji grupowej (tylko obszary robocze ODBCDirect).

Wartości zwracane

Zwracana wartość jest wyrażeniem wariantowym.

Użycie

Podczas optymistycznej aktualizacji grupowej może wystąpić kolizja, jeśli w czasie pomiędzy odczytem danych z bazy danych i próbą ich aktualizacji przez jednego klienta inny klient modyfikuje to samo pole w tym samym rekordzie. Właściwość OriginalValue zawiera wartość, która była przechowywana w polu przed rozpoczęciem ostatniej grupowej operacji Update. Jeśli ta wartość nie jest równa bieżącej wartości w bazie danych, wówczas przy próbie zapisu do bazy danych podejmowanej przez grupową operację Update wystąpi kolizja. W tym przypadku nowa wartość w bazie danych będzie dostępna poprzez właściwość VisibleValue.


Prepare - właściwość (DAO)
Prepare - właściwość

Ustawia lub zwraca wartość określającą, czy przed wykonaniem kwerenda ma być przygotowana na serwerze za pomocą funkcji API ODBC o nazwie SQLPrepare jako procedura tymczasowo przechowywana w bazie danych, czy też ma być od razu wykonana za pomocą funkcji API ODBC o nazwie SQLExecDirect (tylko obszary robocze ODBCDirect).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Long i może być równa jednej z następujących stałych:

Stała	Opis
dbQPrepare	(Wartość domyślna) Instrukcja zostanie przygotowana (czyli zostanie wywołana funkcja API ODBC o nazwie SQLPrepare).
dbQUnprepare	Instrukcja nie zostanie przygotowana (czyli zostanie wywołana funkcja API ODBC o nazwie SQLExecDirect).
Użycie

Właściwości Prepare należy używać w celu określenia, czy serwer przed wykonaniem kwerendy ma utworzyć z niej procedurę tymczasowo przechowywaną w bazie danych, czy też ma wykonać kwerendę bezpośrednio. Domyślnie, właściwość Prepare jest ustawiona na wartość dbQPrepare. Jednak można wstrzymać przygotowywanie kwerend, ustawiając tę właściwość na wartość dbQUnprepare. W tym wypadku kwerenda zostanie wykonana za pomocą funkcji API SQLExecDirect.

Utworzenie przechowywanej procedury może spowolnić pierwsze wykonanie operacji, ale zwiększa wydajność wszystkich następnych wywołań kwerendy. Niektóre kwerendy nie mogą jednak być wykonywane w formie przechowywanych procedur. W tym przypadku należy ustawić właściwość Prepare na wartość dbQUnprepare.

Jeśli właściwość Prepare jest ustawiona na wartość dbQPrepare, to ustawienie to można przesłonić podczas wykonania kwerendy, ustawiając argument opcje metody Execute na wartość dbExecDirect.

Uwaga   Funkcja API ODBC o nazwie SQLPrepare jest wywoływana natychmiast po ustawieniu właściwości SQL DAO. Dlatego też, jeśli chcemy zwiększyć wydajność za pomocą opcji dbQUnprepare, właściwość Prepare należy ustawić przed ustawieniem właściwości SQL.


RecordStatus - właściwość (DAO)
RecordStatus - właściwość

Zwraca wartość oznaczającą status operacji aktualizacji bieżącego rekordu, jeśli ta operacja jest częścią aktualizacji grupowej (tylko obszary robocze ODBCDirect).

Wartości zwracane

Zwracana wartość jest typu Long i może być równa jednej z następujących stałych:

Stała	Opis
dbRecordUnmodified	(Wartość domyślna) Rekord nie był modyfikowany lub jego modyfikacja została zakończona pomyślnie.
dbRecordModified	Rekord był modyfikowany, ale nie został uaktualniony w bazie danych.
dbRecordNew	Rekord był dodany za pomocą metody AddNew, ale nie został jeszcze umieszczony w bazie danych.
dbRecordDeleted	Rekord usunięto, ale nie został jeszcze usunięty z bazy danych.
dbRecordDBDeleted	Rekord został usunięty lokalnie i został usunięty z bazy danych.
Użycie

Właściwość RecordStatus określa, czy i w jaki sposób bieżący rekord będzie brał udział w następnej optymistycznej operacji aktualizacji grupowej.

Jeśli rekord zostanie zmieniony przez użytkownika, właściwość RecordStatus dla tego rekordu zostanie automatycznie ustawiona na wartość dbRecordModified. Podobnie, jeśli rekord zostanie dodany lub usunięty, właściwość RecordStatus zostanie ustawiona na odpowiednią wartość. W oparciu o właściwość RecordStatus rekordu, podczas wykonywania metody Update w trybie grupowym, zostanie przez DAO wysłane do zdalnego serwera żądanie wykonania odpowiedniej operacji dla każdego rekordu.


StillExecuting - właściwość (DAO)
StillExecuting - właściwość

Wskazuje, czy operacja asynchroniczna (to znaczy metoda wywołana z opcją dbRunAsync) zakończyła działanie, czy też nie (tylko obszary robocze ODBCDirect).

Ustawienia i wartości zwracane

Zwracana wartość jest typu Boolean i ma wartość True, jeśli kwerenda jest jeszcze wykonywana, a False, jeśli wykonanie kwerendy zostało zakończone.

Użycie

Właściwość StillExecuting służy do określenia, czy została zakończona ostatnio wywołana metoda asynchroniczna Execute, MoveLast, OpenConnection, or OpenRecordset (czyli metoda wykonana z opcją dbRunAsync). Dopóki właściwość StillExecuting jest ustawiona na wartość True, żaden zwrócony obiekt nie jest dostępny.

Poniższa tabela pokazuje, które metody są brane pod uwagę przy określaniu właściwości StillExecuting dla konkretnego typu obiektu.

Jeśli właściwość StillExecuting jest określana dla obiektu	Pod uwagę brana jest metoda asynchroniczna
Connection	Execute lub OpenConnection
QueryDef	Execute
Recordset	MoveLast lub OpenRecordset
Jeśli właściwość StillExecuting obiektu Connection lub Recordset ma wartość False, można odwoływać się do tego obiektu Recordset lub Connection. Jeśli do zakończenia przetwarzania obiektu Recordset została użyta metoda NextRecordset, na czas pobierania kolejnego zestawu wynikowego właściwość StillExecuting jest ustawiana na wartość True.

W celu przerwania wykonywania zadania należy użyć metody  Cancel.


UpdateOptions - właściwość (DAO)
UpdateOptions - właściwość

Ustawia lub zwraca wartość określającą dla każdego rekordu sposób konstruowania klauzuli WHERE podczas wykonywania aktualizacji grupowej oraz określającą, czy dla aktualizacji grupowej będzie zastosowana instrukcja UPDATE, czy też DELETE, po której wystąpi instrukcja INSERT (tylko obszary robocze ODBCDirect).

Ustawienia i wartości zwracane

Ustawiana lub zwracana wartość jest typu Long i może być równa jednej z następujących wartości:

Stała	Opis
dbCriteriaKey	(Wartość domyślna) W klauzuli WHERE występują jedynie kolumny (lub kolumna) klucza.
dbCriteriaModValues	W klauzuli WHERE występują kolumny (lub kolumna) klucza oraz wszystkie aktualizowane kolumny.
dbCriteriaAllCols	W klauzuli WHERE występują kolumny (lub kolumna) klucza oraz wszystkie kolumny.
dbCriteriaTimeStamp	Wykorzystywana jest kolumna znacznika czasowego (timestamp), jeśli jest dostępna. (Jeśli w zestawie wynikowym nie ma kolumny znacznika czasowego, wystąpi błąd czasu wykonania).
dbCriteriaDeleteInsert	Dla każdego modyfikowanego wiersza zostanie użyty ciąg instrukcji DELETE i INSERT
dbCriteriaUpdate	(Warotść domyślna) Dla każdego modyfikowanego wiersza zostanie użyta instrukcja UPDATE.
Użycie

Podczas wykonywania operacji Update w trybie grupowym, w celu wykonania żądanych zmian, DAO i biblioteka kursorów grupowych klienta tworzą serię instrukcji UPDATE języka SQL. Klauzula WHERE języka SQL jest tworzona dla każdej operacji aktualizacji w celu wydzielenia rekordów, które przez właściwość RecordStatus są oznaczone jako zmienione. Ponieważ na niektórych zdalnych serwerach wykorzystywane są wyzwalacze lub inne sposoby wymuszenia integralności referencyjnej, istotne może być ograniczenie aktualizowanych pól wyłącznie do tych, które zostały zmienione. W tym celu należy ustawić właściwość UpdateOptions na wartość równą jednej ze stałych: dbCriteriaKey, dbCriteriaModValues, dbCriteriaAllCols lub dbCriteriaTimeStamp. W ten sposób ilość wykonywanego kodu programu wyzwalaczy zostanie ograniczona do absolutnego minimum. W rezultacie wykonanie operacji aktualizacji jest szybsze i minimalizowana jest możliwość wystąpienia błędów.

Aby określić, czy dla każdej aktualizacji przy wysyłaniu grupy modyfikacji do serwera ma być użyty ciąg instrukcji DELETE i INSERT czy instrukcja UPDATE języka SQL można złączyć stałe dbCriteriaDeleteInsert lub dbCriteriaUpdate. W pierwszym przypadku do przeprowadzenia aktualizacji rekordu wymagane są dwie oddzielne operacje. W niektórych sytuacjach, w szczególności, jeśli zdalny system implementuje wyzwalacze dla instrukcji DELETE, INSERT i UPDATE, odpowiedni dobór wartości właściwości UpdateOptions może znacząco zwiększyć wydajność systemu.

Jeśli nie zostanie określona żadna stała, zostaną użyte wartości dbCriteriaUpdate i dbCriteriaKey.

Ponieważ nowo dodawane rekordy zawsze generują instrukcje INSERT, a usuwane rekordy instrukcje DELETE, ta właściwość służy jedynie do określenia, w jaki sposób biblioteka kursorów aktualizuje rekordy modyfikowane.


VisibleValue - właściwość (DAO)
VisibleValue - właściwość

Zwraca wartość, która aktualnie znajduje się w bazie danych i która w konflikcie powstałym w trakcie aktualizacji grupowej została określona jako nowsza od wartości właściwości OriginalValue (tylko obszary robocze ODBCDirect).

Wartości zwracane

Zwracaną wartością jest wyrażenie wariantowe.

Użycie

Ta właściwość zawiera wartość pola, która znajduje się aktualnie w bazie danych na serwerze. Podczas optymistycznej aktualizacji grupowej może wystąpić kolizja, jeśli w czasie między odczytem danych z bazy danych a próbą ich aktualizacji przez jednego klienta drugi klient modyfikuje to samo pole w tym samym rekordzie. Wartość wprowadzona przez drugiego klienta będzie dostępna za pośrednictwem tej właściwości.


Stałe dostępne w systemie Data Access Objects (DAO)

W systemie Data Access Objects (DAO) dostępne są wbudowane stałe, które ułatwiają korzystanie z metod lub właściwości. Wszystkie te stałe mają nazwy zaczynające się od liter db, a ich opisy są zawarte w opisach metod lub właściwości, których dotyczą.

Legenda:

Tylko do odczytu

Do odczytu i zapisu

Stałe dla właściwości AllPermissions (wszystkie [image])

Dla dowolnego obiektu Container lub Document:

Stała	Opis
dbSecReadDef	Umożliwia użytkownikowi odczytanie definicji tabeli, w tym również informacji o kolumnach i indeksach.
dbSecWriteDef	Umożliwia użytkownikowi zmianę lub usunięcie definicji tabeli, w tym również informacji o kolumnach i indeksach.
dbSecRetrieveData	Umożliwia użytkownikowi pobranie danych z obiektu Document.
dbSecInsertData	Umożliwia użytkownikowi dodawanie rekordów.
dbSecReplaceData	Umożliwia użytkownikowi modyfikację rekordów.
dbSecDeleteData	Umożliwia użytkownikowi usuwanie rekordów.
Kontener Databases lub dowolny obiekt Document z kolekcji Documents może zawierać następujące stałe:

Stała	Opis
dbSecDeleteData	Umożliwia użytkownikowi usuwanie rekordów.
dbSecDBAdmin	Umożliwia użytkownikowi replikować bazy danych i zmianę hasła dostępu do bazy danych.
dbSecDBCreate	Umożliwia użytkownikowi tworzenie nowych baz danych. To ustawienie jest poprawne wyłącznie dla kontenera Databases znajdującego się w pliku informacji o grupie roboczej (System.mdw).
dbSecDBExclusive	Umożliwia użytkownikowi wyłączny dostęp do bazy danych.
dbSecDBOpen	Umożliwia użytkownikowi otwarcie bazy danych.
Stałe dla właściwości Attributes

Właściwość Attributes dowolnego obiektu Field może zawierać następujące stałe:

Stała	Opis
dbFixedField	Stały rozmiar pola (domyślny dla pól numerycznych)
dbVariableField	Zmienny rozmiar pola (wyłącznie dla pól typu Text)
dbAutoIncrField	Wartość pola dla nowego rekordu jest zwiększana do unikatowej liczby całkowitej typu Long (w obszarach roboczych Microsoft Jet stałą ta jest dostępna wyłącznie w obiektach TableDef otwieranych z plików .mdb).
dbUpdatableField	Pole może być uaktualniane.
dbDescending	Pole jest sortowane w porządku malejącym (wyłącznie w obszarach roboczych Microsoft Jet).
dbHyperlinkField	Pole zawiera informacje o łączu typu hiperlink (wyłącznie dla pól typu Memo w obszarach roboczych Microsoft Jet).
dbSystemField	Pole jest replikowalne (wyłącznie dla obiektów TableDef w bazach danych Microsoft Jet).
Właściwość Attributes dowolnego obiektu typu Relation może zawierać następujące stałe:

Stała	Opis
dbRelationUnique	Związek jeden-do-jeden
dbRelationDontEnforce	Nie jest wymuszany związek (brak integralności referencyjnej).
dbRelationInherited	W bazie danych zawierającej dwie tabele połączone  istnieje związek.
dbRelationUpdateCascade	Kaskadowe aktualizowanie
dbRelationDeleteCascade	Kaskadowe usuwanie
Właściwość Attributes dowolnego obiektu TableDef może zawierać następujące stałe:

Stała	Opis
dbAttachExclusive	Otwiera połączoną tabelę aparatu bazy danych Microsoft Jet do wyłącznego użytku.
dbAttachSavePWD	Zachowuje identyfikator oraz hasło użytkownika dla połączonej tabeli zdalnej.
dbSystemObject	Tabela systemowa
dbHiddenObject	Tabela ukryta (do tymczasowego użytku)
dbAttachedTable	Połączona tabela nie należąca do bazy danych ODBC
dbAttachedODBC	Połączona tabela należąca do bazy danych ODBC
Stałe dla właściwości CollatingOrder (wszystkie [image])

Stała	Opis
dbSortArabic	Kolejność porządkowania właściwa dla języka arabskiego
dbSortChineseSimplified	Kolejność porządkowania właściwa dla uproszczonego języka chińskiego
dbSortChineseTraditional	Kolejność porządkowania właściwa dla tradycyjnego języka chińskiego
dbSortCyrillic	Kolejność porządkowania właściwa dla języka rosyjskiego
dbSortCzech	Kolejność porządkowania właściwa dla języka czeskiego
dbSortDutch	Kolejność porządkowania dla właściwa języka holenderskiego
dbSortGeneral	Kolejność porządkowania właściwa dla języka angielskiego, niemieckiego, francuskiego i portugalskiego
dbSortGreek	Kolejność porządkowania właściwa dla języka greckiego
dbSortHebrew	Kolejność porządkowania właściwa dla języka hebrajskiego
dbSortHungarian	Kolejność porządkowania właściwa dla języka węgierskiego
dbSortIcelandic	Kolejność porządkowania właściwa dla języka islandzkiego
dbSortJapanese	Kolejność porządkowania właściwa dla języka japońskiego
dbSortKorean	Kolejność porządkowania właściwa dla języka koreańskiego
dbSortNeutral	Neutralna kolejność porządkowania
dbSortNorw	Kolejność porządkowania właściwa dla języka norweskiego i duńskiego
dbSortPDXIntl	Międzynarodowa kolejność porządkowania stosowana w bazie danych Paradox
dbSortPDXNor	Kolejność porządkowania właściwa dla języka norweskiego i duńskiego stosowana w bazie danych Paradox
dbSortPDXSwe	Kolejność porządkowania właściwa dla języka szwedzkiego i fińskiego stosowana w bazie danych Paradox
dbSortPolish	Kolejność porządkowania właściwa dla języka polskiego
dbSortSlovenian	Kolejność porządkowania właściwa dla języka słoweńskiego
dbSortSpanish	Kolejność porządkowania właściwa dla języka hiszpańskiego
dbSortSwedFin	Kolejność porządkowania właściwa dla języka szwedzkiego i fińskiego
dbSortThai	Kolejność porządkowania właściwa dla języka tajlandzkiego
dbSortTurkish	Kolejność porządkowania właściwa dla języka tureckiego
dbSortUndefined	Niezdefiniowana lub nieznana kolejność porządkowania
Stałe dla właściwości DefaultCursorDriver (wszystkie [image])

Stała	Opis
dbUseDefaultCursor	(Wartość domyślna) Wykorzystywane są kursory serwera, jeśli serwer je udostępnia. W przeciwnym przypadku stosowana jest biblioteka kursorów ODBC.
dbUseODBCCursor	Zawsze stosowana jest biblioteka kursorów ODBC. Ta opcja zwiększa prędkość przetwarzania dla małych zestawów wynikowych, lecz ze wzrostem wielkości zestawów wynikowych prędkość przetwarzania szybko maleje.
dbUseServerCursor	Zawsze wykorzystywane są kursory po stronie serwera. Dla większości dużych operacji ta opcja zapewnia lepszą wydajność, lecz powoduje generację dodatkowego ruchu w sieci.
dbUseClientBatchCursor	Zawsze wykorzystywana jest biblioteka kursorów FoxPro. Ta opcja jest wymagana podczas aktualizacji grupowej.
dbUseNoCursor	Wszystkie kursory (czyli obiekty Recordset) są otwierane jako progresywne, tylko do odczytu, o wielkości równej 1 wiersz. Sposób ten jest również znany pod nazwą “kwerendy bez kursora”.
Stałe dla właściwości Direction (wszystkie [image])

Stała	Opis
dbParamInput	(Wartość domyślna) Przekazuje informacje do procedury.
dbParamInputOutput	Przekazuje informacje do i z procedury.
dbParamOutput	Zwraca informacje z procedury jako parametr wyjściowy SQL.
dbParamReturnValue	Przekazuje wartość zwróconą przez procedurę.
Stałe dla właściwości EditMode (wszystkie [image])

Stała	Opis
dbEditNone	Nie jest przeprowadzana edycja.
dbEditInProgress	Została wywołana metoda Edit.
dbEditAdd	Została wywołana metoda AddNew.
Stałe dla właściwości Permissions (wszystkie [image])

Właściwość Permissions dowolnego obiektu Container może zawierać następujące stałe:

Stała	Opis
dbSecNoAccess	Blokuje dostęp użytkownika do obiektu.
dbSecFullAccess	Umożliwia użytkownikowi nieograniczony dostęp do obiektu
dbSecDelete	Umożliwia użytkownikowi usunięcie obiektu.
dbSecReadSec	Umożliwia użytkownikowi odczytanie informacji dotyczących zabezpieczenia obiektu.
dbSecWriteSec	Umożliwia użytkownikowi zmianę uprawnień dostępu.
dbSecWriteOwner	Umożliwia użytkownikowi zmianę ustawienia właściwości Owner.
Właściwość Permissions dowolnego obiektu Container bazy danych może zawierać następujące stałe (wszystkie są [image]):

Stała	Opis
dbSecDBAdmin	Nadaje użytkownikowi uprawnienie do uczynienia bazy danych replikowalną i zmiany hasła dostępu do bazy danych.
dbSecDBCreate	Umożliwia użytkownikowi tworzenie nowych baz danych (stała dopuszczalna wyłącznie dla obiektu Container w systemowej bazie danych).
dbSecDBOpen	Umożliwia użytkownikowi otwarcie bazy danych.
dbSecDBExclusive	Umożliwia użytkownikowi uzyskanie dostępu wyłącznego do bazy danych.
Właściwość Permissions dowolnego obiektu Container tabeli może zawierać następujące stałe (wszystkie są [image]):

Stała	Opis
dbSecCreate	Umożliwia użytkownikowi tworzenie nowych tabel (stała dopuszczalna wyłącznie dla obiektu Container reprezentującego tabelę oraz dla obiektu Container reprezentującego bazę danych w systemowej bazie danych).
dbSecReadDef	Umożliwia użytkownikowi odczytywanie definicji tabeli, w tym również informacji o kolumnach i indeksach.
dbSecWriteDef	Umożliwia użytkownikowi zmianę lub usunięcie definicji tabeli, w tym również informacji o kolumnach i indeksach.
dbSecRetrieveData	Umożliwia użytkownikowi pobranie danych z dokumentu.
dbSecInsertData	Umożliwia użytkownikowi dodawanie rekordów.
dbSecReplaceData	Umożliwia użytkownikowi modyfikację rekordów.
dbSecDeleteData	Umożliwia użytkownikowi usuwanie rekordów.
Właściwość Permissions dowolnego obiektu Document może zawierać następujące stałe (wszystkie [image]):

Stała	Opis
dbSecCreate	Umożliwia użytkownikowi tworzenie nowych tablic (stała dopuszczalna wyłącznie dla obiektu Container reprezentującego tabelę).
dbSecDBCreate	Umożliwia użytkownikowi tworzenie nowych baz danych (stała dopuszczalna wyłącznie dla obiektu Container reprezentującego bazę danych w systemowej bazie danych).
dbSecDBOpen	Umożliwia użytkownikowi otwarcie bazy danych.
dbSecDBExclusive	Umożliwia użytkownikowi uzyskanie dostępu wyłącznego do bazy danych.
dbSecDelete	Umożliwia użytkownikowi usunięcie obiektu.
dbSecDeleteData	Umożliwia użytkownikowi usuwanie rekordów.
dbSecFullAccess	Umożliwia użytkownikowi nieograniczony dostęp do obiektu.
dbSecInsertData	Umożliwia użytkownikowi dodawanie rekordów.
dbSecReadDef	Umożliwia użytkownikowi odczytywanie definicji tabeli, w tym również informacji o kolumnach i indeksach.
dbSecReadSec	Umożliwia użytkownikowi odczytanie informacji dotyczących zabezpieczenia obiektu.
dbSecReplaceData	Umożliwia użytkownikowi modyfikację rekordów.
dbSecRetrieveData	Umożliwia użytkownikowi pobieranie danych z dokumentu.
dbSecWriteDef	Umożliwia użytkownikowi zmianę lub usunięcie definicji tabeli, w tym również informacji o kolumnach i indeksach.
dbSecWriteSec	Umożliwia użytkownikowi zmianę uprawnień dostępu.
dbSecWriteOwner	Umożliwia użytkownikowi zmianę ustawienia właściwości Owner.
Stałe dla właściwości Prepare (wszystkie [image])

Stała	Opis
dbQPrepare	(Wartość domyślna) Instrukcja jest przygotowywana (wywołana jest funkcja API ODBC o nazwie SQLPrepare).
dbQUnprepare	Instrukcja nie jest przygotowywana (wywołana jest funkcja API ODBC o nazwie SQLExecDirect).
Stałe dla właściwości RecordStatus (wszystkie [image])

Stała	Opis
dbDBDeleted	Rekord został usunięty lokalnie i z bazy danych.
dbDeleted	Rekord został usunięty, lecz nie jest jeszcze usunięty z bazy danych.
dbRecordModified	Rekord został zmodyfikowany, lecz nie został uaktualniony w bazie danych.
dbRecordNew	Rekord został wstawiony za pomocą metody AddNew, lecz nie został jeszcze wstawiony do bazy danych.
dbRecordUnmodified	(Wartość domyślna) Rekord został zmodyfikowany lub jego uaktualnianie uaktualnienie zakończyło się pomyślnie.
Stałe dla właściwości Type

Właściwość Type każdego obiektu Field, Parameter lub Property może zawierać następujące stałe (wszystkie są [image]):

Stała	Opis
dbBigInt	Dane typu Big Integer (tylko ODBCDirect)
dbBinary	Dane typu Binary
dbBoolean	Dane typu Boolean (True/False)
dbByte	Dane typu Byte (8-bitowe)
dbChar	Dane typu Character (tylko ODBCDirect)
dbCurrency	Dane typu Currency
dbDate	Dane typu Date
dbDecimal	Dane typu Decimal (tylko ODBCDirect)
dbDouble	Dane zmiennoprzecinkowe podwójnej precyzji
dbFloat	Dane zmiennoprzecinkowe(tylko ODBCDirect)
dbGUID	Dane typu GUID
dbInteger	Dane typu Integer
dbLong	Dane typu Long Integer
dbLongBinary	Dane typu Binary (mapy bitowe)
dbMemo	Dane typu Memo (rozszerzony tekst)
dbNumeric	Dane typu Numeric (tylko ODBCDirect)
dbSingle	Dane zmiennoprzecinkowe pojedynczej precyzji
dbText	Dane typu Text (zmienna szerokość)
dbTime	Dane w formacie godziny (tylko ODBCDirect)
dbTimeStamp	Dane w formacie godziny i daty (tylko ODBCDirect)
dbVarBinary	Dane typu Variable Binary (tylko ODBCDirect)
Właściwość Type każdego obiektu QueryDef może zawierać następujące stałe (wszystkie są [image]):

Stała	Opis
dbQAction	Kwerenda funkcjonalna
dbQAppend	Kwerenda dołączająca
dbQCompound	Kwerenda złożona (tylko obszary robocze ODBCDirect)
dbQCrosstab	Kwerenda krzyżowa
dbQDDL	Kwerenda definiująca dane
dbQDelete	Kwerenda usuwająca
dbQMakeTable	Kwerenda tworząca tabelę
dbQProcedure	Procedura SQL wykonująca przechowywaną procedurę (tylko obszary robocze ODBCDirect)
dbQSelect	Kwerenda wybierająca
dbQSetOperation	Kwerenda działająca na zbiorach
dbQSPTBulk	Kwerenda operacji o dużym rozmiarze
dbQSQLPassThrough	Kwerenda przekazująca SQL
dbQUpdate	Kwerenda aktualizująca
Właściwość Type dowolnego obiektu Recordset może zawierać następujące stałe (wszystkie [image]):

Stała	Opis
dbOpenDynamic	Otwiera obiekt Recordset typu zestaw dynamiczny (tylko obszary robocze ODBCDirect)
dbOpenDynaset	Otwiera obiekt Recordset typu zestaw dynamiczny
dbOpenForwardOnly	Otwiera obiekt Recordset typu progresywnegoo
dbOpenSnapshot	Otwiera obiekt Recordset typu utrwalonego
dbOpenTable	Otwiera obiekt Recordset typu tabela (tylko obszary robocze Microsoft Jet).
Stałe dla właściwości UpdateOptions (wszystkie [image])

Stała	Opis
dbCriteriaKey	(Wartość domyślna) W klauzuli WHERE korzysta jedynie z kolumny klucza.
dbCriteriaModValues	W klauzuli WHERE korzysta z kolumny lub (kolumn) klucza i wszystkich uaktualnianych kolumn.
dbCriteriaAllCols	W klauzuli WHERE korzysta z kolumny lub (kolumn) klucza i wszystkich kolumn.
dbCriteriaTimeStamp	Korzysta jedynie z kolumny znacznika czasowego (timestamp), jeśli jest dostępna (powoduje powstanie błąd wykonania, jeśli w zestawie wynikowym nie ma kolumny znacznika czasu).
dbCriteriaDeleteInsert	Używa pary instrukcji DELETE i INSERT w stosunku do każdego modyfikowanego wiersza.
dbCriteriaUpdate	(Wartość domyślna) Używa instrukcji UPDATE do każdego zmodyfikowanego wiersza.
Stałe dla argumentu "region" CreateDatabase i CompactDatabase (wszystkie [image])

Stała	Opis
dbLangGeneral	angielski, niemiecki, francuski, portugalski, włoski i współczesny hiszpański
dbLangArabic	arabski
dbLangChineseSimplified	uproszczony chiński
dbLangChineseTraditional	tradycyjny chiński
dbLangCyrillic	rosyjski
dbLangCzech	czeski
dbLangDutch	holenderski
dbLangGreek	grecki
dbLangHebrew	hebrajski
dbLangHungarian	węgierski
dbLangIcelandic	islandzki
dbLangJapanese	japoński
dbLangKorean	koreański
dbLangNordic	nordycki
dbLangNorwdan	norweski i duński
dbLangPolish	polski
dbLangSlovenian	słoweński
dbLangSpanish	hiszpański
dbLangSwedfin	szwedzki i fiński
dbLangThai	tajlandzki
dbLangTurkish	turecki
Stałe dla argumentu "opcje" metody CompactDatabase (wszystkie [image])

Stała	Opis
dbDecrypt	Deszyfruje bazę danych podczas de fragmentacji
dbEncrypt	Szyfruje bazę danych
dbVersion10	Aparat bazy danych Microsoft Jet wersja 1.0
dbVersion11	Aparat bazy danych Microsoft Jet wersja 1.1
dbVersion20	Aparat bazy danych Microsoft Jet wersja 2.0
dbVersion30	Aparat bazy danych Microsoft Jet wersja 3.0
Stałe dla argumentu "opcje" metody CreateDatabase (wszystkie [image])

Stała	Opis
dbEncrypt	Szyfruje bazę danych
dbVersion10	Aparat bazy danych Microsoft Jet wersja 1.0
dbVersion11	Aparat bazy danych Microsoft Jet wersja 1.1
dbVersion20	Aparat bazy danych Microsoft Jet wersja 2.0
dbVersion30	Aparat bazy danych Microsoft Jet wersja 3.0
Stałe argumentu "typ" metody CreateWorkspace

Dla właściwości Type dowolnego obiektu Workspace i właściwości DefaultType obiektu DBEngine można używać następujących stałych: (wszystkie [image])

Stała	Opis
dbUseODBC	Następny utworzony obszar roboczy będzie korzystać z ODBCDirect.
dbUseJet	Następny utworzony obszar roboczy będzie korzystać z aparatu bazy danych Microsoft Jet.
Stałe dla argumentu "opcje" metody Execute (wszystkie [image])

Stała	Opis
dbDenyWrite	Odmawia zapisu innym użytkownikom (tylko obszary robocze Microsoft Jet).
dbInconsistent	Dopuszcza niespójne aktualizacje (tylko obszary robocze Microsoft Jet).
dbConsistent	Dopuszcza spójne aktualizacje (tylko obszary robocze Microsoft Jet).
dbSQLPassThrough	Kwerenda przekazująca SQL. Powoduje przekazanie instrukcji języka SQL do bazy danych ODBC w celu przetwarzania (tylko obszary robocze Microsoft Jet).
dbFailOnError	Wycofuje uaktualnienia w przypadku wystąpienia błędu (tylko obszary robocze Microsoft Jet).
dbSeeChanges	Generuje błąd wykonania, jeśli inny użytkownik zmienia dane aktualnie poddawane edycji tylko obszary robocze Microsoft Jet).
dbRunAsync	Wykonuje kwerendę asynchronicznie (tylko obszary robocze ODBCDirect).
dbExecDirect	Wykonuje kwerendę bez uprzedniego wywołania funkcji SQLPrepare systemu ODBC (tylko obszary robocze ODBCDirect).
Stała dla nieobowiązkowego argumentu metody Idle ( [image])

Stała	Opis
dbRefreshCache	Wymusza realizację zbuforowanych operacji zapisu na dysk i odświeża pamięć zawartością bieżących plików dyskowych.
Stałe dla nieobowiązkowego argumentu metody MakeReplica (wszystkie [image])

Stała	Opis
dbRepMakePartial	Tworzy częściową replikę.
dbRepMakeReadOnly	Ustawia replikowalne elementy nowej bazy danych w tryb tylko do odczytu.
Stałe dla argumentu "opcje" metody OpenConnection i OpenDatabase (wszystkie [image])

Stała	Opis
dbDriverNoPrompt	Menedżer sterowników ODBC używa ciągu połączenia przekazanego w argumencie połącz. Jeśli nie dostarczono wystarczających informacji, zwracany jest błąd przechwytywalny.
dbDriverPrompt	Menedżer sterowników wyświetla okno dialogowe ODBC źródła danych. Ciąg połączenia używany do uzyskania połączenia składa się z nazwy źródła danych (data source name, DSN) wybranego i uzupełnionego przez użytkownika za pośrednictwem okien dialogowych.
dbDriverComplete	Jeśli dostarczony ciąg połączenia zawiera słowo kluczowe DSN, menedżer sterowników używa do połączenia podanego ciągu; w przeciwnym razie zachowuje się tak, jak w przypadku gdy określona jest stała dbDriverPrompt.
dbDriverCompleteRequired	(Wartość domyślna) Zachowanie takie, jak w przypadku stałej dbDriverComplete z wyjątkiem tego, że sterownik wyłącza formaty dotyczące informacji, które nie są niezbędne do uzyskania połączenia.
Stałe dla argumentu "typ" metody OpenRecordset (wszystkie [image])

Stała	Opis
dbOpenDynamic	Otwiera obiekt Recordset typu dynamicznego (tylko obszary robocze ODBCDirect)
dbOpenDynaset	Otwiera obiekt Recordset typu zestaw dynamiczny
dbOpenForwardOnly	Otwiera obiekt Recordset typu progresywnego
dbOpenSnapshot	Otwiera obiekt Recordset typu utrwalonego
dbOpenTable	Otwiera obiekt Recordset typu tabela (tylko obszary robocze Microsoft Jet)
Stałe argumentu "blokada" metody OpenRecordset (wszystkie [image])

Stała	Opis
dbPessimistic	Współbieżność pesymistyczna. Kursor używa najniższego poziomu blokowania wystarczającego do zapewnienia aktualizacji rekordu.
dbReadOnly	Kursor jest przeznaczony wyłącznie do odczytu. Aktualizacja jest niedozwolona.
dbOptimistic	Współbieżność optymistyczna bazująca na identyfikatorze rekordu. Kursor porównuje identyfikatory starego i nowego rekordu w celu określenia, czy od ostatniego dostępu do rekordu nastąpiły w nim zmiany.
dbOptimisticValue	Współbieżność optymistyczna bazująca na wartości rekordu. Kursor porównuje wartości w nowym i starym rekordzie w celu określenia, czy od ostatniego dostępu do rekordu nastąpiły w nim zmiany (tylko obszary robocze ODBCDirect).
dbOptimisticBatch	Umożliwia aktualizację grupową (tylko obszar roboczy ODBCDirect).
Stałe dla argumentu "opcje" metody OpenRecordset (wszystkie [image])

Stała	Opis
dbDenyWrite	Uniemożliwia innym użytkownikom dokonywanie zmian w rekordach obiektu Recordset (tylko obszary robocze Microsoft Jet).
dbDenyRead	Uniemożliwia innym użytkownikom odczytywanie rekordów z obiektu Recordset (wyłącznie typu tabela obszarach roboczych Microsoft Jet).
dbReadOnly	Otwiera obiekt Recordset w trybie tylko do odczytu (tylko obszary robocze Microsoft Jet).
dbAppendOnly	Umożliwia użytkownikowi dodanie nowych rekordów do dynamicznego zestawu rekordów, lecz uniemożliwia odczytywanie istniejących rekordów (wyłącznie w dynamicznych zestawach rekordów w obszarach roboczych Microsoft Jet).
dbInconsistent	Aktualizuje wszystkie pola w dynamicznych zestawach rekordów, nawet jeśli wpłynie to na rekordy (dotyczy wyłącznie dynamicznych zestawów rekordów i utrwalonych zestawów rekordów w obszarach roboczych Microsoft Jet).
dbConsistent	Aktualizuje wyłącznie te pola, które nie wpłyną na inne rekordy w dynamicznych zestawach rekordów (dotyczy wyłącznie dynamicznych zestawów rekordów i utrwalonych zestawów rekordów w obszarach roboczych Microsoft Jet).
dbSQLPassThrough	Przesyła instrukcję SQL do bazy danych ODBC (dotyczy wyłącznie dynamicznych zestawów rekordów i utrwalonych zestawów rekordów w obszarach roboczych Microsoft Jet).
dbForwardOnly	Tworzy progresywny, przewijany zestaw rekordów typu utrwalonego (dotyczy wyłącznie utrwalonych zestawów rekordów w obszarach roboczych Microsoft Jet).
dbSeeChanges	Generuje błąd wykonania, jeśli inny użytkownik zmienia dane aktualnie poddawane edycji (dotyczy wyłącznie dynamicznych zestawów rekordów w obszarach roboczych Microsoft Jet).
dbRunAsync	Wykonuje kwerendę asynchronicznie (tylko obszary robocze ODBCDirect).
dbExecDirect	Wykonuje kwerendę bez uprzedniego wywołania funkcji SQLPrepare systemu ODBC (tylko obszary robocze ODBCDirect).
Stałe dla parametru metody SetOption (wszystkie [image])

Stała	Opis
dbPageTimeout	Klucz PageTimeout
dbSharedAsyncDelay	Klucz SharedAsyncDelay
dbExclusiveAsyncDelay	Klucz ExclusiveAsyncDelay
dbLockRetry	Klucz LockRetry
dbUserCommitSync	Klucz UserCommitSync
dbImplicitCommitSync	Klucz ImplicitCommitSync
dbMaxBufferSize	Klucz MaxBufferSize
dbMaxLocksPerFile	Klucz MaxLocksPerFile
dbLockDelay	Klucz LockDelay
dbRecycleLVs	Klucz RecycleLVs
dbFlushTransactionTimeout	Klucz FlushTransactionTimeout
Stałe dla argumentu Exchange metody Synchronize (wszystkie [image])

Stała	Opis
dbRepExportChanges	Przesyła zmiany z bieżącej bazy danych do docelowej bazy danych.
dbRepImportChanges	Otrzymuje dane z docelowej bazy danych.
dbRepImpExpChanges	Przesyła i otrzymuje dane podczas wymiany dwukierunkowej.
dbRepSyncInternet	Wymienia dane między plikami połączonymi poprzez Internet.
Stałe dla argumentu "typ" metody Update (wszystkie [image])

Stała	Opis
dbUpdateRegular	(Wartość domyślna) Nie zapisane zmiany nie są buforowane i zostają natychmiast wysyłane na dysk.
dbUpdateBatch	Wszystkie nie zapisane zmiany przechowywane w buforze aktualizacji są niezwłocznie zapisywane na dysk.
dbUpdateCurrentRecord	Na dysk wysyłane są tylko te nie zapisane zmiany, które dotyczą bieżącego rekordu.
Stałe dla argumentu "typ" metody CancelUpdate (wszystkie [image])

Stałe	Opis
dbUpdateRegular	(Wartość domyślna) Bieżące zmiany nie są buforowane i są niezwłocznie zapisywane na dysk.
dbUpdateBatch	Bieżące zmiany znajdujące się w buforze aktualizacji są zapisywane na dysk.


Obiekt Container i kolekcja Containers - przykład (DAO/Microsoft Jet)
Obiekt Container i kolekcja Containers - przykład

W poniższym przykładzie wyliczane są elementy kolekcji Containers bazy danych Northwind oraz elementy kolekcji Properties każdego obiektu typu Container z tej kolekcji.

Sub ContainerObjectX()

Dim dbsNorthwind As Database

Dim ctrPętla As Container

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Wylicz elementy kolekcji Containers.

For Each ctrPętla In .Containers

Debug.Print "Właściwości pojemnika " & _

ctrPętla.Name

' Wylicz elementy kolekcji Properties dla

' każdego obiektu Container.

For Each prpPętla In ctrPętla.Properties

Debug.Print "    " & prpPętla.Name & _

" = " prpPętla

Next prpPętla

Next ctrPętla

.Close

End With

End Sub


Obiekt DBEngine - przykład (DAO)
Obiekt DBEngine - przykład

W poniższym przykładzie wyliczane są elementy kolekcji obiektu DBEngine. Dalsze przykłady można znaleźć w opisach metod i właściwości obiektu DBEngine.

Sub DBEngineX()

Dim wrkPętla As Workspace

Dim prpPętla As Property

With DBEngine

Debug.Print "Właściwości DBEngine"

' Wylicz elementy kolekcji Properties obiektu

' DBEngine, wykrywając właściwości, których

' wartości w tym kontekście są niepoprawne.

For Each prpPętla In .Properties

On Error Resume Next

Debug.Print "    " & prpPętla.Name & " = " _

& prpPętla

On Error GoTo 0

Next prpPętla

Debug.Print "Kolekcja Workspaces w DBEngine"

' Wylicz elementy kolekcji Workspaces obiektu

' DBEngine.

For Each wrkPętla In .Workspaces

Debug.Print "    " & wrkPętla.Name

' Wylicz elementy kolekcji Properties każdego

' obiektu Workspace, wykrywając właściwości,

' których wartości w tym kontekście są

' niepoprawne.

For Each prpPętla In wrkPętla.Properties

On Error Resume Next

Debug.Print "        " & prpPętla.Name & _

" = " & prpPętla

On Error GoTo 0

Next prpPętla

Next wrkPętla

End With

End Sub


Obiekt Recordset typu zestaw dynamiczny - przykład (DAO)
Obiekt Recordset typu zestaw dynamiczny - przykład

W poniższym przykładzie otwierany jest obiekt Recordset typu zestaw dynamiczny i wyświetlana jest informacja, mówiąca w jakim stopniu można uaktualniać jego pola.

Sub dbOpenDynasetX()

Dim dbsNorthwind As Database

Dim rstFaktury As Recordset

Dim fldPętla As Field

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstFaktury = _

dbsNorthwind.OpenRecordset("Faktury", _

dbOpenDynaset)

With rstFaktury

Debug.Print "Dynamiczny zestaw rekordów: " & _

.Name

If .Updatable Then

Debug.Print "    Pola, które można " & _

"uaktualniać:"

' Wylicz elementy kolekcji Fields obiektu

' Recordset typu zestaw dynamiczny, drukując

' tylko te pola, które można uaktualniać.

For Each fldPętla In .Fields

If fldPętla.DataUpdatable Then

Debug.Print "        " & fldPętla.Name

End If

Next fldPętla

End If

.Close

End With

dbsNorthwind.Close

End Sub


Obiekt Field, kolekcja Fields - przykład (DAO)
Obiekt Field, kolekcja Fields - przykład

W poniższym przykładzie pokazano, które z właściwości obiektu typu Field są poprawne, w zależności od przynależności obiektu Field (na przykład, kolekcja Fields obiektu TableDef, kolekcja Fields obiektu QueryDef itd.). Do uruchomienia procedury wymagana jest procedura FieldOutput.

Sub FieldX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim fldDefinicjaTablicy As Field

Dim fldDefinicjaKwerendy As Field

Dim fldZbiórRekordów As Field

Dim fldRelacja As Field

Dim fldIndeks As Field

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

' Przypisz obiekt Field z różnych

' kolekcji Fields do zmiennej obiektowej.

Set fldDefinicjaTablicy = _

dbsNorthwind.TableDefs(0).Fields(0)

Set fldDefinicjaKwerendy = _

dbsNorthwind.QueryDefs(0).Fields(0)

Set fldZbiórRekordów = rstPracownicy.Fields(0)

Set fldRelacja = _

dbsNorthwind.Relations(0).Fields(0)

Set fldIndeks = _

dbsNorthwind.TableDefs(0).Indexes(0).Fields(0)

' Drukuj raport.

FieldOutput "DefinicjaTablicy", fldDefinicjaTablicy

FieldOutput "DefinicjaKwerendy", _

fldDefinicjaKwerendy

FieldOutput "ZbiórRekordów", fldZbiórRekordów

FieldOutput "Relacja", fldRelacja

FieldOutput "Indeks", fldIndeks

rstPracownicy.Close

dbsNorthwind.Close

End Sub

Sub FieldOutput(strTymcz As String, fldTymcz As Field)

' Funkcja raportu dla funkcji FieldX.

Dim prpPętla As Property

Debug.Print "Poprawne właściwości " & _

"obiektu Field w " & strTymcz

' Wylicz elementy kolekcji Properties danego

' obiektu Field.

For Each prpPętla In fldTymcz.Properties

' Niektóre właściwości w pewnych kontekstach

' są niepoprawne (na przykład właściwość Value

' w kolekcji Fields obiektu DefinicjaTablicy)

' Próba użycia niepoprawnej właściwości powoduje

' wygenerowanie błędu.

On Error Resume Next

Debug.Print "    " & prpPętla.Name & " = " & _

prpPętla.Value

On Error GoTo 0

Next prpPętla

End Sub


Obiekt Group, kolekcja Groups, obiekt User i kolekcja Users - przykład (DAO/Microsoft Jet)
Obiekt Group, kolekcja Groups, obiekt User i kolekcja Users - przykład

W poniższym przykładzie pokazano zastosowanie obiektów Group i User oraz kolekcji Groups i Users. Po pierwsze, tworzony jest nowy obiekt User, który jest dołączany do kolekcji Users domyślnego obiektu Workspace. Następnie tworzony jest nowy obiekt Group, który jest dołączany do kolekcji Groups domyślnego obiektu Workspace. Dalej do grupy Księgowość dodawany jest użytkownik Jan Kowalski. Na koniec wyliczane są elementy kolekcji Users i Groups domyślnego obiektu Workspace. Dalsze przykłady można znaleźć w opisach metod i właściwości umieszczonych na liście podsumowania tematów Group i User.

Sub GroupX()

Dim wrkDomyślne As Workspace

Dim usrNowy As User

Dim usrPętla As User

Dim grpNowa As Group

Dim grpPętla As Group

Dim grpSkładowa As Group

Set wrkDomyślne = DBEngine.Workspaces(0)

With wrkDomyślne

' Utwórz nowego użytkownika i dołącz go.

Set usrNowy = .CreateUser("Jan Kowalski", _

"abc123DEF456", "Hasło1")

.Users.Append usrNowy

' Utwórz nową grupę i dołącz ją.

Set grpNowa = .CreateGroup("Księgowość", _

"UVW987xyz654")

.Groups.Append grpNowa

' Przypisz użytkownika Jan Kowalski do grupy

' Księgowość, tworząc odpowiedni obiekt

' Group i dołączając go do kolekcji użytkownika

' Groups. Ten sam efekt można osiągnąć, jeśli

' obiekt User reprezentujący Jana Kowalskiego

' zostanie utworzony i dołączony do grupy

' Księgowość kolekcji Users.

Set grpSkładowa = _

usrNowy.CreateGroup("Księgowość")

usrNowy.Groups.Append grpSkładowa

Debug.Print "Kolekcja Users:"

' Wylicz wszystkie obiekty User w kolekcji

' Users domyślnego obszaru roboczego.

For Each usrPętla In .Users

Debug.Print "    " & usrPętla.Name

Debug.Print "        Należy do " & _

"następujących grup:"

' Wylicz wszystkie obiekty Group

' w każdej kolekcji Groups obiektu User.

If usrPętla.Groups.Count <> 0 Then

For Each grpPętla In usrPętla.Groups

Debug.Print "            " & _

grpPętla.Name

Next grpPętla

Else

Debug.Print "            [Brak]"

End If

Next usrPętla

Debug.Print "Kolekcja Groups:"

' Wylicz wszystkie obiekty Group w kolekcji

' Groups domyślnego obszaru roboczego.

For Each grpPętla In .Groups

Debug.Print "    " & grpPętla.Name

Debug.Print "        Ma jako składowe:"

' Wylicz wszystkie obiekty User w każdej

' kolekcji Users obiektu Group.

If grpPętla.Users.Count <> 0 Then

For Each usrPętla In grpPętla.Users

Debug.Print "            " & _

usrPętla.Name

Next usrPętla

Else

Debug.Print "            [Brak]"

End If

Next grpPętla

' Usuń nowe obiekty User i Group, gdyż

' jest to tylko przykład.

.Users.Delete "Jan Kowalski"

.Groups.Delete "Księgowość"

End With

End Sub


Obiekt Index, kolekcja Indexes - przykład (DAO/Microsoft Jet)
Obiekt Index, kolekcja Indexes - przykład

W poniższym przykładzie tworzony jest nowy obiekt Index i jest on dołączany do kolekcji Indexes obiektu TableDef tabeli Pracownicy, a następnie wyliczane elementy kolekcji Indexes obiektu TableDef. Na koniec wyliczane są rekordy obiektu Recordset, wykorzystując najpierw podstawowy obiekt Index, a później wykorzystując nowy obiekt Index. Do wykonania tej procedury niezbędna jest procedura IndexOutput.

Sub IndexObjectX()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim idxNowy As Index

Dim idxPętla As Index

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfPracownicy = dbsNorthwind!Pracownicy

With tdfPracownicy

' Utwórz nowy indeks, utwórz i dołącz obiekty

' Field do jego kolekcji Fields.

Set idxNowy = .CreateIndex("NowyIndeks")

With idxNowy

.Fields.Append .CreateField("Kraj")

.Fields.Append .CreateField("Nazwisko")

.Fields.Append .CreateField("Imię")

End With

' Dodaj nowy obiekt Index do kolekcji Indexes

' tabeli Pracownicy.

.Indexes.Append idxNowy

.Indexes.Refresh

Debug.Print .Indexes.Count & " Indeksy w " & _

.Name & " TableDef"

' Wylicz elementy kolekcji Indexes tabeli

' Pracownicy.

For Each idxPętla In .Indexes

Debug.Print "    " & idxPętla.Name

Next idxPętla

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

' Drukuj raport, stosując stary i nowy indeks.

IndexOutput rstPracownicy, "KluczPodstawowy"

IndexOutput rstPracownicy, idxNowy.Name

rstPracownicy.Close

' Usuń nowy obiekt Index,

' gdyż jest to tylko przykład.

.Indexes.Delete idxNowy.Name

End With

dbsNorthwind.Close

End Sub

Sub IndexOutput(rstTymcz As Recordset, _

strIndeks As String)

' Funkcja raportu dla funkcji FieldX.

With rstTymcz

' Ustaw indeks.

.Index = strIndeks

.MoveFirst

Debug.Print "Recordset = " & .Name & _

", Indeks = " & .Index

Debug.Print "    NrPracownika - Kraj - Nazwisko"

' Wylicz elementy zestawu rekordów,

' wykorzystując podany indeks.

Do While Not .EOF

Debug.Print "    " & !NrPracownika & _

" - " & !Kraj & " - " & !Nazwisko & _

", " & !Imię

.MoveNext

Loop

End With

End Sub


Obiekt Parameter, kolekcja Parameters - przykład (DAO)
Obiekt Parameter, kolekcja Parameters - przykład

W poniższym przykładzie przedstawiono obiekt Parameter i kolekcję Parameters, tworząc tymczasowy obiekt QueryDef i pobierając dane w oparciu o zmiany dokonane w obiekcie Parameters obiektu QueryDef. Do wykonania tej procedury niezbędna jest procedura ParametersChange.

Sub ParameterX()

Dim dbsNorthwind As Database

Dim qdfRaport As QueryDef

Dim prmPoczątek As Parameter

Dim prmKoniec As Parameter

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Utwórz tymczasowy obiekt QueryDef

' zawierający dwa parametry.

Set qdfRaport = dbsNorthwind.CreateQueryDef("", _

"PARAMETERS dtePoczątek DateTime, " & _

"dteKoniec DateTime; " & _

"SELECT NrPracownika, " & _

"COUNT(NrZamówienia) AS NumOrders " & _

"FROM Zamówienia WHERE DataWysyłki BETWEEN " & _

"[dtePoczątek] AND [dteKoniec] " & _

"GROUP BY NrPracownika  ORDER BY NrPracownika")

Set prmPoczątek = qdfRaport.Parameters!dtePoczątek

Set prmKoniec = qdfRaport.Parameters!dteKoniec

' Drukuj raport, stosując dane wartości parametrów.

ParametersChange qdfRaport, prmPoczątek, _

#1/1/95#, prmKoniec, #6/30/95#

ParametersChange qdfRaport, prmPoczątek, _

#7/1/95#, prmKoniec, #12/31/95#

dbsNorthwind.Close

End Sub

Sub ParametersChange(qdfTymcz As QueryDef, _

prmPierwszy As Parameter, dtePierwszy As Date, _

prmOstatni As Parameter, dteOstatni As Date)

' Funkcja raportu dla funkcji ParameterX.

Dim rstTymcz As Recordset

Dim fldPętla As Field

' Ustaw wartości parametrów i otwórz zestaw

' rekordów tymczasowego obiektu QueryDef.

prmPierwszy = dtePierwszy

prmOstatni = dteOstatni

Set rstTymcz = _

qdfTymcz.OpenRecordset(dbOpenForwardOnly)

Debug.Print "Okres od " & dtePierwszy & _

" do " & dteOstatni

' Wylicz elementy zestawu rekordów.

Do While Not rstTymcz.EOF

' Wylicz elementy kolekcji Fields zestawu

' rekordów.

For Each fldPętla In rstTymcz.Fields

Debug.Print " - " & fldPętla.Name & _

" = " & fldPętla;

Next fldPętla

Debug.Print

rstTymcz.MoveNext

Loop

rstTymcz.Close

End Sub


Obiekt Property, kolekcja Properties - przykład (DAO)
Obiekt Property, kolekcja Properties - przykład

W poniższym przykładzie tworzona jest w bieżącej bazie danych właściwość definiowana przez użytkownika, ustawiane są jej właściwości Type i Value i właściwość ta jest dołączana do kolekcji Properties bazy danych. Następnie wyliczane są wszystkie właściwości tej bazy danych. Dalsze przykłady można znaleźć w opisach właściwości wymienionych w podsumowaniu tematu Property.

Sub PropertyX()

Dim dbsNorthwind As Database

Dim prpNowa As Property

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Utwórz i dołącz właściwość definiowaną przez

' użytkownika.

Set prpNowa = .CreateProperty()

prpNowa.Name = "ZdefiniowanaPrzezUżytkownika"

prpNowa.Type = dbText

prpNowa.Value = "Ta właściwość jest " & _

"definiowana przez użytkownika."

.Properties.Append prpNowa

' Wylicz wszystkie właściwości w bieżącej bazie.

Debug.Print "Właściwości obiektu " & .Name

For Each prpPętla In .Properties

With prpPętla

Debug.Print "    " & .Name

Debug.Print "        Typ: " & .Type

Debug.Print "        Wartość: " & .Value

Debug.Print "        Dziedziczona: " & _

.Inherited

End With

Next prpPętla

' Usuń nową właściwość, gdyż jest to

' tylko przykład.

.Properties.Delete _

 	"ZdefiniowanaPrzezUżytkownika"

End With

End Sub


Obiekt QueryDef, kolekcja QueryDefs - przykład (DAO)
Obiekt QueryDef, kolekcja QueryDefs - przykład

W poniższym przykładzie tworzony jest nowy obiekt QueryDef i jest on dołączany do kolekcji QueryDefs obiektu Database reprezentującego bazę danych Northwind. Następnie wyliczane są elementy kolekcji QueryDefs i Properties nowego obiektu QueryDef.

Sub QueryDefX()

Dim dbsNorthwind As Database

Dim qdfNowa As QueryDef

Dim qdfPętla As QueryDef

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Utwórz nowy obiekt QueryDef. Obiekt jest

' automatycznie dołączany do kolekcji QueryDefs,

' gdyż ma nazwę.

Set qdfNowa = dbsNorthwind.CreateQueryDef( _

"NowyQueryDef", "SELECT * FROM Kategorie")

With dbsNorthwind

Debug.Print .QueryDefs.Count & _

" QueryDefs w " & .Name

' Wylicz elementy kolekcji QueryDefs.

For Each qdfPętla In .QueryDefs

Debug.Print "    " & qdfPętla.Name

Next qdfPętla

With qdfNowa

Debug.Print "Właściwości " & .Name

' Wylicz elementy kolekcji Properties nowego

' obiektu QueryDef.

For Each prpPętla In .Properties

On Error Resume Next

Debug.Print "   " & prpPętla.Name & " - " & _

IIf(prpPętla = "", "[pusta]", prpPętla)

On Error Goto 0

Next prpPętla

End With

' Usuń nowy obiekt QueryDef, gdyż

' jest to tylko przykład.

.QueryDefs.Delete qdfNowa.Name

.Close

End With

End Sub


Obiekt Recordset, kolekcja Recordsets - przykład (DAO)
Obiekt Recordset, kolekcja Recordsets - przykład

W poniższym przykładzie przedstawiono obiekty Recordset i kolekcję Recordsets, otwierając cztery różne typy obiektów Recordset, wyliczając elementy kolekcji Recordsets bieżącego obiektu Database i wyliczając elementy kolekcji Properties każdego obiektu Recordset.

Sub RecordsetX()

Dim dbsNorthwind As Database

Dim rstTablica As Recordset

Dim rstZbiórRekordów As Recordset

Dim rstKlatkaFilmu As Recordset

Dim rstTylkoDalej As Recordset

Dim rstPętla As Recordset

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Otwórz po jednym obiekcie Recordset

' każdego typu.

Set rstTablica = .OpenRecordset("Kategorie", _

dbOpenTable)

Set rstZbiórRekordów = .OpenRecordset( _

"Pracownicy", dbOpenDynaset)

Set rstKlatkaFilmu = .OpenRecordset( _

"Spedytorzy", dbOpenSnapshot)

Set rstTylkoDalej = .OpenRecordset( _

"Pracownicy", dbOpenForwardOnly)

Debug.Print "Obiekty Recordset w kolekcji " & _

"Recordsets bazy dbsNorthwind"

' Wylicz elementy kolekcji Recordsets.

For Each rstPętla In .Recordsets

With rstPętla

Debug.Print "    " & .Name

' Wylicz elementy kolekcji Properties

' każdego obiektu Recordset. Omijaj

' wszystkie właściwości, których wartości

' są niepoprawne w tym kontekście.

For Each prpPętla In .Properties

On Error Resume Next

If prpPętla <> "" Then Debug.Print _

"        " & prpPętla.Name & _

" = " & prpPętla

On Error GoTo 0

Next prpPętla

End With

Next rstPętla

rstTablica.Close

rstZbiórRekordów.Close

rstKlatkaFilmu.Close

rstTylkoDalej.Close

.Close

End With

End Sub


Obiekt Relation, kolekcja Relations - przykład (DAO/Microsoft Jet)
Obiekt Relation, kolekcja Relations - przykład

W poniższym przykładzie pokazano, w jaki sposób istniejący obiekt Relation może kontrolować wprowadzanie danych. Procedura próbuje dodać rekord zawierający niepoprawną wartość pola NrKategorii, co powoduje uruchomienie programu obsługi błędów.

Sub RelationX()

Dim dbsNorthwind As Database

Dim rstProdukty As Recordset

Dim prpPętla As Property

Dim fldPętla As Field

Dim errPętla As Error

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstProdukty = dbsNorthwind.OpenRecordset( _

"Produkty")

' Drukuj raport pokazujący różne elementy

' relacji oraz miejsca przechowywania elementów.

With dbsNorthwind.Relations!KategorieProdukty

Debug.Print "Właściwości relacji " & .Name

Debug.Print "    Tabela = " & .Table

Debug.Print "    Tabela obca = " & .ForeignTable

Debug.Print "Pola relacji " & .Name

With .Fields!NrKategorii

Debug.Print "    " & .Name

Debug.Print "        Nazwa = " & .Name

Debug.Print "        Nazwa obca = " & _

.ForeignName

End With

End With

' Próba dodania rekordu naruszającego relację.

With rstProdukty

.AddNew

!NazwaProduktu = "Trygve's Lutefisk"

!NrKategorii = 10

On Error GoTo Err_Relation

.Update

On Error GoTo 0

.Close

End With

dbsNorthwind.Close

Exit Sub

Err_Relation:

' Zgłoś użytkownikowi powstałe błędy, które mogą

' wynikać w niepoprawnych danych.

If DBEngine.Errors.Count > 0 Then

For Each errPętla In DBEngine.Errors

MsgBox "Błąd numer: " & errPętla.Number & _

vbCr & errPętla.Description

Next errPętla

End If

Resume Next

End Sub


Obiekt Recordset typu utrwalonego - przykład (DAO)
Obiekt Recordset typu utrwalonego - przykład

W poniższym przykładzie otwierany obiekt Recordset typu utrwalonego i pokazywane są jego cechy w trybie dostępu tylko do odczytu.

Sub dbOpenSnapshotX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenSnapshot)

With rstPracownicy

Debug.Print "Utrwalony zestaw rekordów: " & _

.Name

' Wylicz elementy kolekcji Properties obiektu

' Recordset typu utrwalonego, wykrywając

' właściwości których wartości są w tym

' kontekście niepoprawne.

For Each prpPętla In .Properties

On Error Resume Next

Debug.Print "    " & prpPętla.Name & _

" = " & prpPętla

On Error Goto 0

Next prpPętla

.Close

End With

dbsNorthwind.Close

End Sub


Obiekt Recordset typu tabela - przykład (DAO/Microsoft Jet)
Obiekt Recordset typu tabela - przykład

W poniższym przykładzie otwierany jest obiekt Recordset typu tabela, ustawiana jest jego właściwość Index i wyliczane jego rekordy.

Sub dbOpenTableX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' dbOpenTable jest ustawieniem domyślnym.

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

With rstPracownicy

Debug.Print _

"Zestaw rekordów typu tabela: " & .Name

' Zastosuj predefiniowany indeks.

.Index = "Nazwisko"

Debug.Print "    Indeks = " & .Index

' Wylicz rekordy.

Do While Not .EOF

Debug.Print "        " & !Nazwisko & ", " & _

!Imię

.MoveNext

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Obiekt TableDef, kolekcja TableDefs - przykład (DAO/Microsoft Jet)
Obiekt TableDef, kolekcja TableDefs - przykład

W poniższym przykładzie jest tworzony nowy obiekt TableDef, który jest dołączany do kolekcji TableDefs obiektu Database reprezentującego bazę danych Northwind. Następnie wyliczane są elementy kolekcji TableDefs i kolekcji Properties nowego obiektu TableDef.

Sub TableDefX()

Dim dbsNorthwind As Database

Dim tdfNowa As TableDef

Dim tdfPętla As TableDef

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Utwórz nowy obiekt TableDef, dołącz obiekty

' Field do jego kolekcji Fields i dołącz

' obiekt TableDef do kolekcji TableDefs

' obiektu Database.

Set tdfNowa = dbsNorthwind.CreateTableDef( _

"NowaTableDef")

tdfNowa.Fields.Append tdfNowa.CreateField( _

"Data", dbDate)

dbsNorthwind.TableDefs.Append tdfNowa

With dbsNorthwind

Debug.Print .TableDefs.Count & _

" TableDefs w " & .Name

' Wylicz elementy kolekcji TableDefs.

For Each tdfPętla In .TableDefs

Debug.Print "    " & tdfPętla.Name

Next tdfPętla

With tdfNowa

Debug.Print "Właściwości " & .Name

' Wylicz elementy kolekcji Properties nowego

' obiektu TableDef, drukując tylko

' właściwości z wartościami niepustymi.

For Each prpPętla In .Properties

Debug.Print "    " & prpPętla.Name & _

" - " & _

IIf(prpPętla = "", "[pusta]", prpPętla)

Next prpPętla

End With

' Usuń nowy obiekt TableDef, gdyż

' jest to tylko przykład.

.TableDefs.Delete tdfNowa.Name

.Close

End With

End Sub


Obiekt Connection, kolekcja Connections - przykład (DAO/ODBCDirect)
Obiekt Connection, kolekcja Connections - przykład

W poniższym przykładzie zademonstrowano obiekt Connection i kolekcję Connections przez otwarcie obiektu Microsoft Jet Database i dwóch obiektów ODBCDirect Connection, a następnie przez wyświetlenie listy właściwości dostępnych dla każdego z tych obiektów.

Sub ConnectionObjectX()

Dim wrkJet as Workspace

Dim dbsNorthwind As Database

Dim wrkODBC As Workspace

Dim conWyd As Connection

Dim conWyd2 As Connection

Dim conPętla As Connection

Dim prpPętla As Property

' Otwórz obiekt Microsoft Jet Database.

Set wrkJet = CreateWorkspace("NowyObszarJet", _

"admin", "", dbUseJet)

Set dbsNorthwind = _

wrkJet.OpenDatabase("Northwind.mdb")

' Utwórz obiekt ODBCDirect Workspace i otwórz

' obiekty Connection.

Set wrkODBC = CreateWorkspace("NowyObszarODBC", _

"admin", "", dbUseODBC)

Set conWyd = _

wrkODBC.OpenConnection("Połączenie1", , , _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

Set conWyd2 = _

wrkODBC.OpenConnection("Połączenie2", , _

True, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

Debug.Print "Właściwości obiektu Database:"

With dbsNorthwind

' Wylicz elementy kolekcji Properties obiektu

' Database.

For Each prpPętla In .Properties

On Error Resume Next

Debug.Print "    " & prpPętla.Name & _

" = " & prpPętla.Value

On Error GoTo 0

Next prpPętla

End With

' Wylicz elementy kolekcji Connections.

For Each conPętla In wrkODBC.Connections

Debug.Print "Właściwości obiektu Connection " _

conPętla.Name & ":"

With conPętla

' Drukuj wartości właściwości, wywołując

' każdy obiekt Property. Obiekt Connection

' nie posiada kolekcji Properties.

Debug.Print "    Connect = " & .Connect

' Właściwość zwraca w rzeczywistości obiekt

' Database.

Debug.Print "    Database[.Name] = " & _

.Database.Name

Debug.Print "    Name = " & .Name

Debug.Print "    QueryTimeout = " & _

.QueryTimeout

Debug.Print "    RecordsAffected = " & _

.RecordsAffected

Debug.Print "    StillExecuting = " & _

.StillExecuting

Debug.Print "    Transactions = " & _

.Transactions

Debug.Print "    Updatable = " & .Updatable

End With

Next conPętla

dbsNorthwind.Close

conWyd.Close

conWyd2.Close

wrkJet.Close

wrkODBC.Close

End Sub


Obiekt Database, kolekcja Databases - przykład (DAO/Microsoft Jet)
Obiekt Database, kolekcja Databases - przykład

W poniższym przykładzie tworzony jest nowy obiekt Database i w domyślnym obiekcie Workspace otwierany jest istniejący obiekt Database. Następnie wyliczane są elementy kolekcji Database i elementy kolekcji Properties każdego obiektu Database. Dalsze przykłady można znaleźć w opisach metod i właściwości wymienionych w podsumowaniu tematu opisującego obiekt Database.

Sub DatabaseObjectX()

Dim wrkJet As Workspace

Dim dbsNorthwind As Database

Dim dbsNowa As Database

Dim dbsPętla As Database

Dim prpPętla As Property

Set wrkJet = CreateWorkspace("ObszarJet", _

"admin", "", dbUseJet)

' Sprawdź, czy nie istnieje już plik o nazwie

' takiej samej, jak nazwa nowej bazy danych.

If Dir("NowaBD.mdb") <> "" Then Kill "NowaBD.mdb"

' Utwórz nową bazę danych korzystającą z

' określonego sposobu sortowania.

Set dbsNowa = wrkJet.CreateDatabase("NowaBD.mdb", _

dbLangGeneral)

Set dbsNorthwind = _

wrkJet.OpenDatabase("Northwind.mdb")

' Wylicz elementy kolekcji Databases.

For Each dbsPętla In wrkJet.Databases

With dbsPętla

Debug.Print _

"Właściwości bazy danych " & .Name

' Wylicz elementy kolekcji Properties każdego

' obiektu Database.

For Each prpPętla In .Properties

If prpPętla <> "" Then Debug.Print _

"    " & _

prpPętla.Name & " = " & prpPętla

Next prpPętla

End With

Next dbsPętla

dbsNowa.Close

dbsNorthwind.Close

wrkJet.Close

End Sub


Obiekt Document i kolekcja Documents - przykład (DAO/Microsoft Jet)
Obiekt Document i kolekcja Documents - przykład

W poniższym przykładzie wyliczane są elementy kolekcji Documents kontenera Tables. Następnie wyliczane są elementy kolekcji Properties pierwszego w kolekcji obiektu Document.

Sub DocumentX()

Dim dbsNorthwind As Database

Dim docPętla As Document

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind.Containers!Tables

Debug.Print "Dokumenty w kontenerze " & .Name

' Wylicz elementy kolekcji Documents kontenera

' Tables.

For Each docPętla In .Documents

Debug.Print "    " & docPętla.Name

Next docPętla

With .Documents(0)

' Wylicz elementy kolekcji Properties

' pierwszego w kontenerze Tables obiektu

' Document.

Debug.Print "Właściwości dokumentu " & .Name

On Error Resume Next

For Each prpPętla In .Properties

Debug.Print "    " & prpPętla.Name & _

" = " & prpPętla

Next prpPętla

On Error GoTo 0

End With

End With

dbsNorthwind.Close

End Sub


Obiekt Recordset typu dynamicznego - przykład (DAO/ODBCDirect)
Obiekt Recordset typu dynamicznego - przykład

W poniższym przykładzie otwierany jest obiekt Recordset typu dynamicznego oraz wyliczane są jego rekordy.

Sub dbOpenDynamicX()

Dim wrkGłówny As Workspace

Dim conGłówne As Connection

Dim qdfTymcz As QueryDef

Dim rstTymcz As Recordset

Dim strSQL As String

Dim intPętla As Integer

' Utwórz obszar roboczy ODBC i otwórz połączenie

' z bazą danych SQL Server.

Set wrkGłówny = CreateWorkspace("ObszarODBC", _

"admin", "", dbUseODBC)

Set conGłówne = wrkGłówny.OpenConnection( _

"Wydawcy", dbDriverNoPrompt, False, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Otwórz zestaw rekordów typu dynamicznego.

Set rstTymcz = _

conGłówne.OpenRecordset("autorzy", _

dbOpenDynamic)

With rstTymcz

Debug.Print _

"Zestaw rekordów typu dynamicznego: " & .Name

' Wylicz rekordy.

Do While Not .EOF

Debug.Print "        " & !au_nazw & ", " & _

!au_imię

.MoveNext

Loop

.Close

End With

conGłówne.Close

wrkGłówny.Close

End Sub


Obiekt Recordset typu progresywnego - przykład (DAO/Microsoft Jet)
Obiekt Recordset typu progresywnego - przykład

W poniższym przykładzie otwierany jest obiekt Recordset typu progresywnego oraz pokazane są jego cechy w trybie dostępu tylko do odczytu. Rekordy obiektu Recordset przeglądane są za pomocą metody MoveNext.

Sub dbOpenForwardOnlyX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim fldPętla As Field

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Otwórz obiekt Recordset typu progresywnego.

' Jedynie metody MoveNext i Move mogą zostać użyte

' do przeglądania zestawu rekordów.

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenForwardOnly)

With rstPracownicy

Debug.Print _

"Zestaw rekordów typu progresywnego: " & _

.Name & ", Updatable = " & .Updatable

Debug.Print "    Pole - DataUpdatable"

' Wylicz elementy kolekcji Fields, drukując

' właściwości Name i DataUpdatable każdego

' obiektu Field.

For Each fldPętla In .Fields

Debug.Print "        " & fldPętla.Name & _

" - " & fldPętla.DataUpdatable

Next fldPętla

Debug.Print "    Dane"

' Wylicz zestaw rekordów.

Do While Not .EOF

Debug.Print "        " & !Imię & " " & _

!Nazwisko

.MoveNext

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Obiekt Workspace, kolekcja Workspaces - przykład (DAO)
Obiekt Workspace, kolekcja Workspaces - przykład

W poniższym przykładzie tworzony jest nowy obiekt Microsoft Jet Workspace i nowy obiekt ODBCDirect Workspace, po czym obiekty te są dołączane do kolekcji Workspaces. Następnie wyliczane są elementy kolekcji Workspaces i elementy kolekcji Properties każdego obiektu Workspace. Dalsze przykłady można znaleźć w opisach metod i właściwości obiektu Workspace lub kolekcji Workspaces.

Sub WorkspaceX()

Dim wrkNowyJet As Workspace

Dim wrkNowyODBC As Workspace

Dim wrkPętla As Workspace

Dim prpPętla As Property

' Utwórz nowy obszar roboczy Microsoft Jet.

Set wrkNowyJet = CreateWorkspace("NowyObszarJet", _

"admin", "", dbUseJet)

Workspaces.Append wrkNowyJet

' Utwórz nowy obszar roboczy ODBCDirect.

Set wrkNowyODBC = _

CreateWorkspace("NowyObszarODBC", _

"admin", "", dbUseODBC)

Workspaces.Append wrkNowyODBC

' Wylicz elementy kolekcji Workspaces.

For Each wrkPętla In Workspaces

With wrkPętla

Debug.Print _

"Właściwości obszaru roboczego " & .Name

' Wylicz elementy kolekcji Properties nowego

' obiektu Workspace.

For Each prpPętla In .Properties

On Error Resume Next

If prpPętla <> "" Then Debug.Print _

"    " & prpPętla.Name & " = " & _

prpPętla

On Error GoTo 0

Next prpPętla

End With

Next wrkPętla

wrkNowyJet.Close

wrkNowyODBC.Close

End Sub


Metoda AddNew - przykład (DAO)
Metoda AddNew - przykład

W poniższym przykładzie posłużono się metodą AddNew w celu utworzenia nowego rekordu o określonej nazwie. Do uruchomienia przykładowej procedury niezbędna jest funkcja DodajNazwę.

Sub AddNew()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim strImię As String

Dim strNazwisko As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset( _

"Pracownicy", dbOpenDynaset)

' Pobierz dane od użytkownika:

strImię = Trim(InputBox("Podaj imię:"))

strNazwisko = Trim(InputBox("Podaj nazwisko:"))

' Dalsze operacje wykonywane są tylko wtedy,

' gdy użytkownik wprowadził dane

' dotyczące zarówno imienia, jak i nazwiska.

If strImię <> "" and strNazwisko <> "" Then

' Wywołaj funkcję dodającą rekord:

DodajNazwę rstPracownicy, strImię, strNazwisko

' Wyświetl nowo dodane dane:

With rstPracownicy

Debug.Print "Nowy rekord: " & !Imię & _

" " & !Nazwisko

' Usuń nowy rekord, gdyż jest to tylko

' przykład.

.Delete

End With

Else

Debug.Print _

"Należy wprowadzić ciągi znaków " & _

"określające imię i nazwisko!"

End If

rstPracownicy.Close

dbsNorthwind.Close

End Sub

Function DodajNazwę(rstPom As Recordset, _

strIm As String, strNaz As String)

' Funkcja ta dodaje do zestawu rekordów nowy

' rekord, wykorzystując do jego utworzenia dane

' przekazane przez procedurę wołającą. Nowy rekord

 	' staje się następnie rekordem bieżącym.

With rstPom

.AddNew

!Imię = strIm

!Nazwisko = strNaz

.Update

.Bookmark = .LastModified

End With

End Function


Metody Append i Delete - przykład (DAO)
Metody Append i Delete - przykład

W poniższym przykładzie posłużono się metodą Append i metodą Delete w celu zmodyfikowania kolekcji Fields obiektu TableDef. Do uruchomienia przykładowej procedury niezbędna jest procedura DołączUsuńPole.

Sub Append()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim fldPętla As Field

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfPracownicy = _

dbsNorthwind.TableDefs!Pracownicy

' Dodaj trzy nowe pola:

DołączUsuńPole tdfPracownicy, "DOŁĄCZ", _

"E-mail", dbText, 50

DołączUsuńPole tdfPracownicy, "DOŁĄCZ", _

"Http", dbText, 80

DołączUsuńPole tdfPracownicy, "DOŁĄCZ", _

"Przydział", dbInteger, 5

Debug.Print "Pola po operacji dołączenia "

Debug.Print, "Typ", "Rozmiar", "Nazwa"

' Wylicz elementy kolekcji Fields w celu wskazania

 	' pól nowo dodanych:

For Each fldPętla In tdfPracownicy.Fields

Debug.Print, fldPętla.Type, fldPętla.Size, _

fldPętla.Name

Next fldPętla

' Usuń nowo dodane pola:

DołączUsuńPole tdfPracownicy, "USUŃ", "E-mail"

DołączUsuńPole tdfPracownicy, "USUŃ", "Http"

DołączUsuńPole tdfPracownicy, "USUŃ", "Przydział"

Debug.Print "Pola po operacji usunięcia"

Debug.Print, "Typ", "Rozmiar", "Nazwa"

' Wylicz elementy Fields w celu pokazania, że

' nowe pola zostały usunięte:

For Each fldPętla In tdfPracownicy.Fields

Debug.Print, fldPętla.Type, fldPętla.Size, _

fldPętla.Name

Next fldPętla

dbsNorthwind.Close

End Sub

Sub DołączUsuńPole(tdfPom As TableDef, _

strPolecenie As String, strNazwa As String, _

Optional varTyp, Optional varRozm)

With tdfPom

' Najpierw sprawdź, czy obiekt typu TableDef

' jest aktualizowalny. Jeżeli nie jest,

' sterowanie zostaje przekazane z powrotem do

' procedury wołającej.

If .Updatable = False Then

MsgBox "Obiekt TableDef nie jest " & _

"aktualizowalny! " & _

"Operacja nie może być wykonana."

Exit Sub

End If

' W zależności od przekazanych danych, dołącz

' lub usuń pola z kolekcji Fields należącej do

 	' wskazanego obiektu TableDef.

If strPolecenie = "DOŁĄCZ" Then

.Fields.Append .CreateField(strNazwa, _

varTyp, varRozm)

Else

If strPolecenie = "USUŃ" Then _

.Fields.Delete strNazwa

End If

End With

End Sub


Metody AppendChunk i GetChunk - przykład (DAO)
Metody AppendChunk i GetChunk - przykład

W poniższym przykładzie posłużono się metodą AppendChunk i metodą GetChunk w celu wypełnienia pola typu obiekt OLE danymi z innego rekordu. W rzeczywistej aplikacji procedura taka mogłaby posłużyć do skopiowania rekordu pracownika (łącznie z jego fotografią) z jednej tabeli do drugiej. W poniższym przykładzie rekord jest po prostu kopiowany z powrotem do tej samej tabeli. Należy zwrócić uwagę na to, że wszystkie operacje na porcjach odbywają się w obrębie pojedynczej sekwencji AddNew-Update.

Sub AppendChunk()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim rstPracownicy2 As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Otwórz dwa zestawy rekordów z tabeli Pracownicy:

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenDynaset)

Set rstPracownicy2 = rstPracownicy.Clone

' Dodaj nowy rekord do pierwszego zestawu rekordów

' i skopiuj dane z rekordu należącego do drugiego

' zestawu rekordów:

With rstPracownicy

.AddNew

!Imię = rstPracownicy2!Imię

!Nazwisko = rstPracownicy2!Nazwisko

KopiujDużePole _

rstPracownicy2!Fotografia, !Fotografia

.Update

' Usuń nowy rekord, gdyż jest to tylko przykład.

.Bookmark = .LastModified

.Delete

.Close

End With

rstPracownicy2.Close

dbsNorthwind.Close

End Sub

Function KopiujDużePole(fldŹródło As Field, _

fldCel As Field)

' Ustawienie rozmiaru porcji (w bajtach):

Const conRozmiarPorcji = 32768

Dim lngPrzesunięcie As Long

Dim lngRozmiarCałk  As Long

Dim strPorcja As String

' Kopiuj fotografię z jednego zestawu rekordów do

 	' drugiego w porcjach po 32KB, dopóki nie zostanie

 	' skopiowane całe pole:

lngRozmiarCałk  = fldŹródło.FieldSize

Do While lngPrzesunięcie < lngRozmiarCałk

strPorcja = fldŹródło.GetChunk( _

 lngPrzesunięcie, conRozmiarPorcji )

fldCel.AppendChunk strPorcja

lngPrzesunięcie = lngPrzesunięcie + _

 conRozmiarPorcji

Loop

End Function


Metody BeginTrans, CommitTrans i Rollback - przykład (DAO)
Metody BeginTrans, CommitTrans i Rollback - przykład

W wyniku działania poniższego przykładu ulegają zmianie nazwy stanowisk wszystkich przedstawicieli handlowych wymienionych w tabeli Pracownicy należącej do bazy danych. Metoda BeginTrans uruchamia transakcję, która izoluje wszystkie zmiany wprowadzone do tabeli Pracownicy, po czym metoda CommitTrans zapisuje te zmiany. Należy zwrócić uwagę na to, że w celu cofnięcia zmian zapisanych przy użyciu metody Update można zastosować metodę Rollback, a także na to, że w poniższym przykładzie główna transakcja jest zagnieżdżona wewnątrz innej transakcji, która automatycznie cofa wszystkie wprowadzone przez użytkownika zmiany.

Podczas gdy użytkownik podejmuje decyzję o tym, czy zaakceptować zmiany, zablokowana pozostaje jedna lub więcej stron tabeli. Z tego powodu nie zaleca się stosowania tej techniki. Jest ona prezentowana jedynie w charakterze przykładu.

Sub BeginTrans()

Dim strNazwisko As String

Dim strKomunikat As String

Dim wrkDomyślny As Workspace

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

' Weź domyślny obszar roboczy:

Set wrkDomyślny = DBEngine.Workspaces(0)

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

' Początek transakcji otaczającej właściwą

' transakcję:

wrkDomyślny.BeginTrans

' Początek właściwej transakcji:

wrkDomyślny.BeginTrans

With rstPracownicy

' W poniższej pętli przeglądane są rekordy

' należące do zestawu, a użytkownik ma możliwość

' zmiany tytułu podanego pracownika:

Do Until .EOF

If !Tytuł = "Sales representative" Then

strNazwisko = !Nazwisko & ", " & !Imię

strKomunikat = "Pracownik: " & _

strNazwisko & vbCr & _

"Zmienić tytuł na Główny księgowy?"

' Zmień tytuł określonego pracownika:

If MsgBox(strKomunikat, vbYesNo) = _

vbYes Then

.Edit

!Tytuł = "Główny księgowy"

.Update

End If

End If

.MoveNext

Loop

' Spytaj czy zatwierdzić wszystkie zmiany

' wprowadzone uprzednio.

If MsgBox("Zapisać wprowadzone zmiany?", _

 vbYesNo) = vbYes Then

wrkDomyślny.CommitTrans

Else

wrkDomyślny.Rollback

End If

' Wydrukuj bieżące dane zawarte w zestawie

' rekordów:

.MoveFirst

Do While Not .EOF

Debug.Print !Nazwisko & ", " & !Imię & _

" - " & !Tytuł

.MoveNext

Loop

' Wycofaj wszystkie zmiany wprowadzone przez

' użytkownika, gdyż jest to tylko przykład.

wrkDomyślny.Rollback

.Close

End With

dbsNorthwind.Close

End Sub


Metoda Clone - przykład (DAO)
Metoda Clone - przykład

W poniższym przykładzie wykorzystano metodę Clone w celu utworzenia kopii zestawu rekordów (obiektu Recordset), po czym użytkownik uzyskuje możliwość niezależnego ustawienia wskaźnika rekordu dla każdej z kopii.

Sub Clone()

Dim dbsNorthwind As Database

Dim arstProdukty(1 To 3) As Recordset

Dim intPętla As Integer

Dim strKomunikat As String

Dim strSzukaj As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Jeżeli poniższa instrukcja SQL byłaby używana

' często, lepszą wydajność zapewniłoby zastosowanie

' trwałego obiektu QueryDef.

Set arstProdukty(1) = dbsNorthwind.OpenRecordset( _

"SELECT NazwaProduktu FROM Produkty " & _

"ORDER BY NazwaProduktu", dbOpenSnapshot)

' Utwórz dwie kopie pierwotnego zestawu rekordów:

Set arstProdukty(2) = arstProdukty(1).Clone

Set arstProdukty(3) = arstProdukty(1).Clone

Do While True

' W każdym przebiegu poniższej pętli użytkownik

' przeszukuje inną kopię tego samego zestawu

' rekordów.

For intPętla = 1 To 3

' Żądaj od użytkownika podania poszukiwanego

 	' ciągu. Jednocześnie dla każdego zestawu

' rekordów wyświetl bieżące położenie

' wskaźnika rekordu.

strKomunikat = _

"Zestawy rekordów z tablicy Produkty:" _

& vbCr & _

" 1 - Pierwotny - Wskaźnik rekordu " & _

"ustawiony na " & _

arstProdukty(1)!NazwaProduktu & vbCr & _

" 2 - Kopia - Wskaźnik rek. " & _

"ustawiony na " & _

arstProdukty(2)! NazwaProduktu & vbCr & _

" 3 - Kopia - Wskaźnik rekordu " & _

"ustawiony na " & _

arstProdukty(3)! NazwaProduktu & vbCr & _

"Wprowadź ciąg, który ma być " & _

"odnaleziony w zestawie nr " & _

intPętla & ":"

strSzukaj = Trim(InputBox(strKomunikat))

If strSzukaj = "" Then Exit Do

' Szukaj wprowadzonego ciągu; w przypadku

' niepowodzenia wykonaj skok do ostatniego

' rekordu.

With arstProdukty(intPętla)

.FindFirst "NazwaProduktu >= '" & _

 strSzukaj & "'"

If .NoMatch Then .MoveLast

End With

Next intPętla

Loop

arstProdukty(1).Close

arstProdukty(2).Close

arstProdukty(3).Close

dbsNorthwind.Close

End Sub


Metoda Close - przykład (DAO)
Metoda Close - przykład

W poniższym przykładzie zastosowano metodę Close w stosunku do otwartych wcześniej obiektów typu Recordset i Database. Pokazano również, w jaki sposób zamknięcie zestawu rekordów (obiektu Recordset) powoduje utratę nie zapisanych zmian.

Sub CloseX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

' Wprowadź zmiany do rekordu, ale zamknij zestaw

' rekordów przed zapisaniem zmian.

With rstPracownicy

Debug.Print "Pierwotne dane"

Debug.Print "    Nazwisko - Telefon wewnętrzny"

Debug.Print "    " & !Imię & " " & _

!Nazwisko & " - " & ! TelWewnętrzny

.Edit

!TelWewnętrzny = "9999"

.Close

End With

' Otwórz ponownie zestaw rekordów, aby pokazać, że

' dane nie zostały zmienione.

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

With rstPracownicy

Debug.Print "Dane po operacji Close"

Debug.Print "    Nazwisko - Telefon wewnętrzny"

Debug.Print "    " & !Imię & " " & _

!Nazwisko & " - " & !TelWewnętrzny

.Close

End With

dbsNorthwind.Close

End Sub


Metoda CompactDatabase - przykład (DAO/Microsoft Jet)
Metoda CompactDatabase - przykład

W poniższym przykładzie posłużono się metodą CompactDatabase w celu zmiany porządku sortowania obowiązującego w bazie danych. Zamieszczonego kodu nie można użyć w module należącym do bazy danych Northwind.mdb.

Sub CompactDatabase()

Dim dbsNorthwind As Database

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Wypisz właściwości pierwotnej bazy danych

With dbsNorthwind

Debug.Print .Name & ", wersja " & .Version

Debug.Print "    Porządek sortowania = " & _

 .CollatingOrder

.Close

End With

' Sprawdź, czy nie istnieje już plik o nazwie

' takiej samej, jak nazwa zmodyfikowanej bazy

' danych.

If Dir("NwindKorean.mdb") <> "" Then _

Kill "NwindKorean.mdb"

' Poniższa instrukcja tworzy nową wersję

' bazy danych Northwind, wykorzystującą porządek

' sortowania właściwy dla języka koreańskiego.

DBEngine.CompactDatabase "Northwind.mdb", _

"NwindKorean.mdb", dbLangKorean

Set dbsNorthwind = OpenDatabase("NwindKorean.mdb")

' Wypisz właściwości zmodyfikowanej bazy danych:

With dbsNorthwind

Debug.Print .Name & ", wersja " & .Version

Debug.Print " Porządek sortowania = " & _

.CollatingOrder

.Close

End With

End Sub

W poniższym przykładzie posłużono się metodą CompactDatabase w celu zmiany wersji bazy danych. Do uruchomienia zamieszczonego kodu niezbędna jest baza danych o nazwie Nwind11.mdb utworzona za pomocą aparatu Microsoft Jet w wersji 1.1. Kodu tego nie można użyć w module należącym do bazy danych Nwind11.mdb.

Sub CompactDatabase2()

Dim dbsNorthwind As Database

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Nwind11.mdb")

' Wypisz właściwości pierwotnej bazy danych:

With dbsNorthwind

Debug.Print .Name & ", wersja " & .Version

Debug.Print "    Porządek sortowania = " & _

.CollatingOrder

.Close

End With

' Sprawdź, czy nie istnieje już plik o nazwie

' takiej samej, jak nazwa zmodyfikowanej bazy

' danych.

If Dir("Nwind20.mdb") <> "" Then _

Kill "Nwind20.mdb"

' Poniższa instrukcja tworzy z bazy danych w wersji

' Microsoft Jet 1.1

' zdefragmentowaną i zaszyfrowaną bazę danych

' w wersji Microsoft Jet 2.0.

DBEngine.CompactDatabase "Nwind11.mdb", _

"Nwind20.mdb", , dbEncrypt + dbVersion20

Set dbsNorthwind = OpenDatabase("Nwind20.mdb")

' Wypisz właściwości zmodyfikowanej bazy danych:

With dbsNorthwind

Debug.Print .Name & ", wersja " & .Version

For Each prpPętla In .Properties

On Error Resume Next

If prpPętla <> "" Then Debug.Print "    " & _

prpPętla.Name & " = " & prpPętla

On Error GoTo 0

Next prpPętla

.Close

End With

End Sub


Metoda CreateDatabase - przykład (DAO/Microsoft Jet)
Metoda CreateDatabase - przykład

W poniższym przykładzie posłużono się metodą CreateDatabase w celu utworzenia nowej, zaszyfrowanej bazy danych (obiektu Database).

Sub CreateDatabase()

Dim wrkDomyślny As Workspace

Dim dbsNowa As DATABASE

Dim prpPętla As Property

' Weź domyślny obszar roboczy:

Set wrkDomyślny = DBEngine.Workspaces(0)

' Sprawdź, czy nie istnieje już plik o nazwie

' takiej samej, jak nazwa nowo tworzonej bazy

' danych.

If Dir("NowaBD.mdb") <> "" Then Kill "NowaBD.mdb"

' Utwórz nową, zaszyfrowaną bazę danych o

 	' określonym porządku sortowania:

Set dbsNowa = _

wrkDomyślny.CreateDatabase("NowaBD.mdb", _

dbLangGeneral, dbEncrypt)

With dbsNowa

Debug.Print "Właściwości bazy danych " & .Name

' Wypisz właściwości nowo utworzonego obiektu

' Database:

For Each prpPętla In .Properties

If prpPętla <> "" Then Debug.Print "    " & _

prpPętla.Name & " = " & prpPętla

Next prpPętla

End With

dbsNowa.Close

End Sub


Metoda CreateField - przykład (DAO/Microsoft Jet)
Metoda CreateField - przykład

W poniższym przykładzie posłużono się metodą CreateField w celu utworzenia trzech pól (obiektów Fields) składających się na nową definicję tabeli (obiekt TableDef). Następnie wyświetlane są właściwości tych obiektów typu Field, które zostały ustawione automatycznie przez metodę CreateField. (Właściwości o wartościach pustych, nie określonych podczas tworzenia pola, nie są pokazywane.)

Sub CreateField()

Dim dbsNorthwind As Database

Dim tdfNowa As TableDef

Dim fldPętla As Field

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfNowa = dbsNorthwind.CreateTableDef( _

"NowaDefinicjaTabeli")

' Utwórz i dołącz nowe obiekty Field do nowego

' obiektu TableDef:

With tdfNowa

' Jeżeli nie podano rozmiaru pola, metoda

' CreateField ustawia domyślny rozmiar nowego

' obiektu Field.

.Fields.Append .CreateField("PoleTekstowe", _

 dbText)

.Fields.Append .CreateField("PoleInteger", _

 dbInteger)

.Fields.Append .CreateField("PoleDate", dbDate)

End With

dbsNorthwind.TableDefs.Append tdfNowa

Debug.Print "Właściwości nowych pól bazy danych " _

& tdfNowa.Name

' Wylicz elementy kolekcji Fields w celu pokazania

 	' właściwości nowych obiektów Field:

For Each fldPętla In tdfNowa.Fields

Debug.Print "    " & fldPętla.Name

For Each prpPętla In fldPętla.Properties

' Właściwości, które w kontekście definicji

 	' tabeli są nieprawidłowe, spowodują

' wystąpienie błędu przy próbie odczytania

' ich wartości.

On Error Resume Next

Debug.Print "        " & prpPętla.Name & _

" - " & _

IIf(prpPętla = "", "[pusta]", prpPętla)

On Error GoTo 0

Next prpPętla

Next fldPętla

' Usuń nową definicję tabeli, gdyż jest to tylko

' przykład.

dbsNorthwind.TableDefs.Delete tdfNowa.Name

dbsNorthwind.Close

End Sub


Metoda CreateIndex - przykład (DAO/Microsoft Jet)
Metoda CreateIndex - przykład

W poniższym przykładzie za pomocą metody CreateIndex tworzone są dwa nowe obiekty Index, a następnie dołączane są do kolekcji Indexes, należącej do obiektu TableDef tabeli Pracownicy. Następnie wyliczane są elementy kolekcji Indexes obiektu TableDef, kolekcję Fields nowych obiektów Index oraz kolekcję Properties nowych obiektów Index. Do uruchomienia przykładowej procedury niezbędna jest funkcja UtwórzOpisIndeksów.

Sub CreateIndex()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim idxKraj As Index

Dim idxImię As Index

Dim idxPętla As Index

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfPracownicy = dbsNorthwind!Pracownicy

With tdfPracownicy

' Utwórz pierwszy obiekt Index, utwórz obiekty

 	' Field i dołącz je do obiektu Index, a

' następnie dołącz obiekt Index do kolekcji

' Indexes należącej do obiektu TableDef:

Set idxKraj = .CreateIndex("IndeksKraju")

With idxKraj

.Fields.Append .CreateField("Kraj")

.Fields.Append .CreateField("Nazwisko")

.Fields.Append .CreateField("Imię")

End With

.Indexes.Append idxKraj

' Utwórz drugi obiektu Index, utwórz obiekty

' Field i dołącz je do obiektu Index, a

' następnie dołącz obiekt Index do kolekcji

' Indexes należącej do obiektu TableDef:

Set idxImię = .CreateIndex

With idxImię

.Name = "IndeksImienia"

.Fields.Append .CreateField("Imię")

.Fields.Append .CreateField("Nazwisko")

End With

.Indexes.Append idxImię

' Odświeżenie kolekcji w celu uzyskania dostępu

 	' do nowych obiektów typu Index:

.Indexes.Refresh

Debug.Print .Indexes.Count & _

" Indeksy w tabeli " & .Name & ":"

' Wyliczenie elementów kolekcji Indexes:

For Each idxPętla In .Indexes

Debug.Print "    " & idxPętla.Name

Next idxPętla

' Wydrukuj raport:

UtwórzOpisIndeksów idxKraj

UtwórzOpisIndeksów idxImię

' Usuń nowo utworzone obiekty Index, gdyż jest

 	' to tylko przykład.

.Indexes.Delete idxKraj.Name

.Indexes.Delete idxImię.Name

End With

dbsNorthwind.Close

End Sub

Function UtwórzOpisIndeksów(idxPom As Index)

Dim fldPętla As Field

Dim prpPętla As Property

With idxPom

' Wylicz elementy kolekcji Fields obiektu

' Index:

Debug.Print "Pola indeksu " & .Name

For Each fldPętla In .Fields

Debug.Print "    " & fldPętla.Name

Next fldPętla

' Wylicz elementy kolekcji Properties obiektu

' Index:

Debug.Print "Właściwości indeksu " & .Name

For Each prpPętla In .Properties

Debug.Print "    " & prpPętla.Name & " - " _

IIf(prpPętla = "", "[pusta]", prpPętla)

Next prpPętla

End With

End Function


Metoda CreateProperty - przykład (DAO/Microsoft Jet)
Metoda CreateProperty - przykład

W poniższym przykładzie podejmowana jest próba ustawienia właściwości zdefiniowanej przez użytkownika. Jeżeli właściwość ta nie istnieje, wykorzystuje się metodę CreateProperty w celu utworzenia i nadania wartości nowej właściwości. Do uruchomienia przykładowej procedury niezbędna jest procedura UstawWłaściwość.

Sub CreateProperty()

Dim dbsNorthwind As Database

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Ustaw właściwość Archiwum na wartość True:

UstawWłaściwość dbsNorthwind, "Archiwum", True

With dbsNorthwind

Debug.Print "Właściwości bazy danych " & .Name

' Wylicz elementy kolekcji Properties bazy

' danych Northwind:

For Each prpPętla In .Properties

If prpPętla <> "" Then Debug.Print "    " & _

prpPętla.Name & " = " & prpPętla

Next prpPętla

' Usuń nową właściwość, gdyż jest to tylko

' przykład:

.Properties.Delete "Archiwum"

.Close

End With

End Sub

Sub UstawWłaściwość(dbsPom As Database, _

strNazwa As String, booPom As Boolean)

Dim prpNowa As Property

Dim errPętla As Error

' Próba ustawienia podanej właściwości:

On Error GoTo BłądWłaściwości

dbsPom.Properties("strNazwa") = booPom

On Error GoTo 0

Exit Sub

BłądWłaściwości:

' Błąd 3270 oznacza brak właściwości.

If DBEngine.Errors(0).Number = 3270 Then

' Utwórz właściwość, ustaw jej wartość i dołącz

 	' do kolekcji Properties:

Set prpNowa = dbsPom.CreateProperty(strNazwa, _

dbBoolean, booPom)

dbsPom.Properties.Append prpNowa

Resume Next

Else

' Jeżeli pojawił się inny błąd, wyświetlany jest

 	' komunikat:

For Each errPętla In DBEngine.Errors

MsgBox "Błąd numer: " & errPętla.Number _

& vbCr & errPętla.Description

Next errPętla

End

End If

End Sub


Metoda CreateQueryDef - przykład (DAO)
Metoda CreateQueryDef - przykład

W poniższym przykładzie posłużono się metodą CreateQueryDef w celu utworzenia i wykonania zarówno tymczasowej, jak i trwałej kwerendy (obiektu QueryDef). Do uruchomienia przykładowej procedury niezbędna jest procedura PobierzPom.

Sub CreateQueryDef()

Dim dbsNorthwind As Database

Dim qdfPom As QueryDef

Dim qdfNowa As QueryDef

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Utwórz tymczasowy obiekt QueryDef:

Set qdfPom = .CreateQueryDef("", _

"SELECT * FROM Pracownicy")

' Otwórz zestaw rekordów i wydrukuj raport:

PobierzPom qdfPom

' Utwórz trwały obiekt QueryDef:

Set qdfNowa = .CreateQueryDef("NowaKwerenda", _

"SELECT * FROM Kategorie")

' Otwórz zestaw rekordów i wydrukuj raport:

PobierzPom qdfNowa

' Usuń nową kwerendę, gdyż jest to tylko

' przykład.

.QueryDefs.Delete qdfNowa.Name

.Close

End With

End Sub

Function PobierzPom(qdfPom As QueryDef)

Dim rstPom As Recordset

With qdfPom

Debug.Print .Name

Debug.Print "    " & .SQL

' Otwórz zestaw rekordów według obiektu

' QueryDef:

Set rstPom = .OpenRecordset(dbOpenSnapshot)

With rstPom

' Wypełnij zestaw rekordów i pokaż liczbę

' rekordów należących do zestawu:

.MoveLast

Debug.Print "    Liczba rekordów = " & _

.RecordCount

Debug.Print

.Close

End With

End With

End Function


Metoda CreateRelation - przykład (DAO/Microsoft Jet)
Metoda CreateRelation - przykład

W poniższym przykładzie posłużono się metodą CreateRelation w celu utworzenia obiektu Relation między tabelą Pracownicy a nową tabelą o nazwie Wydziały. Przykład ten pokazuje również, że utworzenie nowego obiektu Relation powoduje jednoczesne utworzenie wszystkich niezbędnych obiektów typu Index w tabeli obcej (indeks WydziałyPracownicy w tabeli Pracownicy).

Sub MetodaCreateRelation()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim tdfNowa As TableDef

Dim idxNowy As Index

Dim relNowa As Relation

Dim idxPętla As Index

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Dodaj nowe pole do tabeli Pracownicy:

Set tdfPracownicy = .TableDefs!Pracownicy

tdfPracownicy.Fields.Append _

tdfPracownicy.CreateField("KodWydziału", _

dbInteger, 2)

' Utwórz nową tabele o nazwie Wydziały:

Set tdfNowa = .CreateTableDef("Wydziały")

With tdfNowa

' Utwórz i dołącz obiekty Field do kolekcji

' Fields należącej do nowego obiektu

' TableDef:

.Fields.Append .CreateField( _

"KodWydziału", dbInteger, 2)

.Fields.Append .CreateField( _

"NazwaWydziału", dbText, 20)

' Utwórz obiekt Index dla tabeli Wydziały:

Set idxNowy = _

.CreateIndex("IndeksKoduWydziału")

' Utwórz i dołącz obiekt Field do kolekcji

' Fields należącej do nowego obiektu Index:

idxNowy.Fields.Append _

idxNowy.CreateField("KodWydziału")

' Indeks w tablicy podstawowej musi być

' unikatowy po to, by mógł wejść w skład

' obiektu Relation.

idxNowy.Unique = True

.Indexes.Append idxNowy

End With

.TableDefs.Append tdfNowa

' Utwórz obiekt Relation o nazwie

' PracownicyWydziały pochodzącej od nazw

' dwóch tabel uczestniczących w związku:

Set relNowa = _

.CreateRelation("PracownicyWydziały", _

tdfNowa.Name, tdfPracownicy.Name, _

dbRelationUpdateCascade)

' Utwórz obiekt Field dla kolekcji Fields

' należącej do nowego obiektu Relation; ustaw

' właściwości Name i ForeignName na podstawie

' nazw pól mających uczestniczyć w związku:

relNowa.Fields.Append _

relNowa.CreateField("KodWydziału")

relNowa.Fields!KodWydziału.ForeignName = _

"KodWydziału"

.Relations.Append relNowa

' Wydrukuj raport:

Debug.Print "Właściwości związku" & _

relNowa.Name & ":"

Debug.Print "    Tabela = " & relNowa.Table

Debug.Print "    Tabela obca = " & _

relNowa.ForeignTable

Debug.Print "Pola relacji " & relNowa.Name & ":"

With relNowa.Fields!KodWydziału

Debug.Print "    " & .Name

Debug.Print "        Nazwa = " & .Name

Debug.Print "        Nazwa obca = " & _

.ForeignName

End With

Debug.Print "Indeksy w tabeli " & _

tdfPracownicy.Name & ":"

For Each idxPętla In tdfPracownicy.Indexes

Debug.Print "    " & idxPętla.Name & _

", Obcy = " & idxPętla.Foreign

Next idxPętla

' Usuń nowe obiekty, gdyż jest to tylko

' przykład.

.Relations.Delete relNowa.Name

.TableDefs.Delete tdfNowa.Name

tdfPracownicy.Fields.Delete "KodWydziału"

.Close

End With

End Sub


Metoda CreateTableDef - przykład (DAO/Microsoft Jet)
Metoda CreateTableDef - przykład

W poniższym przykładzie utworzono w bazie danych Northwind nowy obiekt TableDef.

Sub CreateTableDefX()

Dim dbsNorthwind As Database

Dim tdfNowa As TableDef

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Utwórz nowy obiekt TableDef:

Set tdfNowa = dbsNorthwind.CreateTableDef( _

"Przedstawiciele")

With tdfNowa

' Twórz pola i dołączaj je do nowego obiektu

' TableDef. Należy to zrobić przed dołączeniem

 	' obiektu TableDef do kolekcji TableDefs

' należącej do bazy danych Northwind.

.Fields.Append .CreateField("Imię", dbText)

.Fields.Append .CreateField("Nazwisko", dbText)

.Fields.Append .CreateField("Telefon", dbText)

.Fields.Append .CreateField("Uwagi", dbMemo)

Debug.Print _

"Właściwości nowego obiektu TableDef " & _

"przed dołączeniem do kolekcji:"

' Wylicz elementy kolekcji Properties nowego

' obiektu TableDef:

For Each prpPętla In .Properties

On Error Resume Next

If prpPętla <> "" Then Debug.Print "    " & _

    prpPętla.Name & " = " & prpPętla

On Error GoTo 0

Next prpPętla

' Dołącz nowy obiektu TableDef do bazy danych

' Northwind:

dbsNorthwind.TableDefs.Append tdfNowa

Debug.Print _

" Właściwości nowego obiektu TableDef " & _

"po dołączeniu do kolekcji:"

' Wylicz elementy kolekcji Properties należącej

 	' do nowego obiektu typu TableDef:

For Each prpPętla In .Properties

On Error Resume Next

If prpPętla <> "" Then Debug.Print "    " & _

    prpPętla.Name & " = " & prpPętla

On Error GoTo 0

Next prpPętla

End With

' Usuń nowy obiekt TableDef, gdyż jest to tylko

' przykład.

dbsNorthwind.TableDefs.Delete "Przedstawiciele"

dbsNorthwind.Close

End Sub


Metoda Delete - przykład (DAO)
Metoda Delete - przykład

W poniższym przykładzie posłużono się metodą Delete w celu usunięcia określonego rekordu z zestawu rekordów (obiektu Recordset). Do uruchomienia przykładowej procedury niezbędna jest procedura UsuńRekord.

Sub DeleteX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim lngNr As Long

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

' Dodaj tymczasowy, rekord, który zostanie potem

' usunięty:

With rstPracownicy

.Index = "KluczPodstawowy"

.AddNew

!FirstName = "Gustaw"

!LastName = "Łuć"

.Update

.Bookmark = .LastModified

lngNr = !NrPracownika

End With

' Usuń rekord pracownika o podanym numerze:

UsuńRekord rstPracownicy, lngNr

rstPracownicy.Close

dbsNorthwind.Close

End Sub

Sub UsuńRekord(rstPom As Recordset, _

lngSzukaj As Long)

With rstPom

.Seek "=", lngSzukaj

If .NoMatch Then

MsgBox "W kartotece nie ma pracownika o " & _

"numerze " & lngSzukaj & "!"

Else

.Delete

MsgBox "Rekord pracownika o numerze " & _

lngSzukaj & " został usunięty!"

End If

End With

End Sub


Metoda Edit - przykład (DAO)
Metoda Edit - przykład

W poniższym przykładzie posłużono się metodą Edit w celu zmiany bieżących danych oznaczających imię i nazwisko. Do uruchomienia przykładowej procedury niezbędna jest procedura ZmieńDane.

Sub EditX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim strPoprzImię As String

Dim strPoprzNazw As String

Dim strImię As String

Dim strNazwisko As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenDynaset)

' Zachowaj pierwotne dane:

strPoprzImię = rstPracownicy!Imię

strPoprzNazw = rstPracownicy!Nazwisko

' Wprowadź do rekordu nowe dane:

strImię = Trim(InputBox("Podaj imię:"))

strNazwisko = Trim(InputBox("Podaj nazwisko:"))

' Kontynuuj, jeżeli użytkownik wprowadził dane do

' obu pól.

If strImię <> "" and strNazwisko <> "" Then

' Uaktualnij rekord przez umieszczenie w nim

' nowych danych:

ZmieńDane rstPracownicy, strImię, strNazwisko

With rstPracownicy

' Pokaż poprzednie i nowe dane:

Debug.Print "Poprzednie dane: " & _

strPoprzImię & " " & strPoprzNazw

Debug.Print "Nowe dane: " & !Imię & _

" " & !Nazwisko

' Przywróć pierwotne dane, gdyż jest to tylko

' przykład.

.Edit

!Imię = strPoprzImię

!Nazwisko = strPoprzNazw

.Update

End With

Else

Debug.Print " Należy wprowadzić ciągi " & _

"znaków określające imię i nazwisko!"

End If

rstPracownicy.Close

dbsNorthwind.Close

End Sub

Sub ZmieńDane(rstPom As Recordset, _

strIm As String, strNaz As String)

' Wprowadzenie zmian do rekordu i ustawienie

' zakładki, aby rekordem bieżącym pozostał

' ten sam rekord:

With rstPom

.Edit

!Imię = strIm

!Nazwisko = strNaz

.Update

.Bookmark = .LastModified

End With

End Sub


Metoda Execute - przykład (DAO)
Metoda Execute - przykład

W poniższym przykładzie zaprezentowano użycie metody Execute, uruchamiając ją zarówno z obiektu QueryDef, jak i z obiektu Database. Do uruchomienia przykładowej procedury niezbędne są procedury WykonajKwerendę i WypiszWyniki.

Sub ExecuteX()

Dim dbsNorthwind As Database

Dim strSQLZmień As String

Dim strSQLPrzywróć As String

Dim qdfZmień As QueryDef

Dim rstPracownicy As Recordset

Dim errPętla As Error

' Zdefiniuj dwie instrukcje SQL dla kwerend

' funkcjonalnych:

strSQLZmień = "UPDATE Pracownicy SET Kraj = " _

& "'Stany Zjednoczone' WHERE Kraj = 'USA'"

strSQLPrzywróć = "UPDATE Pracownicy SET Kraj = " _

& "'USA' WHERE Kraj = 'Stany Zjednoczone'"

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Utwórz tymczasowy obiekt QueryDef:

Set qdfZmień = dbsNorthwind.CreateQueryDef("", _

strSQLZmień)

Set rstPracownicy = dbsNorthwind.OpenRecordset( _

"SELECT Nazwisko, Kraj FROM Pracownicy", _

dbOpenForwardOnly)

' Wydrukuj raport na podstawie pierwotnych danych:

Debug.Print "Dane w tabeli Pracownicy przed " & _

"wykonaniem kwerendy"

WypiszWyniki rstPracownicy

' Uruchom kwerendę tymczasową:

WykonajKwerendę qdfZmień, rstPracownicy

' Wydrukuj raport z nowymi danymi:

Debug.Print "Dane w tabeli Pracownicy po " & _

"wykonaniu kwerendy"

WypiszWyniki rstPracownicy

' Uruchom kwerendę funkcjonalną, by przywrócić

' poprzednie dane. Przechwytuj błędy sprawdzając,

' w razie potrzeby, kolekcję Errors:

On Error GoTo Błąd_Wykonania

dbsNorthwind.Execute strSQLPrzywróć, dbFailOnError

On Error GoTo 0

' Pobierz bieżące dane przez ponowne wykonanie

' kwerendy dla zestawu rekordów:

rstPracownicy.Requery

' Wydrukuj raport z przywróconymi danymi:

Debug.Print "Dane po wykonaniu kwerendy " & _

"przywracającej pierwotne dane"

WypiszWyniki rstPracownicy

rstPracownicy.Close

Exit Sub

Błąd_Wykonania:

' Powiadom użytkownika o wszelkich błędach

' powstałych w wyniku wykonania kwerendy

If DBEngine.Errors.Count > 0 Then

For Each errPętla In DBEngine.Errors

MsgBox "Błąd numer: " & errPętla.Number & _

vbCr & errPętla.Description

Next errPętla

End If

Resume Next

End Sub

Sub WykonajKwerendę(qdfPom As QueryDef, _

rstPom As Recordset)

Dim errPętla As Error

' Uruchom podaną kwerendę. Przechwytuj błędy

' sprawdzając, w razie potrzeby, kolekcję Errors:

On Error GoTo Błąd_Wykonania

qdfPom.Execute dbFailOnError

On Error GoTo 0

' Pobierz bieżące dane przez ponowne wykonanie

' kwerendy dla zestawu rekordów:

rstPom.Requery

Exit Sub

Błąd_Wykonania:

' Powiadom użytkownika o wszelkich błędach

' powstałych w wyniku wykonania kwerendy:

If DBEngine.Errors.Count > 0 Then

For Each errPętla In DBEngine.Errors

MsgBox "Błąd numer: " & errPętla.Number & _

vbCr & errPętla.Description

Next errPętla

End If

Resume Next

End Sub

Sub WypiszWyniki(rstPom As Recordset)

' Wylicz elementy zestawu rekordów

Do While Not rstPom.EOF

Debug.Print "    " & rstPom!Nazwisko & ", " & _

rstPom!Kraj

rstPom.MoveNext

Loop

End Sub


Metody FindFirst, FindLast, FindNext i FindPrevious - przykład (DAO/Microsoft Jet)
Metody FindFirst, FindLast, FindNext i FindPrevious - przykład

W poniższym przykładzie wykorzystano metody FindFirst, FindLast, FindNext i FindPrevious do przesuwania wskaźnika rekordu w zestawie rekordów (obiekcie typu Recordset). Użytkownik podaje ciąg, który ma być odnaleziony, oraz wybiera metodę, która ma być zastosowana. Do uruchomienia przykładowej procedury niezbędna jest funkcja ZnajdźRekord.

Sub FindFirstX()

Dim dbsNorthwind As Database

Dim rstKlienci As Recordset

Dim strKraj As String

Dim varZakładka As Variant

Dim strKomunikat As String

Dim intPolecenie As Integer

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstKlienci = dbsNorthwind.OpenRecordset( _

"SELECT NazwaFirmy, Miasto, Kraj " & _

"FROM Klienci ORDER BY NazwaFirmy", _

dbOpenSnapshot)

Do While True

' Pobierz dane od użytkownika i zbuduj

' poszukiwany ciąg:

strKraj = _

Trim(InputBox("Wprowadź poszukiwany kraj."))

If strKraj = "" Then Exit Do

strKraj = "Kraj = '" & strKraj & "'"

With rstKlienci

' Wypełnij zestaw rekordów:

.MoveLast

' Znajdź pierwszy rekord o danych zgodnych z

' poszukiwanym ciągiem. Wyjdź z pętli, jeżeli

' taki rekord nie istnieje:

.FindFirst strKraj

If .NoMatch Then

MsgBox "Nie odnaleziono żadnego rekordu" _

& "z krajem o nazwie " & strKraj & "."

Exit Do

End If

Do While True

' Zapamiętaj zakładkę bieżącego rekordu:

varZakładka = .Bookmark

' Użytkownik wybiera metodę, która ma być

' zastosowana.

strKomunikat = "Firma: " & !NazwaFirmy & _

vbCr & "Adres: " & !Miasto & ", " & _

!Kraj & vbCr & vbCr & _

strKraj & vbCr & vbCr & _

"[1 - FindFirst, 2 - FindLast, " & _

vbCr & "3 - FindNext, " & _

"4 - FindPrevious]"

intPolecenie = _

Val(Left(InputBox(strKomunikat), 1))

If intPolecenie < 1 Or intPolecenie > 4 _

Then Exit Do

' Użyj wybranej metody Find; w przypadku

' niepowodzenia poszukiwania powróć do

' rekordu, który ostatnio był rekordem

' bieżącym:

If ZnajdźRekord(intPolecenie, _

rstKlienci, strKraj) = False Then

.Bookmark = varZakładka

MsgBox "Brak poszukiwanych danych-" & _

"powrót do rekordu bieżącego."

End If

Loop

End With

Exit Do

Loop

rstKlienci.Close

dbsNorthwind.Close

End Sub

Function ZnajdźRekord(intMetoda As Integer, _

rstPom As Recordset, _

strSzukaj As String) As Boolean

' Użyj metody wyszukiwania wybranej przez

' użytkownika:

Select Case intMetoda

Case 1

rstPom.FindFirst strSzukaj

Case 2

rstPom.FindLast strSzukaj

Case 3

rstPom.FindNext strSzukaj

Case 4

rstPom.FindPrevious strSzukaj

End Select

' Ustaw zwracaną wartość na podstawie właściwości

' NoMatch:

ZnajdźRekord = IIf(rstPom.NoMatch, False, True)

End Function


Metoda GetRows - przykład (DAO)
Metoda GetRows - przykład

W poniższym przykładzie wykorzystano metodę GetRows w celu pobrania określonej liczby wierszy z zestawu rekordów (obiektu typu Recordset) i wypełnienia tablicy uzyskanymi w ten sposób danymi. Liczbę wierszy mniejszą od zadanej metoda GetRows zwraca w dwóch przypadkach: jeżeli podczas wyszukiwania osiągnie koniec pliku (EOF) lub gdy podejmie próbę pobrania rekordu usuniętego przez innego użytkownika. Funkcja PobierzWiersze, niezbędna do uruchomienia przykładowej procedury, zwraca wartość False tylko w tym drugim przypadku.

Sub GetRowsX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim strKomunikat As String

Dim intWiersze As Integer

Dim avarRekordy As Variant

Dim intRekord As Integer

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = dbsNorthwind.OpenRecordset( _

"SELECT Imię, Nazwisko, Tytuł " & _

"FROM Pracownicy ORDER BY Nazwisko", _

 dbOpenSnapshot)

With rstPracownicy

Do While True

' Pobierz od użytkownika liczbę wierszy.

strKomunikat = "Wprowadź liczbę wierszy," & _

" które mają być pobrane."

intWiersze = Val(InputBox(strKomunikat))

If intWiersze <= 0 Then Exit Do

' Jeżeli działanie funkcji PobierzWiersze

' zakończy się powodzeniem, drukowane są

' wyniki i podawana jest informacja o

' ewentualnym osiągnięciu końca pliku.

If PobierzWiersze(rstPracownicy, _

intWiersze, avarRekordy) Then

If intWiersze > UBound(avarRekordy, 2) _

+ 1 Then

Debug.Print "(Liczba rekordów w " & _

"zestawie jest zbyt mała " & _

"do pobrania " & intWiersze & _

" wierszy.)"

End If

Debug.Print _

"Liczba odnalezionych rekordów: " & _

UBound(avarRekordy, 2) + 1 & "."

' Wydrukuj pobrane dane:

For intRekord = 0 To UBound( _

avarRekordy, 2)

Debug.Print "    " & _

avarRekordy(0, intRekord) & " " & _

avarRekordy(1, intRekord) & ", " & _

avarRekordy(2, intRekord)

Next intRekord

Else

' Przyjmując, że błąd metody GetRows był

' spowodowany zmianami wprowadzonymi do

' danych przez innego użytkownika,

' zastosuj metodę Requery do odświeżenia

' zestawu rekordów i zacznij od nowa.

If .Restartable Then

If MsgBox("Metoda GetRows " & _

"zakończyła się niepowodzeniem " & _

"— powtórzyć?", vbYesNo) =vbYes Then

.Requery

Else

Debug.Print "Metoda GetRows " & _

"zakończyła się niepowodzeniem!"

Exit Do

End If

Else

Debug.Print "Metoda GetRows " & _

"zakończyła się niepowodzeniem!" & _

" Ponowne wypełnienie zestawu " & _

"rekordów nie jest możliwe!"

Exit Do

End If

End If

' Ponieważ po użyciu metody GetRows wskaźnik

 	' bieżącego rekordu pozostaje ustawiony na

' ostatnio użytym rekordzie, należy przesunąć

 	' ten wskaźnik z powrotem na początek zestawu

 	' rekordów, zanim w pętli rozpocznie się

' następne wyszukiwanie.

.MoveFirst

Loop

End With

rstPracownicy.Close

dbsNorthwind.Close

End Sub

Function PobierzWiersze(rstPom As Recordset, _

intLiczba As Integer, avarDane As Variant) As Boolean

' Zapamiętaj w tablicy wyniki zwrócone przez metodę

 	' GetRows.

avarDane = rstPom.GetRows(intLiczba)

' Wartość False jest zwracana tylko wtedy, gdy

' metoda GetRows zwróciła mniejszą od zadanej

' liczbę wierszy, jednak nie z powodu osiągnięcia

 	' końca zestawu rekordów.

If intLiczba > UBound(avarDane, 2) + 1 And _

Not rstPom.EOF Then

PobierzWiersze = False

Else

PobierzWiersze = True

End If

End Function


Metoda Move - przykład (DAO)
Metoda Move - przykład

W poniższym przykładzie posłużono się metodą Move w celu ustawienia wskaźnika rekordu zgodnie z żądaniem użytkownika.

Sub MoveX()

Dim dbsNorthwind As Database

Dim rstDostawcy As Recordset

Dim varZakładka As Variant

Dim strPolecenie As String

Dim lngPrzesunięcie As Long

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstDostawcy = dbsNorthwind.OpenRecordset( _

"SELECT NazwaFirmy, " & "Miasto, Kraj " & _

"FROM Dostawcy ORDER BY NazwaFirmy", _

dbOpenDynaset)

With rstDostawcy

' Wypełnij zestaw rekordów:

.MoveLast

.MoveFirst

Do While True

' Wyświetl informacje o bieżącym rekordzie i

' zażądaj podania liczby rekordów

' określającej przesunięcie

strPolecenie = InputBox( _

"Rekord " & (.AbsolutePosition + 1) & _

" z " & .RecordCount & vbCr & _

"Firma: " & !NazwaFirmy & vbCr & _

"Adres: " & !Miasto & ", " & !Kraj & _

vbCr & vbCr & "Wprowadź liczbę " & _

"rekordów (dodatnią lub ujemną) " & _

"określającą przesunięcie.")

If strPolecenie = "" Then Exit Do

' Zapamiętaj zakładkę na wypadek, gdyby

' metoda Move nie zadziałała:

varZakładka = .Bookmark

' Metoda Move wymaga parametru o typie danych

 	' Long.

lngPrzesunięcie = CLng(strPolecenie)

.Move lngPrzesunięcie

' Wykryj znacznik początku (BOF) lub końca

' (EOF) pliku:

If .BOF Then

MsgBox "Za daleko do tyłu! " & _

"Powrót do bieżącego rekordu."

.Bookmark = varZakładka

End If

If .EOF Then

MsgBox "Za daleko do przodu! " & _

"Powrót do bieżącego rekordu."

.Bookmark = varZakładka

End If

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Metody MoveFirst, MoveLast, MoveNext i MovePrevious - przykład (DAO)
Metody MoveFirst, MoveLast, MoveNext i MovePrevious - przykład

W poniższym przykładzie wykorzystano metody MoveFirst, MoveLast, MoveNext i MovePrevious do przesunięcia wskaźnika rekordu w zestawie rekordów (obiekcie typu Recordset). Wyboru metody dokonuje użytkownik. Do uruchomienia przykładowej procedury niezbędna jest procedura Przesuń.

Sub MoveFirstX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim strKomunikat As String

Dim intPolecenie As Integer

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = dbsNorthwind.OpenRecordset( _

"SELECT Imię, Nazwisko FROM Pracownicy " & _

"ORDER BY Nazwisko", dbOpenSnapshot)

With rstPracownicy

' Wypełnij zestaw rekordów:

.MoveLast

.MoveFirst

Do While True

' Wyświetl informacje o bieżącym rekordzie

' i zażądaj od użytkownika wyboru metody.

strKomunikat = "Nazwisko: " & !Imię & " " & _

!Nazwisko & vbCr & "Rekord " & _

(.AbsolutePosition + 1) & " z " & _

.RecordCount & vbCr & vbCr & _

"[1 - MoveFirst, 2 - MoveLast, " & _

vbCr & "3 - MoveNext, 4 - MovePrevious]"

intPolecenie = _

Val(Left(InputBox(strKomunikat), 1))

If intPolecenie < 1 Or intPolecenie > 4 _

Then Exit Do

'Wywołaj metodę wybraną przez użytkownika:

MoveAny intPolecenie, rstPracownicy

Loop

.Close

End With

dbsNorthwind.Close

End Sub

Sub Przesuń(intMetoda As Integer, _

rstPom As Recordset)

' Użyj podanej metody, przechwytując znaczniki BOF

' i EOF:

With rstPom

Select Case intMetoda

Case 1

.MoveFirst

Case 2

.MoveLast

Case 3

.MoveNext

If .EOF Then

MsgBox "Koniec zestawu rekordów!"

.MoveLast

End If

Case 4

.MovePrevious

If .BOF Then

MsgBox "Początek zestawu rekordów!"

.MoveFirst

End If

End Select

End With

End Sub


Metoda NewPassword - przykład (DAO/Microsoft Jet)
Metoda NewPassword - przykład

W poniższym przykładzie od użytkownika żąda się podania nowego hasła dla Pawła Kowalskiego. Jeżeli podany ciąg ma długość od 1 do 14 znaków, uruchomiona zostaje metoda NewPassword, która realizuje zmianę hasła. Użytkownik musi być zalogowany jako Paweł Kowalski lub jako członek grupy Admins.

Sub NewPasswordX()

Dim wrkDomyślny As Workspace

Dim usrNowy As User

Dim grpNowa As Group

Dim grpCzłonek As Group

Dim strHasło As String

' Weź domyślny obszar roboczy:

Set wrkDomyślny = DBEngine.Workspaces(0)

With wrkDomyślny

' Utwórz i dołącz nowego użytkownika:

Set usrNowy = .CreateUser("Paweł Kowalski", _

"abc123DEF456", "Hasło1")

.Users.Append usrNowy

' Utwórz i dołącz nową grupę:

Set grpNowa = .CreateGroup("Księgowość", _

"UVW987xyz654")

.Groups.Append grpNowa

' Włącz nowego użytkownika do nowej grupy.

Set grpCzłonek = _

usrNowy.CreateGroup("Księgowość")

usrNowy.Groups.Append grpCzłonek

' Zażądaj od użytkownika podania nowego hasła.

' W przypadku wprowadzenia zbyt długiego ciągu

' żądanie jest ponawiane.

Do While True

strHasło = InputBox("Podaj nowe hasło:")

Select Case Len(strHasło)

Case 1 To 14

usrNowy.NewPassword "Hasło1", strHasło

MsgBox "Hasło zostało zmienione!"

Exit Do

Case Is > 14

MsgBox "Hasło jest za długie!"

Case 0

Exit Do

End Select

Loop

' Usuń nowego użytkownika i nową grupę,

' gdyż jest to tylko przykład.

.Users.Delete "Paweł Kowalski"

.Groups.Delete "Księgowość"

End With

End Sub


Metoda Refresh - przykład (DAO)
Metoda Refresh - przykład

W poniższym przykładzie wykorzystano metodę Refresh do aktualizacji kolekcji Fields tabeli Kategorie. Aktualizacja odbywa się w związku ze zmianami wprowadzonymi do danych określających liczby porządkowe pól (OrdinalPosition). Kolejność pól w kolekcji Fields zmienia się dopiero po użyciu metody Refresh.

Sub RefreshX()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim aintPozycja() As Integer

Dim astrNazwaPola() As String

Dim intPom As Integer

Dim fldPętla As Field

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfPracownicy = _

dbsNorthwind.TableDefs("Kategorie")

With tdfPracownicy

' Wyświetl pierwotne liczby porządkowe i

' zapamiętaj je w tablicy:

Debug.Print "Pierwotne liczby porządkowe " & _

"pól w definicji tabeli."

ReDim aintPozycja(0 To .Fields.Count - 1) _

As Integer

ReDim astrNazwaPola(0 To .Fields.Count - 1) _

As String

For intPom = 0 To .Fields.Count - 1

aintPozycja(intPom) = _

.Fields(intPom).OrdinalPosition

astrNazwaPola(intPom) = .Fields(intPom).Name

Debug.Print, aintPozycja(intPom), _

astrNazwaPola(intPom)

Next intPom

' Zmiana liczb porządkowych:

For Each fldPętla In .Fields

fldPętla.OrdinalPosition = _

100 - fldPętla.OrdinalPosition

Next fldPętla

Set fldPętla = Nothing

' Wydrukuj nowe dane:

Debug.Print "Nowe liczby porządkowe przed " & _

"wykonaniem metody Refresh."

For Each fldPętla In .Fields

Debug.Print, fldPętla.OrdinalPosition, _

fldPętla.Name

Next fldPętla

.Fields.Refresh

' Wydrukuj nowe dane pokazując, w jaki sposób

' zmieniła się kolejność pól:

Debug.Print " Nowe liczby porządkowe po " & _

"użyciu metody Refresh."

For Each fldPętla In .Fields

Debug.Print, fldPętla.OrdinalPosition, _

fldPętla.Name

Next fldPętla

' Przywróć pierwotne liczby porządkowe:

For intPom = 0 To .Fields.Count - 1

.Fields(astrNazwaPola(intPom)) _

.OrdinalPosition = aintPozycja(intPom)

Next intPom

End With

dbsNorthwind.Close

End Sub


Metoda RepairDatabase - przykład (DAO/Microsoft Jet)
Metoda RepairDatabase - przykład

W poniższym przykładzie podejmowana jest próba naprawienia bazy danych o nazwie Northwind.mdb. Zamieszczonego kodu nie można użyć w module należącym do bazy danych Northwind.mdb.

Sub RepairDatabaseX()

Dim errPętla As Error

If MsgBox("Naprawić bazę danych Northwind?", _

vbYesNo) = vbYes Then

On Error GoTo Błąd_Naprawy

DBEngine.RepairDatabase "Northwind.mdb"

On Error GoTo 0

MsgBox "Procedura naprawy zakończona!"

End If

Exit Sub

Błąd_Naprawy:

For Each errPętla In DBEngine.Errors

MsgBox "Naprawa nie powiodła się!" & vbCr & _

"Błąd numer: " & errPętla.Number & _

vbCr & errPętla.Description

Next errPętla

End Sub


Metoda Seek - przykład (DAO/Microsoft Jet)
Metoda Seek - przykład

W poniższym przykładzie zaprezentowano użycie metody Seek w procedurze, która umożliwia użytkownikowi odszukanie produktu o podanym numerze identyfikacyjnym.

Sub SeekX()

Dim dbsNorthwind As Database

Dim rstProdukty As Recordset

Dim intPierwszy As Integer

Dim intOstatni As Integer

Dim strKomunikat As String

Dim strSzukaj As String

Dim varZakładka As Variant

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Trzeba otworzyć zestaw rekordów typu tabela, aby

' umożliwić w ten sposób korzystanie z indeksów, a

' tym samym również z metody Seek.

Set rstProdukty = dbsNorthwind.OpenRecordset( _

"Produkty", dbOpenTable)

With rstProdukty

' Set the index.

.Index = "KluczPodstawowy"

' Pobranie największego i najmniejszego numeru

' identyfikacyjnego produktu:

.MoveLast

intOstatni = !NrProduktu

.MoveFirst

intPierwszy = !NrProduktu

Do While True

' Wyświetl informacje o bieżącym rekordzie i

' zażądaj podania numeru identyfikacjynego

strKomunikat = "Numer produktu: " & _

!NrProduktu & vbCr & _

"Nazwa: " & !NazwaProduktu & vbCr & _

vbCr & "Podaj numer identyfikacyjny " & _

"produktu z zakresu od " & _

intPierwszy & " do " & intOstatni & "."

strSzukaj = InputBox(strKomunikat)

If strSzukaj = "" Then Exit Do

' Zapamiętaj bieżącą zakładkę na wypadek

' niepowodzenia metody Seek:

varZakładka = .Bookmark

.Seek "=", Val(strSzukaj)

' Powróć do bieżącego rekordu w przypadku

' niepowodzenia metody Seek:

If .NoMatch Then

MsgBox "Nie odnaleziono podanego " & _

"numeru identyfikacyjnego!"

.Bookmark = varZakładka

End If

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Metoda Update - przykład (DAO)
Metoda Update - przykład

W poniższym przykładzie zaprezentowano użycie metody Update w połączeniu z metodą Edit.

Sub UpdateX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim strPoprzImię As String

Dim strPoprzNazw As String

Dim strKomunikat As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

With rstPracownicy

.Edit

' Zapamiętanie pierwotnych danych:

strPoprzImię = !Imię

strPoprzNazw = !Nazwisko

' Zmiana danych w buforze edycyjnym:

!Imię = "Lidia"

!Nazwisko = "Kopara"

' Wyświetl zawartość bufora i pobierz dane

' od użytkownika:

strKomunikat = "Edycja danych:" & vbCr & _

"    Dane pierwotne = " & strPoprzImię & _

" " & strPoprzNazw & vbCr & _

"    Dane w buforze = " & _

!Imię & " " & !Nazwisko & vbCr & vbCr & _

"Użyć metody Update w celu zastąpienia " & _

"w zestawie rekordów danych pierwotnych " & _

"danymi z bufora?"

If MsgBox(strKomunikat, vbYesNo) = vbYes Then

.Update

Else

.CancelUpdate

End If

' Wyświetl dane wynikowe:

MsgBox "Dane w zestawie rekordów = " & _

!Imię & " " & !Nazwisko

' Przywróć dane pierwotne, gdyż jest to tylko

' przykład.

If Not (strPoprzImię = !Imię And _

strPoprzNazw = !Nazwisko) Then

.Edit

!Imię = strPoprzImię

!Nazwisko = strPoprzNazw

.Update

End If

.Close

End With

dbsNorthwind.Close

End Sub

W poniższym przykładzie pokazano użycie metody Update w połączeniu z metodą AddNew.

Sub Update2()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim strPoprzImię As String

Dim strPoprzNazw As String

Dim strKomunikat As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

With rstPracownicy

.AddNew

!Imię = "Nikodem"

!Nazwisko = "Dyzma"

' Wyświetl zawartość bufora i pobierz dane od

' użytkownika:

strKomunikat = "Dodanie nowych danych:" & _

vbCr & "    Dane w buforze = " & !Imię & _

" " & !Nazwisko & vbCr & vbCr & _

"Użyć metody Update w celu zapisania " & _

"zawartości bufora w zestawie rekordów?"

If MsgBox(strKomunikat, vbYesNoCancel) = _

vbYes Then

.Update

' Przejdź do nowego rekordu i wyświetl dane

' wynikowe:

.Bookmark = .LastModified

MsgBox " Dane w zestawie rekordów = " & _

!Imię & " " & !Nazwisko

' Usuń nowe dane, gdyż jest to tylko

' przykład.

.Delete

Else

.CancelUpdate

MsgBox "Nie dodano żadnego rekordu."

End If

.Close

End With

dbsNorthwind.Close

End Sub


Metoda CancelUpdate - przykład (DAO)
Metoda CancelUpdate - przykład

W poniższym przykładzie pokazano sposób użycia metody CancelUpdate w połączeniu z metodą AddNew.

Sub CancelUpdateX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim intPolecenie As Integer

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset( _

"Pracownicy", dbOpenDynaset)

With rstPracownicy

.AddNew

!Imię = "Paweł"

!Nazwisko = "Borkowski"

intPolecenie = _

MsgBox("Czy dodać nowy rekord dla: " & _

!Imię & " " & !Nazwisko & "?", vbYesNo)

If intPolecenie = vbYes Then

.Update

MsgBox "Rekord został dodany."

' Usuń dodany rekord, gdyż jest to tylko

' przykład.

.Bookmark = .LastModified

.Delete

Else

.CancelUpdate

MsgBox "Rekord nie został dodany."

End If

End With

dbsNorthwind.Close

End Sub

W poniższym przykładzie pokazano sposób użycia metody CancelUpdate w połączeniu z metodą Edit.

Sub CancelUpdateX2()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim strImię As String

Dim strNazwisko As String

Dim intPolecenie As Integer

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

 dbsNorthwind.OpenRecordset( _

"Pracownicy", dbOpenDynaset)

With rstPracownicy

strImię = !Imię

strNazwisko = !Nazwisko

.Edit

!Imię = "Ewa"

!Nazwisko = "Krupińska"

intPolecenie = _

MsgBox("Czy zamienić aktualne imię i nazwisko” _

& " na " & !Imię & " " & !Nazwisko & "?", _

 vbYesNo)

If intPolecenie = vbYes Then

.Update

MsgBox "Rekord został zmodyfikowany."

' Odtwórz pierwotne dane, gdyż jest to tylko

' przykład.

.Bookmark = .LastModified

.Edit

!Imię = strImię

!Nazwisko = strNazwisko

.Update

Else

.CancelUpdate

MsgBox "Rekord nie został zmodyfikowany."

End If

.Close

End With

dbsNorthwind.Close

End Sub


Metoda CopyQueryDef - przykład (DAO/Microsoft Jet)
Metoda CopyQueryDef - przykład

W poniższym przykładzie użyto metody CopyQueryDef do utworzenia kopii obiektu QueryDef z istniejącego obiektu Recordset. Następnie kopia zostaje zmodyfikowana przez dodanie klauzuli do właściwości SQL. Podczas tworzenia trwałego obiektu QueryDef tekst właściwości SQL może na końcu zawierać znaki spacji, średniki lub znaki końca wiersza. Te dodatkowe znaki muszą zostać usunięte, aby było możliwe dołączenie nowej klauzuli do instrukcji SQL.

Function KopiujKwerendę(rstTymcz As Recordset, _

strDodatek As String) As QueryDef

Dim strSQL As String

Dim strZnakSQL As String

Set KopiujKwerendę = rstTymcz.CopyQueryDef

With KopiujKwerendę

' Usuń dodatkowe znaki.

strSQL = .SQL

strZnakSQL = Right(strSQL, 1)

Do While strZnakSQL = " " Or _

strZnakSQL = ";" Or _

strZnakSQL = Chr(10) Or strZnakSQL = vbCr

strSQL = Left(strSQL, Len(strSQL) - 1)

strZnakSQL = Right(strSQL, 1)

Loop

.SQL = strSQL & strDodatek

End With

End Function

W poniższym przykładzie pokazany jest jeden z możliwych sposobów użycia funkcji KopiujKwerendę().

Sub CopyQueryDefX()

Dim dbsNorthwind As Database

Dim qdfPracownicy As QueryDef

Dim rstPracownicy As Recordset

Dim intPolecenie As Integer

Dim strSortujWg As String

Dim qdfKopia As QueryDef

Dim rstKopia As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set qdfPracownicy = _

dbsNorthwind.CreateQueryDef( _

"NewQueryDef","SELECT Imię, Nazwisko, " & _

"DataUrodzenia FROM Pracownicy")

Set rstPracownicy = _

qdfPracownicy.OpenRecordset(dbOpenForwardOnly)

Do While True

intPolecenie = Val(InputBox( _

"Wybierz pole, według którego zamierzasz" & _

"uporządkować zestaw rekordów:" & vbCr & _

"1 - Imię" & vbCr & "2 - Nazwisko" & _

vbCr & "3 - DataUrodzenia" & vbCr & _

"[Anuluj - Wyjście]"))

Select Case intPolecenie

Case 1

strSortujWg = " ORDER BY Imię"

Case 2

strSortujWg = " ORDER BY Nazwisko"

Case 3

strSortujWg = " ORDER BY DataUrodzenia"

Case Else

Exit Do

End Select

Set qdfKopia = _

KopiujKwerendę(rstPracownicy, strSortujWg)

Set rstKopia = _

qdfKopia.OpenRecordset(dbOpenSnapshot, _

dbForwardOnly)

With rstKopia

Do While Not .EOF

Debug.Print !Nazwisko & ", " & !Imię & _

" - " & !DataUrodzenia

.MoveNext

Loop

.Close

End With

Exit Do

Loop

rstPracownicy.Close

' Usuń utworzony obiekt QueryDef, gdyż jest to

' tylko przykład.

dbsNorthwind.QueryDefs.Delete qdfPracownicy.Name

dbsNorthwind.Close

End Sub


Metoda CreateGroup - przykład (DAO/Microsoft Jet)
Metoda CreateGroup - przykład

W poniższym przykładzie użyto jest metody CreateGroup do utworzenia nowego obiektu Group. Następnie użytkownik “admin” staje się elementem nowego obiektu Group. Dalej wyświetlane są właściwości i lista użytkowników należących do tego obiektu.

Sub CreateGroupX()

Dim wrkDomyślny As Workspace

Dim grpNowa As Group

Dim grpTymcz As Group

Dim prpPętla As Property

Dim usrPętla As User

Set wrkDomyślny = DBEngine.Workspaces(0)

With wrkDomyślny

' Utwórz i dołącz nową grupę.

Set grpNowa = .CreateGroup("NowaGrupa", _

"AAA123456789")

.Groups.Append grpNowa

' Przypisz użytkownika "admin" do grupy

' NowaGrupa, tworząc odpowiedni obiekt Group i

' dołączając go do kolekcji Groups użytkownika.

Set grpTymcz = _

.Users("admin").CreateGroup("NowaGrupa")

.Users("admin").Groups.Append grpTymcz

Debug.Print "Właściwości grupy " & grpNowa.Name

' Wylicz elementy kolekcji Properties grupy

' NowaGrupa. Właściwości PID nie można odczytać.

For Each prpPętla In grpNowa.Properties

On Error Resume Next

If prpPętla <> "" Then Debug.Print "    " & _

prpPętla.Name & " = " & prpPętla

On Error GoTo 0

Next prpPętla

Debug.Print "Kolekcja Users grupy" & _

grpNowa.Name

' Wylicz elementy kolekcji Users grupy

' NowaGrupa.

For Each usrPętla In grpNowa.Users

Debug.Print "    " & usrPętla.Name

Next usrPętla

' Usuń nowy obiekt Group, gdyż jest to tylko

' przykład.

.Groups.Delete "NowaGrupa"

End With

End Sub


Metoda CreateUser i właściwości Password i PID - przykład (DAO/Microsoft Jet)
Metoda CreateUser i właściwości Password i PID - przykład

W poniższym przykładzie użyto metody CreateUser i właściwości Password i PID do utworzenia nowego obiektu User. Następnie nowy obiekt User staje się elementem różnych obiektów Group. Dalej wyświetlane są właściwości obiektu i jego grupy.

Sub CreateUserX()

Dim wrkDomyślny As Workspace

Dim usrNowy As User

Dim grpNowa As Group

Dim usrTymcz As User

Dim prpPętla As Property

Dim grpPętla As Group

Set wrkDomyślny = DBEngine.Workspaces(0)

With wrkDomyślny

' Utwórz i dołącz nowy obiekt User.

Set usrNowy = .CreateUser("NowyUżytkownik")

usrNowy.PID = "AAA123456789"

usrNowy.Password = "NoweHasło"

.Users.Append usrNowy

' Utwórz i dołącz nowy obiekt Group.

Set grpNowa = .CreateGroup("NowaGrupa", _

"AAA123456789")

.Groups.Append grpNowa

' Przypisz użytkownika NowyUżytkownik do grupy

' NowaGrupa, tworząc odpowiedni obiekt User i

' dołączając go do kolekcji Users grupy.

Set usrTymcz = .Groups("NowaGrupa"). _

CreateUser("NowyUżytkownik")

.Groups("NowaGrupa").Users.Append usrTymcz

Debug.Print "Właściwości " & usrNowy.Name

' Wylicz elementy kolekcji Properties obiektu

' NowyUżytkownik. Właściwości PID nie można

' odczytać.

For Each prpPętla In usrNowy.Properties

On Error Resume Next

If prpPętla <> "" Then Debug.Print "    " & _

prpPętla.Name & " = " & prpPętla

On Error GoTo 0

Next prpPętla

Debug.Print "Kolekcja Groups obiektu " & _

usrNowy.Name

' Wylicz elementy kolekcji Groups obiektu

' NowyUżytkownik.

For Each grpPętla In usrNowy.Groups

Debug.Print "    " & grpPętla.Name

Next grpPętla

' Usuń utworzone obiekty User i Group, gdyż jest

' to tylko przykład.

.Users.Delete "NowyUżytkownik"

.Groups.Delete "NowaGrupa"

End With

End Sub


Metoda CreateWorkspace - przykład (DAO)
Metoda CreateWorkspace - przykład

W poniższym przykładzie użyto metody CreateWorkspace do utworzenia zarówno obszaru roboczego Microsoft Jet, jak i obszaru roboczego ODBCDirect. Następnie wyświetlane są właściwości obu typów obszarów roboczych.

Sub CreateWorkspaceX()

Dim wrkODBC As Workspace

Dim wrkJet As Workspace

Dim wrkPętla As Workspace

Dim prpPętla As Property

' Utwórz obszar roboczy ODBCDirect. Aparat bazy

' danych Microsoft Jet nie zostanie załadowany do

' pamięci, dopóki nie zostanie utworzony obszar

' roboczy Microsoft Jet.

Set wrkODBC = CreateWorkspace("obszarODBC", _

"admin", "", dbUseODBC)

Workspaces.Append wrkODBC

DefaultType = dbUseJet

' Utwórz obiekt Workspace bez nazwy,

' którego typ określony jest przez właściwość

' DefaultType obiektu DBEngine (dbUseJet).

Set wrkJet = CreateWorkspace("", "admin", "")

' Wylicz elementy kolekcji Workspaces.

Debug.Print "Obiekty Workspace w " & _

"kolekcji Workspaces:"

For Each wrkPętla In Workspaces

Debug.Print "    " & wrkPętla.Name

Next wrkPętla

With wrkODBC

' Wylicz elementy kolekcji Properties obszaru

' roboczego ODBCDirect.

Debug.Print "Właściwości obszaru roboczego " & _

.Name

On Error Resume Next

For Each prpPętla In .Properties

Debug.Print "    " & prpPętla.Name & _

" = " &  prpPętla

Next prpPętla

On Error GoTo 0

End With

With wrkJet

' Wylicz elementy kolekcji Properties obszaru

' roboczego Microsoft Jet.

Debug.Print "Właściwości nie nazwanego " & _

"obszaru roboczego Microsoft Jet "

On Error Resume Next

For Each prpPętla In .Properties

Debug.Print "    " & prpPętla.Name & _

" = " & prpPętla

Next prpPętla

On Error GoTo 0

End With

wrkODBC.Close

wrkJet.Close

End Sub


Metoda Idle - przykład (DAO/Microsoft Jet)
Metoda Idle - przykład

W poniższym przykładzie metoda Idle zapewnia procedurze wyświetlającej dane dostęp do najbardziej aktualnych danych dostępnych w bazie danych. Do uruchomienia tej procedury niezbędna jest procedura WyścieIdle.

Sub IdleX()

Dim dbsNorthwind As Database

Dim strKraj As String

Dim strSQL As String

Dim rstZamówienia As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Pobierz nazwę kraju i wykorzystaj ją do

' utworzenia instrukcji SQL.

strKraj = Trim(InputBox("Podaj nazwę kraju: "))

strSQL = "SELECT * FROM Zamówienia " & _

"WHERE KrajOdbiorcy = '" & strKraj & _

"' ORDER BY NrZamówienia"

' Otwórz obiekt RecordSet, używając tej instrukcji

' SQL.

Set rstZamówienia = _

 dbsNorthwind.OpenRecordset(strSQL)

' Wyświetl zawartość obiektu RecordSet.

WyjścieIdle rstZamówienia, strKraj

rstZamówienia.Close

dbsNorthwind.Close

End Sub

Sub WyjścieIdle(rstTymcz As Recordset, _

 strTymcz As String)

' Wywołaj metodę Idle, aby usunąć zbędne blokady,

' zapisać zbuforowane w pamięci zmiany i odświeżyć

' zawartość pamięci, wpisując do niej aktualne dane

' z pliku .mdb.

DBEngine.Idle dbRefreshCache

' Wylicz elementy obiektu Recordset.

With rstTymcz

Debug.Print "Zamówienia z " & strTymcz & ":"

Debug.Print , "NrZamówienia", "KodKlienta", _

 "DataZamówienia"

Do While Not .EOF

Debug.Print , !NrZamówienia, !KodKlienta, _

!DataZamówienia

.MoveNext

Loop

End With

End Sub


Metoda MakeReplica - przykład (DAO/Microsoft Jet)
Metoda MakeReplica - przykład

W poniższej funkcji użyto metody MakeReplica do utworzenia dodatkowej repliki istniejącego wzorca. Argument intOpcje może przyjmować wartość będącą kombinacją stałych dbRepMakeReadOnly oraz dbRepMakePartial lub wartość 0. Na przykład, w celu utworzenia repliki częściowej przeznaczonej tylko do odczytu, należy argumentowi intOpcje nadać wartość dbRepMakeReadOnly + dbRepMakePartial.

Function UtwórzDodatkowąReplikę(strReplikowalnaBD As _

String, strNowaReplika As String, _

intOpcje As Integer) As Integer

Dim dbsTymcz As Database

On Error GoTo ErrorHandler

Set dbsTymcz = OpenDatabase(strReplikowalnaBD)

' Jeśli do funkcji nie zostały przekazane żadne

' opcje, pomiń argument opcji. Domyślnie utworzona

' zostanie replika pełna przeznaczona do odczytu

' i zapisu. W przeciwnym wypadku zastosuj wartość

' argumentu intOpcje.

If intOpcje = 0 Then

dbsTymcz.MakeReplica strNowaReplika, _

"Replika " & strReplikowalnaBD

Else

dbsTymcz.MakeReplica strNowaReplika, _

"Replika " & strReplikowalnaBD, _

intOpcje

End If

dbsTymcz.Close

ErrorHandler:

Select Case Err

Case 0:

UtwórzDodatkowąReplikę = 0

Exit Function

Case Else:

MsgBox "Błąd " & Err & " : " & Error

UtwórzDodatkowąReplikę = Err

Exit Function

End Select

End Function


Metoda NextRecordset i właściwość DefaultCursorDriver - przykład (DAO/ODBCDirect)
Metoda NextRecordset i właściwość DefaultCursorDriver - przykład

W poniższym przykładzie użyto metody NextRecordset do wyświetlenia danych ze złożonej kwerendy SELECT. W trakcie wykonywania takich kwerend właściwość DefaultCursorDriver musi mieć wartość dbUseODBCCursor. Metoda NextRecordset zwróci wartość True nawet w przypadku, gdy któraś z instrukcji SELECT lub żadna z nich nie zwróci rekordów. Wartość False zostanie zwrócona dopiero w momencie, gdy zostaną już sprawdzone wszystkie klauzule SQL.

Sub NextRecordsetX()

Dim wrkODBC As Workspace

Dim conWyd As Connection

Dim rstTymcz As Recordset

Dim intLicznik As Integer

Dim booNast As Boolean

' Utwórz obiekt Workspace typu ODBCDirect i otwórz

' obiekt Connection. Przy korzystaniu ze złożonych

' instrukcji SQL konieczne jest ustawienie wartości

' właściwości DefaultCursorDriver.

Set wrkODBC = CreateWorkspace("", _

"admin", "", dbUseODBC)

wrkODBC.DefaultCursorDriver = dbUseODBCCursor

Set conWyd = _

wrkODBC.OpenConnection("Wydawcy", , , _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Skonstruuj złożoną instrukcję SELECT

Set rstTymcz = _

conWyd.OpenRecordset("SELECT * " & _

"FROM autorzy; " & _

"SELECT * FROM sklepy; " & _

"SELECT * FROM zawody")

' Spróbuj wydrukować wyniki wszystkich trzech

' instrukcji SELECT.

booNast = True

intLicznik = 1

With rstTymcz

Do While booNast

Debug.Print "Zawartość zestawu rekordów " & _

"nr " intLicznik

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

booNast = .NextRecordset

Debug.Print "    rstTymcz.NextRecordset " & _

"= " booNast

intLicznik = intLicznik + 1

Loop

End With

rstTymcz.Close

conWyd.Close

wrkODBC.Close

End Sub

Innym sposobem osiągnięcia tego samego celu jest utworzenie przygotowanej instrukcji zawierającej złożoną instrukcję SQL. Właściwość CacheSize obiektu QueryDef musi być równa 1, a obiekt Recordset musi być typu progresywnego i przeznaczony tylko do odczytu.

Sub NextRecordsetX2()

Dim wrkODBC As Workspace

Dim conWyd As Connection

Dim qdfTymcz As QueryDef

Dim rstTymcz As Recordset

Dim intLicznik As Integer

Dim booNast As Boolean

' Utwórz obiekt Workspace typu ODBCDirect i otwórz

' obiekt Connection. Podczas korzystania ze

' złożonych instrukcji SQL jest wymagane

' ustawienie właściwości DefaultCursorDriver.

Set wrkODBC = CreateWorkspace("", _

"admin", "", dbUseODBC)

wrkODBC.DefaultCursorDriver = dbUseODBCCursor

Set conWyd = wrkODBC.OpenConnection("Wydawcy", , _

, "ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Utwórz tymczasowo procedurę ze złożoną

' instrukcją SELECT.

Set qdfTymcz = conWyd.CreateQueryDef("", _

"SELECT * FROM autorzy; " & _

"SELECT * FROM sklepy; " & _

"SELECT * FROM zawody")

' Ustaw właściwość CacheSize i otwórz obiekt

' Recordset, używając argumentów, które pozwolą na

' dostęp do wielu zestawów rekordów.

qdfTymcz.CacheSize = 1

Set rstTymcz = qdfTymcz.OpenRecordset( _

dbOpenForwardOnly, dbReadOnly)

' Spróbuj wydrukować wyniki każdej z trzech

' instrukcji  SELECT.

booNast = True

intLicznik = 1

With rstTymcz

Do While booNast

Debug.Print "Zawartość zestawu rekordów nr" _

& intLicznik

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

booNast = .NextRecordset

Debug.Print "  rstTymcz.NextRecordset = " & _

booNast

intLicznik = intLicznik + 1

Loop

End With

rstTymcz.Close

qdfTymcz.Close

conWyd.Close

wrkODBC.Close

End Sub


Metoda OpenConnection - przykład (DAO/ODBCDirect)
Metoda OpenConnection - przykład

W poniższym przykładzie pokazano użycie metody OpenConnection z różnymi parametrami przy otwieraniu trzech różnych obiektów Connection.

Sub OpenConnectionX()

Dim wrkODBC As Workspace

Dim conWyd As Connection

Dim conWyd2 As Connection

Dim conWyd3 As Connection

Dim conPętla As Connection

' Utwórz obiekt Workspace typu ODBCDirect.

Set wrkODBC = CreateWorkspace("NowyObszarODBC", _

"admin", "", dbUseODBC)

' Otwórz obiekt Connection, korzystając z

' informacji zawartych w ciągu połączenia. Gdyby te

' informacje były niewystarczające, należy

' przechwycić błąd, a nie odwoływać się do okna

' dialogowego Menedżera sterowników ODBC.

MsgBox "Otwieranie połączenia 1..."

Set conWyd = _

wrkODBC.OpenConnection("Połączenie1", _

dbDriverNoPrompt, , _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Otwórz obiekt Connection w trybie tylko do

' odczytu, korzystając z informacji wprowadzonych w

' oknie dialogowym Menedżera sterowników ODBC.

MsgBox " Otwieranie połączenia 2..."

Set conWyd2 = _

wrkODBC.OpenConnection("Połączenie2", _

dbDriverPrompt, True, "ODBC;DSN=Wydawcy;")

' Otwórz obiekt Connection w trybie tylko do

' odczytu, wprowadzając w oknie dialogowym

' Menedżera sterowników ODBC jedynie brakujące

' informacje.

MsgBox " Otwieranie połączenia 3..."

Set conWyd3 = _

wrkODBC.OpenConnection("Połączenie3", _

dbDriverCompleteRequired, True, _

"ODBC;DATABASE=wyd;DSN=Wydawcy;")

' Wylicz elementy kolekcji Connections.

For Each conPętla In wrkODBC.Connections

Debug.Print "Właściwości połączenia " & _

conPętla.Name & ":"

With conPętla

' Wydrukuj wartości właściwości, jawnie

' odwołując się do każdego obiektu Property

' z osobna. Obiekt Connection nie posiada

' kolekcji Properties.

Debug.Print "    Connect = " & .Connect

' Właściwość zwraca w rzeczywistości obiekt

' Database.

Debug.Print "    Database[.Name] = " & _

.Database.Name

Debug.Print "    Name = " & .Name

Debug.Print "    QueryTimeout = " & _

.QueryTimeout

Debug.Print "    RecordsAffected = " & _

.RecordsAffected

Debug.Print "    StillExecuting = " & _

.StillExecuting

Debug.Print "    Transactions = " & _

.Transactions

Debug.Print "    Updatable = " & .Updatable

End With

Next conPętla

conWyd.Close

conWyd2.Close

conWyd3.Close

wrkODBC.Close

End Sub


Metoda OpenDatabase - przykład (DAO)
Metoda OpenDatabase - przykład

W poniższym przykładzie użyto metody OpenDatabase do otworzenia jednej bazy danych Microsoft Jet i dwóch baz danych ODBC dołączonych do aparatu Microsoft Jet.

Sub OpenDatabaseX()

Dim wrkJet As Workspace

Dim dbsNorthwind As Database

Dim dbsWyd As Database

Dim dbsWyd2 As Database

Dim dbsPętla As Database

Dim prpPętla As Property

' Utwórz obiekt Workspace typu Microsoft Jet.

Set wrkJet = CreateWorkspace("", "admin", _

"", dbUseJet)

' Otwórz obiekt Database z zapisanej bazy danych

' Microsoft Jet w trybie wyłączności.

MsgBox "Otwieranie bazy Northwind..."

Set dbsNorthwind = _

wrkJet.OpenDatabase("Northwind.mdb", True)

' Otwórz obiekt Database przeznaczony tylko do odczytu,

' korzystając z informacji zawartych w ciągu

' połączenia.

MsgBox "Otwieranie bazy wyd..."

Set dbsWyd = wrkJet.OpenDatabase("Wydawcy", _

dbDriverNoPrompt, True, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Otwórz obiekt Database przeznaczony tylko do odczytu,

' wprowadzając w oknie dialogowym Menedżera

' sterowników ODBC jedynie brakujące informacje.

MsgBox "Otwieranie drugiej kopii bazy wyd..."

Set dbsWyd2 = wrkJet.OpenDatabase("Wydawcy", _

dbDriverCompleteRequired, True, _

"ODBC;DATABASE=wyd;DSN=Wydawcy;")

' Wylicz elementy kolekcji Databases

For Each dbsPętla In wrkJet.Databases

Debug.Print "Właściwości obiektu Database " & _

dbsPętla.Name & ":"

On Error Resume Next

' Wylicz elementy kolekcji Properties każdego obiektu

' Database

For Each prpPętla In dbsPętla.Properties

If prpPętla.Name = "Connection" Then

' Właściwość zwraca w rzeczywistości

' obiekt Connection.

Debug.Print "    Connection[.Name] = " & _

dbsPętla.Connection.Name

Else

Debug.Print "    " & prpPętla.Name & _

" = " & prpPętla

End If

Next prpPętla

On Error GoTo 0

Next dbsPętla

dbsNorthwind.Close

dbsWyd.Close

dbsWyd2.Close

wrkJet.Close

End Sub


Metoda OpenRecordset - przykład (DAO)
Metoda OpenRecordset - przykład

W poniższym przykładzie użyto metody OpenRecordset do otworzenia pięciu różnych obiektów Recordset i wyświetlenia ich zawartości. Do uruchomienia tej procedury niezbędna jest procedura WyjścieOpenRecordset.

Sub OpenRecordsetX()

Dim wrkJet As Workspace

Dim wrkODBC As Workspace

Dim dbsNorthwind As Database

Dim conWyd As Connection

Dim rstTymcz As Recordset

Dim rstTymcz2 As Recordset

' Otwórz obszary robocze Microsoft Jet i

' ODBCDirect, bazę danych Microsoft

' Jet i połączenie ODBCDirect.

Set wrkJet = _

CreateWorkspace("", "admin", "", dbUseJet)

Set wrkODBC = _

CreateWorkspace("", "admin", "", dbUseODBC)

Set dbsNorthwind = _

wrkJet.OpenDatabase("Northwind.mdb")

Set conWyd = wrkODBC.OpenConnection("", , , _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Otwórz pięć różnych obiektów Recordset i wyświetl

' zawartość każdego z nich.

Debug.Print "Otwarcie zestawu rekordów " & _

"typu progresywnego, " & _

"dla którego źródłem jest obiekt QueryDef..."

Set rstTymcz = dbsNorthwind.OpenRecordset( _

"Dziesięć najdroższych produktów", _

dbOpenForwardOnly)

WyjścieOpenRecordset rstTymcz

Debug.Print "Otwarcie zestawu rekordów " & _

"typu zestaw dynamiczny tylko do odczytu, " & _

"dla którego źródłem jest instrukcja SQL..."

Set rstTymcz = dbsNorthwind.OpenRecordset( _

"SELECT * FROM Pracownicy", dbOpenDynaset, _

dbReadOnly)

WyjścieOpenRecordset rstTymcz

' Użyj właściwości Filter, aby pobrać jedynie

' zadane rekordy przy następnym wywołaniu metody

' OpenRecordset.

Debug.Print "Otwarcie zestawu rekordów z " & _

"istniejącego obiektu Recordset, aby " & _

"filtrować rekordy..."

rstTymcz.Filter = "Nazwisko >= 'M'"

Set rstTymcz2 = rstTymcz.OpenRecordset()

WyjścieOpenRecordset rstTymcz2

Debug.Print "Otwarcie dynamicznego " & _

"zestawu rekordów z połączenia ODBC..."

Set rstTymcz = conWyd.OpenRecordset( _

"SELECT * FROM sklepy", dbOpenDynamic)

WyjścieOpenRecordset rstTymcz

' Użyj właściwości StillExecuting, aby określić

' moment, w którym możliwe będzie operowanie na

' obiekcie Recordset.

Debug.Print "Otwarcie zestawu rekordów typu " & _

"utrwalonego przy wykorzystaniu " & _

"asynchronicznej kwerendy skierowanej do połączenia ODBC..."

Set rstTymcz = conWyd.OpenRecordset("wydawcy", _

dbOpenSnapshot, dbRunAsync)

Do While rstTymcz.StillExecuting

Debug.Print "    [wykonywanie operacji...]"

Loop

WyjścieOpenRecordset rstTymcz

rstTymcz.Close

dbsNorthwind.Close

conWyd.Close

wrkJet.Close

wrkODBC.Close

End Sub

Sub WyjścieOpenRecordset(rstWyjście As Recordset)

' Wylicz określony obiekt Recordset

With rstWyjście

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

End With

End Sub


Metoda PopulatePartial - przykład (DAO/Microsoft Jet)
Metoda PopulatePartial - przykład

W poniższym przykładzie metody PopulatePartial użyto po zmianie filtru repliki.

Sub PopulatePartialX()

Dim tdfKlienci As TableDef

Dim strFiltr As String

Dim dbsTymcz As Database

' Otwórz replikę częściową w trybie wyłączności.

Set dbsTymcz = _

OpenDatabase("F:\SPRZEDAŻ\RO96CA.MDB", True)

With dbsTymcz

Set tdfKlienci = .TableDefs("Klienci")

' Przed ustawieniem filtru repliki

 	' wykonaj synchronizację z repliką pełną.

.Synchronize "C:\SPRZEDAŻ\RO96.MDB"

strFiltr = "Region = 'CA'"

tdfKlienci.ReplicaFilter = strFiltr

' Wypełnij rekordami z repliki pełnej.

.PopulatePartial "C:\SPRZEDAŻ\RO96.MDB"

.Close

End With

End Sub


Metoda RefreshLink - przykład (DAO/Microsoft Jet)
Metoda RefreshLink - przykład

W poniższym przykładzie użyto metody RefreshLink do odświeżenia danych w tabeli połączonej po zmianie źródła danych tabeli dokonaj przez zmianę połączenia. Do uruchomienia tej procedury niezbędna jest procedura WyjścieRefreshLink.

Sub RefreshLinkX()

Dim dbsAktualna As Database

Dim tdfDołączona As TableDef

' Otwórz bazę danych, do której możliwe jest

' dołączenie tabeli połączonej.

Set dbsAktualna = OpenDatabase("DB1.mdb")

' Utwórz tabelę połączoną wskazującą na bazę danych

' SQL Server.

Set tdfDołączona = _

dbsAktualna.CreateTableDef("AutorzyTab")

tdfDołączona.Connect = _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy"

tdfDołączona.SourceTableName = "autorzy"

dbsAktualna.TableDefs.Append tdfDołączona

' Wyświetl zawartość tabeli połączonej.

Debug.Print _

"Dane w tabeli połączonej, dołączonej do " & _

"pierwszego źródła:"

WyjścieRefreshLink dbsAktualna

' Zmień informacje o połączeniu tabeli i odśwież to

' połączenie, aby uzyskać dostęp do nowych danych.

tdfDołączona.Connect = _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=NewWydawcy"

tdfDołączona.RefreshLink

' Wyświetl zawartość tabeli połączonej.

Debug.Print _

"Dane w tabeli połączonej, dołączonej do " & _

"drugiego źródła:"

WyjścieRefreshLink dbsAktualna

' Usuń tabelę połączoną, gdyż jest to tylko

' przykład.

dbsAktualna.TableDefs.Delete tdfDołączona.Name

dbsAktualna.Close

End Sub

Sub WyjścieRefreshLink(dbsTymcz As Database)

Dim rstOdległy As Recordset

Dim intLicznik As Integer

' Otwórz tabelę połączoną.

Set rstOdległy = _

dbsTymcz.OpenRecordset("AutorzyTab")

intLicznik = 0

' Wyliczaj elementy obiektu Recordset, lecz

' zatrzymaj się na rekordzie nr 50.

With rstOdległy

Do While Not .EOF And intLicznik < 50

Debug.Print , .Fields(0), .Fields(1)

intLicznik = intLicznik + 1

.MoveNext

Loop

If Not .EOF Then Debug.Print , _

"[następne rekordy]"

.Close

End With

End Sub


Metoda RegisterDatabase - przykład (DAO)
Metoda RegisterDatabase - przykład

W poniższym przykładzie użyto metody RegisterDatabase do zarejestrowania w Rejestrze Windows źródła danych typu Microsoft SQL Server o nazwie Wydawcy.

Zalecanym sposobem tworzenia, modyfikowania oraz usuwania nazw źródeł danych jest użycie ikony ODBC w Panelu sterowania Windows.

Sub RegisterDatabaseX()

Dim dbsRegister As Database

Dim strOpis As String

Dim strWłasności As String

Dim errPętla As Error

' Utwórz ciąg słów kluczowych.

strOpis = InputBox( "Wprowadź opis " & _

"rejestrowanej bazy danych.")

strWłasności = "Database=wyd" & _

vbCr & "Description=" & strOpis & _

vbCr & "OemToAnsi=No" & _

vbCr & "Server=Server1"

' Aktualizuj Rejestr Windows

On Error GoTo Err_Register

DBEngine.RegisterDatabase "Wydawcy", _

"SQL Server", True, strWłasności

On Error GoTo 0

MsgBox "Zastosuj program regedit.exe, aby " & _

"obejrzeć zmiany: HKEY_CURRENT_USER\" & _

"Software\ODBC\ODBC.INI"

Exit Sub

Err_Register:

' Powiadom użytkownika o błędach będących wynikiem

' niepoprawnych danych.

If DBEngine.Errors.Count > 0 Then

For Each errPętla In DBEngine.Errors

MsgBox "Błąd numer: " & errPętla.Number & _

vbCr & errPętla.Description

Next errPętla

End If

Resume Next

End Sub


Metoda Requery - przykład (DAO)
Metoda Requery - przykład

W poniższym przykładzie pokazano sposób użycia metody Requery do odświeżenia kwerendy po zmianie danych, na których bazuje.

Sub RequeryX()

Dim dbsNorthwind As Database

Dim qdfTymcz As QueryDef

Dim rstWidok As Recordset

Dim rstZmiana As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set qdfTymcz = dbsNorthwind.CreateQueryDef("", _

"PARAMETERS NazwaKraju Text; " & _

"SELECT Imię, Nazwisko, Kraj " & _

"FROM Pracownicy " & _

"WHERE Kraj = [NazwaKraju] ORDER BY Nazwisko")

qdfTymcz.Parameters!NazwaKraju = "POLSKA"

Debug.Print "Dane po pierwszym wykonaniu " & _

"kwerendy, [NazwaKraju] = POLSKA"

Set rstWidok = qdfTymcz.OpenRecordset

Do While Not rstWidok.EOF

Debug.Print "    " & rstWidok!Imię & " " & _

rstWidok!Nazwisko & ", " & rstWidok!Kraj

rstWidok.MoveNext

Loop

' Zmień dane, na których bazuje kwerenda.

Set rstZmiana = _

 dbsNorthwind.OpenRecordset("Pracownicy")

rstZmiana.AddNew

rstZmiana!Imię = "Maria"

rstZmiana!Nazwisko = "Jabłońska"

rstZmiana!Kraj = "POLSKA"

rstZmiana.Update

rstWidok.Requery

Debug.Print "Ponowienie kwerendy po zmianie danych"

Set rstWidok = qdfTymcz.OpenRecordset

Do While Not rstWidok.EOF

Debug.Print "    " & rstWidok!Imię & " " & _

rstWidok!Nazwisko & ", " & rstWidok!Kraj

rstWidok.MoveNext

Loop

' Odtwórz pierwotne dane, gdyż jest to tylko

' przykład.

rstZmiana.Bookmark = rstZmiana.LastModified

rstZmiana.Delete

rstZmiana.Close

rstWidok.Close

dbsNorthwind.Close

End Sub

W poniższym przykładzie pokazano sposób użycia metody Requery ponowienia kwerendy po zmianie parametrów kwerendy.

Sub RequeryX2()

Dim dbsNorthwind As Database

Dim qdfTymcz As QueryDef

Dim prmKraj As Parameter

Dim rstWidok As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set qdfTymcz = dbsNorthwind.CreateQueryDef("", _

"PARAMETERS NazwaKraju Text; " & _

"SELECT Imię, Nazwisko, Kraj " & _

"FROM Pracownicy " & _

"WHERE Kraj = [NazwaKraju] ORDER BY Nazwisko")

Set prmKraj = qdfTymcz.Parameters!NazwaKraju

qdfTymcz.Parameters!NazwaKraju = "POLSKA"

Debug.Print "Dane po pierwszym wykonaniu " & _

"kwerendy, [NazwaKraju] = POLSKA"

Set rstWidok = qdfTymcz.OpenRecordset

Do While Not rstWidok.EOF

Debug.Print "    " & rstWidok!Imię & " " & _

rstWidok!Nazwisko & ", " & rstWidok!Kraj

rstWidok.MoveNext

Loop

' Zmiana parametrów kwerendy.

qdfTymcz.Parameters!NazwaKraju = "USA"

' Należy dołączyć argument obiektu QueryDef, aby

' zmiany parametrów kwerendy były widoczne w

' otrzymanym obiekcie Recordset.

rstWidok.Requery qdfTymcz

Debug.Print "Ponowienie kwerendy po zmianie " & _

"parametru, [NazwaKraju] = USA"

Do While Not rstWidok.EOF

Debug.Print "    " & rstWidok!Imię & " " & _

rstWidok!Nazwisko & ", " & rstWidok!Kraj

rstWidok.MoveNext

Loop

rstWidok.Close

dbsNorthwind.Close

End Sub


Metoda SetOption - przykład (DAO/Microsoft Jet)
Metoda SetOption - przykład

W poniższym przykładzie pokazano sposób użycia metody SetOption do zmiany wartości dwóch kluczy rejestru zgodnie z danymi podanymi przez użytkownika. Metoda SetOption przesłania przechowywane w rejestrze wartości kluczy jedynie dla bieżącej aplikacji. Przechowywane ustawienia nie ulegają zmianie i są jedynymi widocznymi dla użytkownika korzystającego z programu REGEDIT.EXE.

Sub SetOptionX()

Dim intExclusiveDelay As Integer

Dim intSharedDelay As Integer

' Pobierz od użytkownika nowe wartości kluczy

' rejestru ExclusiveAsyncDelay i

' SharedAsyncDelay.

intExclusiveDelay = _

Val(InputBox("Podaj nową wartość " & _

"klucza ExclusiveAsyncDelay " & _

"(w milisekundach):"))

intSharedDelay = _

Val(InputBox("Podaj nową wartość " & _

"klucza SharedAsyncDelay " & _

"(w milisekundach):"))

If intExclusiveDelay > 0 And _

intSharedDelay > 0 Then

' Zmień wartości kluczy rejestru.

SetOption dbExclusiveAsyncDelay, _

intExclusiveDelay

SetOption dbSharedAsyncDelay, intSharedDelay

MsgBox "Wartości kluczy rejestru " & _

"zostały zmienione na czas działania " & _

"programu."

Else

MsgBox "Wartości kluczy rejestru " & _

"pozostały nie zmienione."

End If

End Sub


Metoda Synchronize - przykład (DAO/Microsoft Jet)
Metoda Synchronize - przykład

W poniższych czterech przykładach zaprezentowano jedno- i dwukierunkową wymianę informacji między dwoma elementami zestawu replik. Przykłady te będą działały poprawnie, jeśli została dokonana konwersja bazy Northwind.mdb na bazę pełniącą rolę wzorca (patrz właściwość Replicable), i z tej bazy została utworzona replika. Nazwa tej repliki brzmi Nwreplika.mdb. Tę nazwę można zmienić w razie potrzeby lub można zastosować metodę MakeReplica w celu utworzenia własnej repliki.

W poniższym przykładzie informacje o zmianach we wzorcu Northwind przesyłane są do bazy Nwreplika. Należy dostosować nazwy ścieżek do rzeczywistego położenia plików w danym komputerze.

Sub SendChangeToReplicaX()

Dim dbsNorthwind As Database

' Otwórz replikowalną bazę danych Northwind.mdb.

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Wyślij dane lub zmiany strukturalne do

' repliki.

dbsNorthwind.Synchronize "Nwreplika.mdb", _

dbRepExportChanges

dbsNorthwind.Close

End Sub

W poniższym przykładzie replikowalna baza danych Northwind.mdb, otrzymuje informacje o zmianach z repliki o nazwie Nwreplika. Ta procedura musi być uruchamiana z bazy danych otrzymującej informacje o zmianach.

Sub ReceiveChangeX()

Dim dbsNorthwind As Database

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

'Wyślij informacje o zmianach z repliki do wzorca.

dbsNorthwind.Synchronize "Nwreplika.mdb", _

dbRepImportChanges

dbsNorthwind.Close

End Sub

W poniższym przykładzie wymianie podlegają zarówno informacje o zmianach w replikowalnej bazie danych Northwind, jak i informacje o zmianach w replice. Jest to domyślny tryb działania tej metody.

Sub TwoWayExchangeX()

Dim dbsNorthwind As Database

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Prześlij między replikami informacje o

' zmianach.

dbsNorthwind.Synchronize "Nwreplika", _

dbRepImpExpChanges

dbsNorthwind.Close

End Sub

W poniższym przykładzie pokazano sposób synchronizacji dwóch baz danych poprzez Internet.

Sub InternetSynchronizeX()

Dim dbsTymcz As Database

Set dbsTymcz = OpenDatabase("C:\Dane\PozZamow.mdb")

' Synchronizuj lokalną bazę danych z repliką

' znajdującą się na serwerze internetowym

dbsTymcz.Synchronize _

"http://www.mojafirma.mojserwer.com" _

& "/pliki/Zamow.mdb", _

dbRepImpExpChanges + dbRepSyncInternet

dbsTymcz.Close

End Sub


Właściwość AbsolutePosition - przykład (DAO)
Właściwość AbsolutePosition - przykład

W poniższym przykładzie posłużono się właściwością AbsolutePosition do śledzenia pętli, która wylicza wszystkie rekordy obiektu Recordset.

Sub AbsolutePositionX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim strKomunikat As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' AbsolutePosition działa tylko z dynamicznymi

' lub utrwalonymi zestawami rekordów.

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenSnapshot)

With rstPracownicy

' Wypełnij obiekt Recordset.

.MoveLast

.MoveFirst

' Wylicz rekordy z obiektu Recordset.

Do While Not .EOF

' Wyświetl informacje z bieżącego rekordu.

' Dodaj 1 do AbsolutePosition, ponieważ

' właściwość ta liczona jest od zera.

strKomunikat = "Pracownik: " & !Nazwisko & _

 vbCr & "(rekord " & _

(.AbsolutePosition + 1) & " z " & _

 .RecordCount & ")"

If MsgBox(strKomunikat, vbOKCancel) = _

 vbCancel Then Exit Do

.MoveNext

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Właściwość AllowZeroLength - przykład (DAO/Microsoft Jet)
Właściwość AllowZeroLength - przykład

W poniższym przykładzie wykorzystano właściwość AllowZeroLength do ustawienia wartości obiektu Field na ciąg pusty. W takiej sytuacji można odróżnić rekord, którego dane nie są znane od rekordu, którego te dane nie dotyczą.

Sub AllowZeroLengthX()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim fldPom As Field

Dim rstPracownicy As Recordset

Dim strKomunikat As String

Dim strWejście As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfPracownicy = _

dbsNorthwind.TableDefs("Pracownicy")

' Utwórz nowy obiekt Field i dołącz go do kolekcji

' Fields tabeli Pracownicy.

Set fldPom = tdfPracownicy.CreateField( _

"FaxTelefon", dbText, 24)

fldPom.AllowZeroLength = True

tdfPracownicy.Fields.Append fldPom

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

With rstPracownicy

' Pobierz dane od użytkownika.

.Edit

strKomunikat = "Podaj numer faksu do: " & _

!Imię & " " & !Nazwisko & "." & vbCr & _

"[? - nieznany, X - nie ma faksu]"

strWejście = UCase(InputBox(strKomunikat))

If strWejście <> "" Then

Select Case strWejście

Case "?"

!FaxTelefon = Null

Case "X"

!FaxTelefon = ""

Case Else

!FaxTelefon = strWejście

End Select

.Update

' Drukuj raport.

Debug.Print "Nazwisko - numer faksu "

Debug.Print !Imię & " " & !Nazwisko & " - ";

If IsNull(!FaxTelefon) Then

Debug.Print "[nieznany]"

Else

If !FaxTelefon = "" Then

Debug.Print "[nie ma faksu]"

Else

Debug.Print !FaxTelefon

End If

End If

Else

.CancelUpdate

End If

.Close

End With

' Usuń nowe pole, gdyż jest to tylko przykład.

tdfPracownicy.Fields.Delete fldPom.Name

dbsNorthwind.Close

End Sub


Właściwości BOF, EOF - przykład (DAO)
Właściwości BOF, EOF - przykład

W poniższym przykładzie przedstawiono, w jaki sposób właściwości BOF i EOF umożliwiają poruszanie się w przód i wstecz po obiekcie Recordset.

Sub BOFX()

Dim dbsNorthwind As Database

Dim rstKategorie As Recordset

Dim strKomunikat As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstKategorie = _

dbsNorthwind.OpenRecordset("Kategorie", _

dbOpenSnapshot)

With rstKategorie

' Wypełnij obiekt Recordset.

.MoveLast

.MoveFirst

Do While True

' Wyświetl informacje z bieżącego rekordu

' i pobierz dane od użytkownika.

strKomunikat = "Kategoria: " & _

!NazwaKategorii & vbCr & _

"(rekord " & (.AbsolutePosition + 1) & _

" z " & .RecordCount & ")" & vbCr & _

vbCr & "Wpisz 1, aby przejść do " & _

"przodu, lub 2, aby się cofnąć:"

' Przesuń się w przód lub wstecz, wykrywając

' znaczniki BOF lub EOF.

Select Case InputBox(strKomunikat)

Case 1

.MoveNext

If .EOF Then

MsgBox "Koniec pliku!" & vbCr & _

"Wskaźnik na ostatnim rekordzie."

.MoveLast

End If

Case 2

.MovePrevious

If .BOF Then

MsgBox "Początek pliku!" & vbCr & _

"Wskaźnik na pierwszym " & _

"rekordzie."

.MoveFirst

End If

Case Else

Exit Do

End Select

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Właściwości Bookmark i Bookmarkable - przykład (DAO)
Właściwości Bookmark i Bookmarkable - przykład

W poniższym przykładzie wykorzystano właściwości Bookmark i Bookmarkable do zaznaczenia rekordu w obiekcie Recordset i powrotu do tego rekordu po jakimś czasie.

Sub BookmarkX()

Dim dbsNorthwind As Database

Dim rstKategorie As Recordset

Dim strKomunikat As String

Dim intPolecenie As Integer

Dim varZakładka As Variant

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstKategorie = _

dbsNorthwind.OpenRecordset("Kategorie", _

dbOpenSnapshot)

With rstKategorie

If .Bookmarkable = False Then

Debug.Print "W tym obiekcie Recordset " & _

"nie można używać zakładek!"

Else

' Wypełnij obiekt Recordset.

.MoveLast

.MoveFirst

Do While True

' Wyświetl informacje o bieżącym rekordzie

' i pobierz dane od użytkownika.

strKomunikat = "Kategoria: " & _

!NazwaKategorii & " (rekord " & _

(.AbsolutePosition + 1) & _

" z " & .RecordCount & ")" & vbCr & _

"Wpisz polecenie:" & vbCr & _

"[1 - następny / 2 - poprzedni /" & _

vbCr & "3 - wstaw zakładkę" & _

" /4 - przejdź do zakładki]"

intPolecenie = Val(InputBox(strKomunikat))

Select Case intPolecenie

' Przesuń się w przód lub wstecz,

' wykrywając znaczniki BOF lub EOF.

Case 1

.MoveNext

If .EOF Then .MoveLast

Case 2

.MovePrevious

If .BOF Then .MoveFirst

' Zapamiętaj zakładkę bieżącego

' rekordu.

Case 3

varZakładka = .Bookmark

' Przejdź do rekordu wskazanego

' przez zapamiętaną zakładkę.

Case 4

If IsEmpty(varZakładka) Then

MsgBox "Brak zakładki!"

Else

.Bookmark = varZakładka

End If

Case Else

Exit Do

End Select

Loop

End If

.Close

End With

dbsNorthwind.Close

End Sub


Właściwość Count - przykład (DAO)
Właściwość Count - przykład

W poniższym przykładzie użyto właściwości Count dla trzech różnych kolekcji z bazy danych Northwind. Właściwość ta, na podstawie uzyskanej liczby obiektów znajdujących się w każdej z tych kolekcji, ustawia górne ograniczenie dla pętli wyliczających elementy tych kolekcji. Zamiast właściwości Count, do wyliczenia zawartości kolekcji można użyć instrukcji For Each...Next.

Sub CountX()

Dim dbsNorthwind As Database

Dim intPętla As Integer

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Drukuj informacje o kolekcji TableDefs.

Debug.Print .TableDefs.Count & _

" Kolekcja TableDefs" & _

" z bazy danych Northwind "

For intPętla = 0 To .TableDefs.Count - 1

Debug.Print "    " & _

.TableDefs(intPętla).Name

Next intPętla

' Drukuj informacje o kolekcji QueryDefs.

Debug.Print .QueryDefs.Count & _

" Kolekcja QueryDefs" & _

" z bazy danych Northwind "

For intPętla = 0 To .QueryDefs.Count - 1

Debug.Print "    " & _

.QueryDefs(intPętla).Name

Next intPętla

' Drukuj informacje o kolekcji Relations.

Debug.Print .Relations.Count & _

" Kolekcja Relations" & _

" z bazy danych Northwind "

For intPętla = 0 To .Relations.Count - 1

Debug.Print "    " & _

.Relations(intPętla).Name

Next intPętla

.Close

End With

End Sub


Właściwość DataUpdatable- przykład (DAO)
Właściwość DataUpdatable- przykład

W poniższym przykładzie przedstawiono właściwość DataUpdatable, wykorzystując pierwsze pole w sześciu różnych obiektach Recordset. Do uruchomienia tej procedury potrzebna jest funkcja DrukujDane.

Sub DataUpdatableX()

Dim dbsNorthwind As Database

Dim rstNorthwind As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Otwórz obiekt Recordset

' typu tabela i drukuj raport o tym obiekcie.

Set rstNorthwind = .OpenRecordset("Pracownicy")

DrukujDane rstNorthwind

' Otwórz obiekt Recordset typu zestaw dynamiczny

' i drukuj raport o tym obiekcie.

Set rstNorthwind = .OpenRecordset( _

"Pracownicy", dbOpenDynaset)

DrukujDane rstNorthwind

' Otwórz obiekt Recordset typu utrwalonego i

' drukuj raport o tym obiekcie.

Set rstNorthwind = .OpenRecordset( _

"Pracownicy", dbOpenSnapshot)

DrukujDane rstNorthwind

' Otwórz obiekt Recordset typu progresywnego i

' drukuj raport o tym obiekcie.

Set rstNorthwind = .OpenRecordset( _

"Pracownicy", dbOpenForwardOnly)

DrukujDane rstNorthwind

' Otwórz obiekt Recordset bazujący na kwerendzie

' wybierającej i drukuj raport o tym obiekcie.

Set rstNorthwind = _

.OpenRecordset("Aktualna lista produktów")

DrukujDane rstNorthwind

' Otwórz obiekt Recordset bazujący na kwerendzie

' wybierającej, która oblicza sumy, i drukuj

' raport o tym obiekcie.

Set rstNorthwind = _

.OpenRecordset("Sumy częściowe zamówień")

DrukujDane rstNorthwind

.Close

End With

End Sub

Function DrukujDane(rstPom As Recordset)

With rstPom

Debug.Print " Zestaw rekordów: " & .Name & ", ";

Select Case .Type

Case dbOpenTable

Debug.Print "dbOpenTable"

Case dbOpenDynaset

Debug.Print "dbOpenDynaset"

Case dbOpenSnapshot

Debug.Print "dbOpenSnapshot"

Case dbOpenForwardOnly

Debug.Print "dbOpenForwardOnly"

End Select

Debug.Print " Pole: " & _

.Fields(0).Name & ", " & _

" DataUpdatable = " & _

.Fields(0).DataUpdatable

Debug.Print

.Close

End With

End Function


Właściwości DateCreated, LastUpdated- przykład (DAO/Microsoft Jet)
Właściwości DateCreated, LastUpdated- przykład

W poniższym przykładzie przedstawiono właściwości DateCreated i LastUpdated, dodając nowy obiekt Field do istniejącego obiektu TableDef oraz tworząc nowy obiekt TableDef. Do uruchomienia tej procedury potrzebna jest funkcja DrukujDatę.

Sub DateCreatedX()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim tdfNowaTabela As TableDef

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

Set tdfPracownicy = .TableDefs!Pracownicy

With tdfPracownicy

' Drukuj bieżące informacje o tabeli

' Pracownicy.

DrukujDatę "Bieżące właściwości", _

tdfPracownicy

' Utwórz i dołącz pole do tabeli Pracownicy.

.Fields.Append .CreateField("NowePole", _

dbDate)

' Drukuj nowe informacje o tabeli

' Pracownicy.

DrukujDatę "Po utworzeniu nowego pola", _

tdfPracownicy

' Usuń nowy obiekt Field, gdyż jest to tylko

' przykład.

.Fields.Delete "NowePole"

End With

' Utwórz i dołącz nowy obiekt TableDef do

' bazy danych Northwind.

Set tdfNowaTabela = _

.CreateTableDef("NowaDefTabeli")

With tdfNowaTabela

.Fields.Append .CreateField("NowePole", _

dbDate)

End With

.TableDefs.Append tdfNowaTabela

' Drukuj informacje o nowym obiekcie TableDef.

DrukujDatę "Po utworzeniu nowej tabeli ", _

tdfNowaTabela

' Usuń nowy obiekt TableDef, gdyż jest to tylko

' przykład.

.TableDefs.Delete tdfNowaTabela.Name

.Close

End With

End Sub

Function DrukujDatę(strPom As String, _

tdfPom As TableDef)

' Drukuj informacje o podanym obiekcie TableDef

' zawarte we właściwościach DateCreated

' i LastUpdated.

Debug.Print strPom

Debug.Print "    Definicja tabeli: " & tdfPom.Name

Debug.Print "        DateCreated = " & _

tdfPom.DateCreated

Debug.Print "        LastUpdated = " & _

tdfPom.LastUpdated

Debug.Print

End Function


Właściwość DefaultValue - przykład (DAO/Microsoft Jet)
Właściwość DefaultValue - przykład

W poniższym przykładzie właściwość DefaultValue zastosowano do powiadomienia użytkownika wprowadzającego dane o domyślnej wartości pola. Ponadto pokazano, jak za pomocą właściwości DefaultValue są wypełniane nowe rekordy w przypadku braku innych danych wejściowych. Do uruchomienia tej procedury potrzebna jest funkcja DaneDomyślne.

Sub DefaultValueX()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim strPoprzDom As String

Dim rstPracownicy As Recordset

Dim strKomunikat As String

Dim strKod As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfPracownicy = _

dbsNorthwind.TableDefs!Pracownicy

' Zapamiętaj pierwotną wartość DefaultValue

' i ustaw tę właściwość na nową wartość.

strPoprzDom = _

tdfPracownicy.Fields!KodPocztowy.DefaultValue

tdfPracownicy.Fields!KodPocztowy.DefaultValue = _

"98052"

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenDynaset)

With rstPracownicy

' Dodaj nowy rekord do obiektu Recordset.

.AddNew

!Imię = "Jan"

!Nazwisko = "Kowalski"

' Pobierz dane od użytkownika, które zostaną

' zapisane w polu. Jeżeli użytkownik nie

' wprowadzi żadnych danych, w pole zostanie

' wpisana wartość właściwości DefaultValue.

strKomunikat = "Podaj kod pocztowy dla: " & _

vbCr & !Imię & " " & !Nazwisko & ":"

strKod = DaneDomyślne(strKomunikat, _

!KodPocztowy)

If strKod <> "" Then !KodPocztowy = strKod

.Update

' Przejdź do nowego rekordu i wydrukuj dane.

.Bookmark = .LastModified

Debug.Print "    Imię = " & !Imię

Debug.Print "    Nazwisko = " & !Nazwisko

Debug.Print "    Kod pocztowy = " & !KodPocztowy

' Usuń nowy rekord, gdyż jest to tylko przykład.

.Delete

.Close

End With

' Przywróć pierwotną wartość właściwości

' DefaultValue, gdyż jest to tylko przykład.

tdfPracownicy.Fields!KodPocztowy.DefaultValue = _

strPoprzDom

dbsNorthwind.Close

End Sub

Function DaneDomyślne(strMonit As String, _

fldPom As Field) As String

Dim strPełnyMonit As String

' Żądaj od użytkownika podania nowej wartości

' DefaultValue dla określonego obiektu Field.

strPełnyMonit = strMonit & vbCr & _

"[Wartość domyślna = " & fldPom.DefaultValue & _

", Anuluj - użyj wartości domyślnej]"

DaneDomyślne = InputBox(strPełnyMonit)

End Function


Właściwość DistinctCount - przykład (DAO/Microsoft Jet)
Właściwość DistinctCount - przykład

W poniższym przykładzie pokazano, w jaki sposób za pomocą właściwości DistinctCount można określić liczbę unikatowych wartości w obiekcie Index. Jednakże liczba ta będzie prawdziwa tylko bezpośrednio po utworzeniu obiektu Index. Pozostanie ona prawdziwa, jeżeli nie zmieni się żaden z kluczy lub zostaną dodane nowe klucze i nie zostanie usunięty żaden stary klucz; w przeciwnym razie liczba ta nie będzie wiarygodna. (Jeżeli wykonamy tę procedurę kilka razy, efekt ten będzie widoczny w wartościach właściwości DistinctCount istniejących obiektów Index.)

Sub DistinctCountX()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim idxKraj As Index

Dim idxPętla As Index

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfPracownicy = dbsNorthwind!Pracownicy

With tdfPracownicy

' Utwórz i dodaj nowy obiekt Index

' do tabeli Pracownicy.

Set idxKraj = .CreateIndex("IndeksKraj")

idxKraj.Fields.Append _

idxKraj.CreateField("Kraj")

.Indexes.Append idxKraj

' Kolekcja musi być odświeżona, aby nowa wartość

' DistinctCount była dostępna.

.Indexes.Refresh

' Wylicz elementy kolekcji Indexes, aby pokazać

' bieżące wartości właściwości DistinctCount.

Debug.Print " Kolekcja Indexes" & _

" przed dodaniem nowego rekordu"

For Each idxPętla In .Indexes

Debug.Print "    DistinctCount = " & _

idxPętla.DistinctCount & ", Name = " & _

idxPętla.Name

Next idxPętla

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

' Dodaj nowy rekord do tabeli Pracownicy.

With rstPracownicy

.AddNew

!Imię = "Jacek"

!Nazwisko = "Malinowski"

!Country = "Kanada"

.Update

End With

' Wylicz elementy kolekcji Indexes,

' aby pokazać zmodyfikowane wartości

' właściwości DistinctCount.

Debug.Print "Kolekcja Indexes" & _

" po dodaniu nowego" & _

" rekordu i odświeżeniu"

.Indexes.Refresh

For Each idxPętla In .Indexes

Debug.Print "    DistinctCount = " & _

idxPętla.DistinctCount & ", Name = " & _

idxPętla.Name

Next idxPętla

' Usuń nowy rekord, gdyż jest to tylko przykład.

With rstPracownicy

.Bookmark = .LastModified

.Delete

.Close

End With

' Usuń nową kolekcję Indexes, gdyż jest to

' tylko przykład.

.Indexes.Delete idxKraj.Name

End With

dbsNorthwind.Close

End Sub


Właściwość EditMode - przykład (DAO)
Właściwość EditMode - przykład

W poniższym przykładzie pokazano wartość właściwości EditMode na różnych etapach edycji. Do uruchomienia tej procedury potrzebna jest funkcja PokażTrybEdycji.

Sub EditModeX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenDynaset)

' Pokaż właściwość EditMode

' na różnych etapach edycji.

With rstPracownicy

PokażTrybEdycji "Przed wywołaniem Edit" & _

" lub AddNew:", .EditMode

.Edit

PokażTrybEdycji "Po użyciu Edit:", .EditMode

.Update

PokażTrybEdycji "Po użyciu Update:", .EditMode

.AddNew

PokażTrybEdycji "Po użyciu AddNew:", .EditMode

.CancelUpdate

PokażTrybEdycji "Po użyciu CancelUpdate:", _

.EditMode

.Close

End With

dbsNorthwind.Close

End Sub

Function PokażTrybEdycji(strPom As String, _

intTrybEdycji As Integer)

' Drukuj raport o właściwości EditMode.

Debug.Print strPom

Debug.Print "    EditMode = ";

Select Case intTrybEdycji

Case dbEditNone

Debug.Print "dbEditNone"

Case dbEditInProgress

Debug.Print "dbEditInProgress"

Case dbEditAdd

Debug.Print "dbEditAdd"

End Select

End Function


Właściwość FieldSize - przykład (DAO)
Właściwość FieldSize - przykład

W poniższym przykładzie wykorzystano właściwość FieldSize do zapisania w dwóch różnych tabelach liczby bajtów zajętych przez obiekty Field typu Memo i typu Long Binary.

Sub FieldSizeX()

Dim dbsNorthwind As Database

Dim rstKategorie As Recordset

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstKategorie = _

dbsNorthwind.OpenRecordset("Kategorie", _

dbOpenDynaset)

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenDynaset)

Debug.Print _

"Rozmiary pól rekordów z tabeli Kategorie"

With rstKategorie

Debug.Print "    Nazwa kategorii - " & _

"Opis (bajty) - Rysunek (bajty)"

' Wylicz rekordy z tabeli Kategorie i dla

' każdego z nich drukuj rozmiar pola Opis i pola

' Rysunek wyrażony w bajtach.

Do While Not .EOF

Debug.Print "        " & !NazwaKategorii & _

" - " & !Opis.FieldSize & " - " & _

!Rysunek.FieldSize

.MoveNext

Loop

.Close

End With

Debug.Print "Rozmiary pól rekordów" & _

" z tabeli Pracownicy"

With rstPracownicy

Debug.Print "    Nazwisko - Uwagi (bajty) -" & _

" Fotografia (bajty)"

' Wylicz rekordy z tabeli Kategorie

' i dla każdego z nich drukuj rozmiar pola Uwagi

' i pola Fotografia wyrażony w bajtach.

Do While Not .EOF

Debug.Print "        " & !Nazwisko & _

" - " & !Uwagi.FieldSize & " - " & _

!Fotografia.FieldSize

.MoveNext

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Właściwość Filter - przykład (DAO/Microsoft Jet)
Właściwość Filter - przykład

W poniższym przykładzie wykorzystano właściwość Filter do utworzenia nowego obiektu Recordset z istniejącego obiektu Recordset na podstawie podanych warunków. Do uruchomienia tej procedury potrzebna jest funkcja FiltrPola.

Sub FilterX()

Dim dbsNorthwind As Database

Dim rstZamówienia As Recordset

Dim intZamówienia As Integer

Dim strKraj As String

Dim rstKrajZamówień As Recordset

Dim strKomunikat As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstZamówienia = _

dbsNorthwind.OpenRecordset("Zamówienia", _

dbOpenSnapshot)

' Wypełnij obiekt Recordset.

rstZamówienia.MoveLast

intZamówienia = rstZamówienia.RecordCount

' Pobierz dane wprowadzone przez użytkownika.

strKraj = Trim(InputBox( _

"Podaj nazwę kraju dla filtru:"))

If strKraj <> "" Then

' Otwórz filtrowany obiekt Recordset.

Set rstKrajZamówień = _

FiltrPola(rstZamówienia, _

"KrajZamówień", strKraj)

With rstKrajZamówień

' Sprawdź właściwość RecordCount

' przed wypełnieniem obiektu

' Recordset; w przeciwnym razie

' może wystąpić błąd.

If .RecordCount <> 0 Then .MoveLast

' Drukuj liczbę rekordów pierwotnego obiektu

' Recordset i filtrowanego obiektu Recordset.

strKomunikat = "Zamówienia w pierwotnym" & _

" obiekcie Recordset: " & vbCr & _

intZamówienia & vbCr & _

"Zamówienia w filtrowanym obiekcie" & _

" Recordset (Kraj = '" & _

strKraj & "'): " & vbCr & .RecordCount

MsgBox strKomunikat

.Close

End With

End If

rstZamówienia.Close

dbsNorthwind.Close

End Sub

Function FiltrPola(rstPom As Recordset, _

strPole As String, strFiltr As String) As Recordset

' Ustaw filtr na określonym obiekcie Recordset

' i otwórz nowy obiekt Recordset.

rstPom.Filter = strPole & " = '" & strFiltr & "'"

Set FiltrPola = rstPom.OpenRecordset

End Function

Uwaga   Aby zobaczyć rezultaty filtrowania rekordów z tabeli Zamówienia, trzeba ustawić jej właściwość Filter i następnie, bazując na tej tabeli, otworzyć drugi obiekt Recordset.

Uwaga   Jeżeli wiemy, jakie dane chcemy wybrać, to na ogół efektywniejsze jest utworzenie obiektu Recordset za pomocą instrukcji SQL. Poniższy przykład pokazuje, jak można utworzyć tylko jeden obiekt Recordset i otrzymać rekordy zawierające dane z określonego kraju.

Sub FilterX2()

Dim dbsNorthwind As Database

Dim rstZamówienia As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Otwórz obiekt Recordset, który wybiera z tabeli

' rekordy dotyczące określonego kraju odbiorcy.

Set rstZamówienia = _

dbsNorthwind.OpenRecordset("SELECT * " & _

"FROM Zamówienia WHERE KrajOdbiorcy = 'USA'", _

dbOpenSnapshot)

rstZamówienia.Close

dbsNorthwind.Close

End Sub


Właściwość Foreign - przykład (DAO/Microsoft Jet)
Właściwość Foreign - przykład

W poniższym przykładzie wykorzystano właściwość Foreign do wskazania w obiekcie TableDef tych obiektów Index, które są indeksami klucza obcego. Aparat bazy danych Microsoft Jet tworzy takie indeksy podczas tworzenia obiektu Relation. Domyślną nazwą indeksów klucza obcego jest nazwa tabeli podstawowej plus nazwa tabeli obcej. Do uruchomienia tej procedury potrzebna jest funkcja DrukujObcy.

Sub ForeignX()

Dim dbsNorthwind As Database

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Drukuj raport o indeksach klucza obcego

' z dwóch obiektów TableDef i obiektu QueryDef.

DrukujObcy .TableDefs!Produkty

DrukujObcy .TableDefs!Zamówienia

DrukujObcy .TableDefs![Opisy zamówień]

.Close

End With

End Sub

Function DrukujObcy(tdfPom As TableDef)

Dim idxPętla As Index

With tdfPom

Debug.Print "Kolekcja Indexes w obiekcie" & _

" TableDef " & .Name & " "

' Wylicz elementy kolekcji Indexes

' określonego obiektu

' TableDef.

For Each idxPętla In .Indexes

Debug.Print "    " & idxPętla.Name

Debug.Print "        Foreign = " & _

idxPętla.Foreign

Next idxPętla

End With

End Function


Właściwości ForeignName, ForeignTable i Table - przykład (DAO/Microsoft Jet)
Właściwości ForeignName, ForeignTable i Table - przykład

W poniższym przykładzie pokazano, jak właściwości Table, ForeignTable i ForeignName definiują związek (obiekt Relation) pomiędzy dwoma tabelami.

Sub ForeignNameX()

Dim dbsNorthwind As Database

Dim relPętla As Relation

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Debug.Print "Obiekt Relation"

Debug.Print "                    Tabela - Pole"

Debug.Print "    Podstawowa (jeden)   ";

Debug.Print ".Table - .Fields(0).Name"

Debug.Print "    Obca (wiele) ";

Debug.Print ".ForeignTable - " & _

" .Fields(0).ForeignName"

' Wylicz elementy kolekcji Relations

' bazy danych Northwind, aby wyświetlić

' raport o właściwościach obiektów Relation

' i ich obiektów Field.

For Each relPętla In dbsNorthwind.Relations

With relPętla

Debug.Print

Debug.Print .Name & " Obiekt Relation"

Debug.Print _

"                    Tabela - Pole"

Debug.Print "    Podstawowa (jeden)   ";

Debug.Print .Table & " - " & .Fields(0).Name

Debug.Print "    Obca (wiele) ";

Debug.Print .ForeignTable & " - " & _

.Fields(0).ForeignName

End With

Next relPętla

dbsNorthwind.Close

End Sub


Właściwość IgnoreNulls - przykład (DAO/Microsoft Jet)
Właściwość IgnoreNulls - przykład

W poniższym przykładzie ustawiana jest, zgodnie z życzeniem użytkownika, właściwość IgnoreNulls nowego obiektu Index na wartość True lub False. Następnie pokazany wpływ tej właściwości na obiekt Recordset z rekordem, którego pole kluczowe zawiera wartość Null.

Sub IgnoreNullsX()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim idxNowy As Index

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfPracownicy = dbsNorthwind!Pracownicy

With tdfPracownicy

' Utwórz nowy obiekt Index.

Set idxNowy = .CreateIndex("NowyIndeks")

idxNowy.Fields.Append _

idxNowy.CreateField("Kraj")

' Ustaw właściwość IgnoreNulls nowego obiektu

' Index zgodnie z życzeniem użytkownika.

Select Case MsgBox( _

"Ustawić IgnoreNulls na True?",vbYesNoCancel)

Case vbYes

idxNowy.IgnoreNulls = True

Case vbNo

idxNowy.IgnoreNulls = False

Case Else

dbsNorthwind.Close

End

End Select

' Dołącz nowy obiekt Index do kolekcji Indexes

' tabeli Pracownicy.

.Indexes.Append idxNowy

.Indexes.Refresh

End With

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

With rstPracownicy

' Dodaj nowy rekord do tabeli Pracownicy.

.AddNew

!Imię = "Piotr"

!Nazwisko = "Nowicki"

.Update

' Użyj nowego indeksu do ustawienia kolejności

' rekordów.

.Index = idxNowy.Name

.MoveFirst

Debug.Print "Index = " & .Index & _

", IgnoreNulls = " & idxNowy.IgnoreNulls

Debug.Print "    Kraj - Nazwisko"

' Wylicz rekordy obiektu Recordset. Wartość

' właściwości IgnoreNulls określa, czy nowo

' dodany rekord zostanie wydrukowany.

Do While Not .EOF

Debug.Print "        " & _

IIf(IsNull(!Kraj), "[Null]", !Kraj) & _

" - " & !Imię & " " & !Nazwisko

.MoveNext

Loop

' Usuń nowy rekord, gdyż jest to tylko przykład.

.Index = ""

.Bookmark = .LastModified

.Delete

.Close

End With

' Usuń nowy obiekt Index, gdyż jest to tylko

' przykład.

tdfPracownicy.Indexes.Delete idxNowy.Name

dbsNorthwind.Close

End Sub


Właściwość Index - przykład (DAO/Microsoft Jet)
Właściwość Index - przykład

W poniższym przykładzie wykorzystano właściwość Index do ustawiania różnej kolejności rekordów w obiekcie Recordset typu tabela.

Sub IndexPropertyX()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim rstPracownicy As Recordset

Dim idxPętla As Index

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

Set tdfPracownicy = _

dbsNorthwind.TableDefs!Pracownicy

With rstPracownicy

' Wylicz elementy kolekcji Indexes tabeli

' Pracownicy.

For Each idxPętla In tdfPracownicy.Indexes

.Index = idxPętla.Name

Debug.Print "Index = " & .Index

Debug.Print "    Nr pracownika - " & _

"Kod pocztowy - Nazwisko"

.MoveFirst

' Wylicz rekordy obiektu Recordset, aby

' pokazać kolejność, w jakiej występują.

Do While Not .EOF

Debug.Print "        " & !NrPracownika & _

" - " & !KodPocztowy & " - " & _

!Imię & " " & !Nazwisko

.MoveNext

Loop

Next idxPętla

.Close

End With

dbsNorthwind.Close

End Sub


Właściwość LastModified - przykład (DAO)
Właściwość LastModified - przykład

W poniższym przykładzie wykorzystano właściwość LastModified do przesunięcia wskaźnika bieżącego rekordu do rekordu, który został zmodyfikowany, oraz do nowo utworzonego rekordu.

Sub LastModifiedX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim strImię As String

Dim strNazwisko As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenDynaset)

With rstPracownicy

' Przechowaj bieżące dane.

strImię = !Imię

strNazwisko = !Nazwisko

' Zmień dane w bieżącym rekordzie.

.Edit

!Imię = "Katarzyna"

!Nazwisko = "Sipińska"

.Update

' Przesuń wskaźnik bieżącego rekordu do

' ostatnio zmienionego lub dodanego rekordu.

.Bookmark = .LastModified

Debug.Print _

"Dane w rekordzie wskazanym" & _

" przez LastModified " & _

"po użyciu metody Edit: " & _

!Imię & " " & !Nazwisko

' Przywróć dane pierwotne,

' ponieważ jest to tylko przykład.

.Edit

!Imię = strImię

!Nazwisko = strNazwisko

.Update

' Dodaj nowy rekord.

.AddNew

!Imię = "Roman"

!Nazwisko = "Chabros"

.Update

' Przesuń wskaźnik bieżącego rekordu do

' ostatnio zmienionego lub dodanego rekordu.

.Bookmark = .LastModified

Debug.Print _

"Dane w rekordzie wskazanym" & _

" przez LastModified " & _

"po użyciu metody AddNew: " & _

!Imię & " " & !Nazwisko

' Usuń nowy rekord, gdyż jest to tylko przykład.

.Delete

.Close

End With

dbsNorthwind.Close

End Sub


Właściwość LockEdits - przykład (DAO)
Właściwość LockEdits - przykład

W poniższym przykładzie przedstawiono blokowanie pesymistyczne, ustawiając właściwość LockEdits na wartość True, i blokowanie optymistyczne, ustawiając właściwość LockEdits na wartość False. Ponadto pokazano, jaki rodzaj obsługi błędów jest potrzebny do zmodyfikowania pola w wielodostępnym środowisku bazy danych. Do uruchomienia tej procedury konieczne są funkcje BlokadaPesym i BlokadaOptym.

Sub LockEditsX()

Dim dbsNorthwind As Database

Dim rstKlienci As Recordset

Dim strPoprzNazw As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstKlienci = dbsNorthwind.OpenRecordset( _

"Klienci", dbOpenDynaset)

With rstKlienci

' Przechowaj pierwotne dane.

strPoprzNazw = !NazwaFirmy

If MsgBox( _

"Przykład blokowania pesymistycznego...", _

vbOKCancel) = vbOK Then

' Spróbuj zmodyfikować dane, gdy jest

' stosowane blokowanie pesymistyczne.

If BlokadaPesym(rstKlienci, !NazwaFirmy, _

"FarmFood") Then

MsgBox "Edycja rekordu" & _

" zakończona pomyślnie."

' Przywróć dane pierwotne...

.Edit

!NazwaFirmy = strPoprzNazw

.Update

End If

End If

If MsgBox( _

"Przykład blokowania optymistycznego...", _

vbOKCancel) = vbOK Then

' Spróbuj zmodyfikować dane, gdy jest

' stosowane blokowanie optymistyczne.

If BlokadaOptym(rstKlienci, !NazwaFirmy, _

"FarmFood") Then

MsgBox " Edycja rekordu" & _

" zakończona pomyślnie."

' Przywróć dane pierwotne...

.Edit

!NazwaFirmy = strPoprzNazw

.Update

End If

End If

.Close

End With

dbsNorthwind.Close

End Sub

Function BlokadaPesym(rstPom As Recordset, _

fldPom As Field, strNowe As String) As Boolean

dim errPętla as Error

BlokadaPesym = True

With rstPom

.LockEdits = True

' Jeżeli właściwość LockEdits zostanie ustawiona

' na True, błędy można przechwycić po wywołaniu

' metody Edit.

On Error GoTo Błąd_blokady

.Edit

On Error GoTo 0

' Jeżeli metoda Edit nadal wykonuje się, to

' nie wystąpiły żadne błędy;

' można modyfikować dane.

If .EditMode = dbEditInProgress Then

fldPom = strNowe

.Update

.Bookmark = .LastModified

Else

' Pobierz bieżący rekord, aby zobaczyć

' zmiany dokonane przez innego użytkownika.

.Move 0

End If

End With

Exit Function

Błąd_blokady:

If DBEngine.Errors.Count > 0 Then

' Wylicz elementy kolekcji Errors.

For Each errPętla In DBEngine.Errors

MsgBox "Błąd numer: " & errPętla.Number & _

vbCr & errPętla.Description

Next errPętla

BlokadaPesym = False

End If

Resume Next

End Function

Function BlokadaOptym(rstPom As Recordset, _

fldPom As Field, strNowe As String) As Boolean

dim ErrPętla as Error

BlokadaOptym = True

With rstPom

.LockEdits = False

.Edit

fldPom = strNowe

' Jeżeli właściwość LockEdits

' zostanie ustawiona na False,

' błędy można przechwycić

' po wywołaniu metody Update.

On Error GoTo Błąd_blokady

.Update

On Error GoTo 0

' Jeżeli metoda Edit nie jest już wykonywana,

' nie wykryto żadnych błędów;

' można modyfikować dane.

If .EditMode = dbEditNone Then

' Przesuń wskaźnik bieżącego rekordu do

' ostatnio zmodyfikowanego rekordu.

.Bookmark = .LastModified

Else

.CancelUpdate

' Pobierz bieżący rekord, aby zobaczyć

' zmiany dokonane przez innego użytkownika.

.Move 0

End If

End With

Exit Function

Błąd_blokady:

If DBEngine.Errors.Count > 0 Then

' Wylicz elementy kolekcji Errors.

For Each errPętla In DBEngine.Errors

MsgBox "Błąd numer: " & errPętla.Number & _

vbCr & errPętla.Description

Next errPętla

BlokadaOptym = False

End If

Resume Next

End Function


Właściwość NoMatch - przykład (DAO/Microsoft Jet)
Właściwość NoMatch - przykład

W poniższym przykładzie wykorzystano właściwość NoMatch do określenia, czy metody Seek i FindFirst zakończyły się pomyślnie, i jeżeli nie, do wykonania odpowiednich kroków. Do uruchomienia tej procedury potrzebne są procedury SzukajSeek i SzukajFind.

Sub NoMatchX()

Dim dbsNorthwind As Database

Dim rstProdukty As Recordset

Dim rstKlienci As Recordset

Dim strKomunikat As String

Dim strSeek As String

Dim strKraj As String

Dim varZakładka As Variant

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Wartością domyślną jest dbOpenTable; wymagane

' przy używaniu właściwości Index.

Set rstProdukty = _

dbsNorthwind.OpenRecordset("Produkty")

With rstProdukty

.Index = "KluczPodstawowy"

Do While True

' Pokaż bieżący rekord; żądaj od

' użytkownika podania danych.

strKomunikat = "Właściwość NoMatch" & _

" z metodą Seek " & vbCr & _

"Nr produktu: " & !NrProduktu & vbCr & _

"Nazwa produktu: " & !NazwaProduktu & _

vbCr & "NoMatch = " & .NoMatch & vbCr & _

vbCr & "Podaj numer produktu:"

strSeek = InputBox(strKomunikat)

If strSeek = "" Then Exit Do

' Wywołaj procedurę, która wyszukuje rekord

' w oparciu o numer podany przez użytkownika.

SzukajSeek rstProdukty, Val(strSeek)

Loop

.Close

End With

Set rstKlienci = dbsNorthwind.OpenRecordset( _

"SELECT NazwaFirmy, Kraj FROM Klienci " & _

"ORDER BY NazwaFirmy", dbOpenSnapshot)

With rstKlienci

Do While True

' Pokaż bieżący rekord; żądaj od

' użytkownika podania danych.

strKomunikat = "NoMatch z metodą FindFirst" _

& vbCr & "Nazwa klienta: " & !NazwaFirmy _

& vbCr & "Kraj: " & !Kraj & vbCr & _

"NoMatch = " & .NoMatch & vbCr & vbCr & _

"Podaj nazwę kraju:"

strKraj = Trim(InputBox(strKomunikat))

If strKraj = "" Then Exit Do

' Wywołaj procedurę poszukującą rekordu

' w oparciu o nazwę kraju podaną

' przez użytkownika.

SzukajFind rstKlienci, _

"Kraj = '" & strKraj & "'"

Loop

.Close

End With

dbsNorthwind.Close

End Sub

Sub SzukajSeek(rstPom As Recordset, _

intSeek As Integer)

Dim varZakładka As Variant

Dim strKomunikat As String

With rstPom

' Zapamiętaj pozycję bieżącego rekordu.

varZakładka = .Bookmark

.Seek "=", intSeek

' Jeżeli metoda Seek

' zakończy się niepowodzeniem,

' powiadom o tym użytkownika i powróć

' do ostatniego bieżącego rekordu.

If .NoMatch Then

strKomunikat = _

"Nie znaleziony! " & _

"Powrót do bieżącego rekordu." & _

vbCr & vbCr & "NoMatch = " & .NoMatch

MsgBox strKomunikat

.Bookmark = varZakładka

End If

End With

End Sub

Sub SzukajFind(rstPom As Recordset, _

strSzukaj As String)

Dim varZakładka As Variant

Dim strKomunikat As String

With rstPom

' Zapamiętaj pozycję bieżącego rekordu.

varZakładka = .Bookmark

.FindFirst strSzukaj

' Jeżeli metoda Find

' zakończy się niepowodzeniem,

' powiadom o tym użytkownika i powróć do

' ostatniego bieżącego rekordu.

If .NoMatch Then

strKomunikat = _

" Nie znaleziony! " & _

"Powrót do bieżącego rekordu." & _

vbCr & vbCr & "NoMatch = " & .NoMatch

MsgBox strKomunikat

.Bookmark = varZakładka

End If

End With

End Sub


Właściwość OrdinalPosition - przykład (DAO)
Właściwość OrdinalPosition - przykład

W poniższym przykładzie zmiana wartości właściwości OrdinalPosition w obiekcie TableDef tabeli Pracownicy wpływa na kolejność obiektów Field w wynikowym obiekcie Recordset. Jeżeli właściwość OrdinalPosition wszystkich obiektów Field jest ustawiona na 1, to w wynikowym obiekcie Recordset obiekty Field będą występowały w porządku alfabetycznym. Należy zauważyć, że wartości właściwości OrdinalPosition w obiekcie Recordset nie są zgodne z odpowiednimi wartościami w obiekcie TableDef, ale po prostu odzwierciedlają końcowy rezultat zmian dokonywanych w obiekcie TableDef.

Sub OrdinalPositionX()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim aintPozycja() As Integer

Dim astrNazwaPola() As String

Dim intPom As Integer

Dim fldPom As Field

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfPracownicy = _

dbsNorthwind.TableDefs("Pracownicy")

With tdfPracownicy

' Wyświetl i przechowaj pierwotne wartości

' właściwości OrdinalPosition.

Debug.Print _

"Wartości pierwotne właściwości" & _

" OrdinalPosition w TableDef."

ReDim aintPozycja(0 To .Fields.Count - 1) _

As Integer

ReDim astrNazwaPola(0 To .Fields.Count - 1) _

As String

For intPom = 0 To .Fields.Count - 1

aintPozycja(intPom) = _

.Fields(intPom).OrdinalPosition

astrNazwaPola(intPom) = .Fields(intPom).Name

Debug.Print , aintPozycja(intPom), _

astrNazwaPola(intPom)

Next intPom

' Zmień wartości właściwości OrdinalPosition.

For Each fldPom In .Fields

fldPom.OrdinalPosition = 1

Next fldPom

' Otwórz nowy obiekt Recordset, aby pokazać,

' jak wartości właściwości OrdinalPosition

' wpłynęły na kolejność rekordów.

Debug.Print _

"Wartości właściwości OrdinalPosition " & _

"z wynikowego obiektu Recordset."

Set rstPracownicy = _

dbsNorthwind.OpenRecordset( _

"SELECT * FROM Pracownicy")

For Each fldPom In rstPracownicy.Fields

Debug.Print , fldPom.OrdinalPosition, _

fldPom.Name

Next fldPom

rstPracownicy.Close

' Przywróć pierwotne wartości właściwości

' OrdinalPosition, gdyż jest to tylko przykład.

For intPom = 0 To .Fields.Count - 1

.Fields( _

 	astrNazwaPola( _

intPom)).OrdinalPosition = _

aintPozycja(intPom)

Next intPom

End With

dbsNorthwind.Close

End Sub


Właściwość PercentPosition - przykład (DAO)
Właściwość PercentPosition - przykład

W poniższym przykładzie wykorzystano właściwość PercentPosition do określenia pozycji wskaźnika bieżącego rekordu względem początku zestawu rekordów Recordset.

Sub PercentPositionX()

Dim dbsNorthwind As Database

Dim rstProdukty As Recordset

Dim strSzukaj As String

Dim strKomunikat As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' PercentPosition działa tylko z dynamicznymi

' i utrwalonymi zestawami rekordów.

Set rstProdukty = dbsNorthwind.OpenRecordset( _

"SELECT NazwaProduktu FROM Produkty " & _

"ORDER BY NazwaProduktu", dbOpenSnapshot)

With rstProdukty

' Wypełnij obiekt Recordset.

.MoveLast

.MoveFirst

Do While True

' Drukuj informacje o bieżącym rekordzie

' i żądaj od użytkownika podania danych.

strKomunikat = "Produkt: " & _

!NazwaProduktu & vbCr & _

"Wskaźnik rekordu znajduje się " & _

Format(.PercentPosition, "##0.0") & _

"% od " & vbCr & _

"początku zestawu rekordów." & vbCr & _

"Podaj ciąg znaków " & _

"reprezentujących nazwę " & _

"poszukiwanego produktu."

strSzukaj = Trim(InputBox(strKomunikat))

If strSzukaj = "" Then Exit Do

' Spróbuj znaleźć rekord

' odpowiadający wzorcowi.

.FindFirst "NazwaProduktu >= '" & _

strSzukaj & "'"

If .NoMatch Then .MoveLast

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Właściwość Primary - przykład (DAO/Microsoft Jet)
Właściwość Primary - przykład

W poniższym przykładzie wykorzystano właściwość Primary do wyznaczenia nowego obiektu Index w nowym obiekcie TableDef do pełnienia roli podstawowego obiektu Index dla tej tabeli. Należy zauważyć, że ustawienie właściwości Primary na wartość True automatycznie ustawia również na True właściwości Unique i Required.

Sub PrimaryX()

Dim dbsNorthwind As Database

Dim tdfNowa As TableDef

Dim idxNowy As Index

Dim idxPętla As Index

Dim fldPętla As Field

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Utwórz i dołącz nowy obiekt TableDef do

' kolekcji TableDefs bazy danych Northwind.

Set tdfNowa = _

dbsNorthwind.CreateTableDef("NowaTabela")

tdfNowa.Fields.Append _

tdfNowa.CreateField("PoleNum", _

dbLong, 20)

tdfNowa.Fields.Append _

tdfNowa.CreateField("PoleTekst", _

dbText, 20)

dbsNorthwind.TableDefs.Append tdfNowa

With tdfNowa

' Utwórz i dołącz nowy obiekt Index do

' kolekcji Indexes nowego obiektu TableDef.

Set idxNowy = .CreateIndex("InkdeksNum")

idxNowy.Fields.Append _

idxNowy.CreateField("PoleNum")

idxNowy.Primary = True

.Indexes.Append idxNowy

Set idxNowy = .CreateIndex("IndeksTekst")

idxNowy.Fields.Append _

idxNowy.CreateField("PoleTekst")

.Indexes.Append idxNowy

Debug.Print .Indexes.Count & _

" Kolekcja Indexes " & _

" obiektu TableDef" & .Name

' Wylicz elementy kolekcji Indexes.

For Each idxPętla In .Indexes

With idxPętla

Debug.Print "    " & .Name

' Wylicz elementy kolekcji Fields każdego

' obiektu Index.

Debug.Print "        Kolekcja Fields"

For Each fldPętla In .Fields

Debug.Print "            " & _

fldPętla.Name

Next fldPętla

' Wylicz elementy kolekcji Properties

' każdego obiektu Index.

Debug.Print "        Kolekcja Properties"

For Each prpPętla In .Properties

Debug.Print "            " & _

prpPętla.Name & " = " & _

IIf(prpPętla = "", "[pusta]", _

prpPętla)

Next prpPętla

End With

Next idxPętla

End With

dbsNorthwind.TableDefs.Delete tdfNowa.Name

dbsNorthwind.Close

End Sub


Właściwość RecordCount - przykład (DAO)
Właściwość RecordCount - przykład

W poniższym przykładzie przedstawiono właściwość RecordCount w różnych typach obiektów Recordset przed i po ich wypełnieniu.

Sub RecordCountX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Otwórz obiekt Recordset typu tabela

' i pokaż właściwość RecordCount.

Set rstPracownicy = .OpenRecordset("Pracownicy")

Debug.Print "Zestaw rekordów typu tabela " & _

"z tabeli Pracownicy"

Debug.Print "    RecordCount = " & _

rstPracownicy.RecordCount

rstPracownicy.Close

' Otwórz obiekt Recordset typu zestaw dynamiczny

' i pokaż właściwość RecordCount

' przed wypełnieniem tego obiektu.

Set rstPracownicy = .OpenRecordset( _

"Pracownicy", dbOpenDynaset)

Debug.Print "Dynamiczny zestaw rekordów " & _

"z tabeli Pracownicy przed wywołaniem " & _

"metody MoveLast"

Debug.Print "    RecordCount = " & _

rstPracownicy.RecordCount

' Pokaż właściwość RecordCount po

' wypełnieniu obiektu Recordset.

rstPracownicy.MoveLast

Debug.Print " Dynamiczny zestaw rekordów " & _

"z tabeli Pracownicy po użyciu metody " & _

"MoveLast"

Debug.Print "    RecordCount = " & _

rstPracownicy.RecordCount

rstPracownicy.Close

' Otwórz obiekt Recordset typu utrwalonego

' i pokaż właściwość RecordCount

' przed wypełnieniem tego obiektu.

Set rstPracownicy = .OpenRecordset( _

"Pracownicy", dbOpenSnapshot)

Debug.Print "Utrwalony zestaw rekordów " & _

"z tabeli Pracownicy przed wywołaniem " & _

"metody MoveLast"

Debug.Print "    RecordCount = " & _

rstPracownicy.RecordCount

' Pokaż właściwość RecordCount po

' wypełnieniu obiektu Recordset.

rstPracownicy.MoveLast

Debug.Print "Utrwalony zestaw rekordów " & _

"z tabeli Pracownicy po użyciu metody " & _

"MoveLast"

Debug.Print "    RecordCount = " & _

rstPracownicy.RecordCount

rstPracownicy.Close

' Otwórz obiekt Recordset typu progresywnego

' i pokaż właściwość RecordCount

' przed wypełnieniem tego obiektu.

Set rstPracownicy = .OpenRecordset( _

"Pracownicy", dbOpenForwardOnly)

Debug.Print "Progresywny zestaw rekordów " & _

"z tabeli Pracownicy przed wywołaniem " & _

"metody MoveLast"

Debug.Print "    RecordCount = " & _

rstPracownicy.RecordCount

' Pokaż właściwość RecordCount po

' wywołaniu metody MoveNext.

rstPracownicy.MoveNext

Debug.Print "Progresywny zestaw rekordów " & _

"z tabeli Pracownicy po użyciu metody " & _

"MoveNext"

Debug.Print "    RecordCount = " & _

rstPracownicy.RecordCount

rstPracownicy.Close

.Close

End With

End Sub


Właściwość RecordsAffected - przykład (DAO)
Właściwość RecordsAffected - przykład

W poniższym przykładzie wykorzystano właściwość RecordsAffected z kwerendami funkcjonalnymi wykonywanymi z obiektu Database i z obiektu QueryDef. Do uruchomienia tej procedury potrzebna jest funkcja WydrukRekordów.

Sub RecordsAffectedX()

Dim dbsNorthwind As Database

Dim qdfPom As QueryDef

Dim strSQLZmień As String

Dim strSQLOdtwórz As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Drukuj raport o zawartości tabeli Pracownicy.

' Debug.Print _

"Liczba rekordów tabeli Pracownicy: " & _

.TableDefs!Pracownicy.RecordCount

WydrukRekordów dbsNorthwind

' Sformułuj i wykonaj kwerendę funkcjonalną.

strSQLZmień = "UPDATE Pracownicy " & _

"SET Kraj = 'Stany Zjednoczone' " & _

"WHERE Kraj = 'USA'"

.Execute strSQLZmień

' Drukuj raport o zawartości tabeli Pracownicy.

Debug.Print "Wartość RecordsAffected po " & _

"wykonaniu kwerendy z obiektu Database: " & _

.RecordsAffected

WydrukRekordów dbsNorthwind

' Sformułuj i wykonaj inną kwerendę

' funkcjonalną.

strSQLOdtwórz = "UPDATE Pracownicy " & _

"SET Kraj = 'USA' " & _

"WHERE Kraj = 'Stany Zjednoczone' "

Set qdfPom = .CreateQueryDef("", strSQLOdtwórz)

qdfPom.Execute

' Drukuj raport o zawartości tabeli Pracownicy.

Debug.Print "Wartość RecordsAffected po " & _

"wykonaniu kwerendy z obiektu QueryDef: " & _

 qdfPom.RecordsAffected

WydrukRekordów dbsNorthwind

.Close

End With

End Sub

Function WydrukRekordów(dbsNorthwind As Database)

Dim rstPracownicy As Recordset

' Otwórz obiekt Recordset z tabeli Pracownicy.

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

With rstPracownicy

' Wylicz rekordy obiektu Recordset.

.MoveFirst

Do While Not .EOF

Debug.Print "    " & !Nazwisko & ", " & !Kraj

.MoveNext

Loop

.Close

End With

End Function


Właściwość Restartable - przykład (DAO)
Właściwość Restartable - przykład

W poniższym przykładzie przedstawiono właściwość Restartable dla różnych obiektów Recordset.

Sub RestartableX()

Dim dbsNorthwind As Database

Dim rstPom As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Otwórz obiekt Recordset typu tabela

' i drukuj jego właściwość Restartable.

Set rstPom = .OpenRecordset("Pracownicy", _

dbOpenTable)

Debug.Print "Zestaw rekordów typu tabela z " & _

"tabeli Pracownicy"

Debug.Print "    Restartable = " & _

rstPom.Restartable

rstPom.Close

' Otwórz obiekt Recordset z użyciem instrukcji

' SQL i drukuj jego właściwość Restartable.

Set rstPom = _

.OpenRecordset("SELECT * FROM Pracownicy")

Debug.Print "Zestaw rekordów otwarty za " & _

"pomocą instrukcji SQL"

Debug.Print "    Restartable = " & _

rstPom.Restartable

rstPom.Close

' Otwórz obiekt Recordset z zapisanego obiektu

' QueryDef i drukuj jego właściwość Restartable.

Set rstPom = _

.OpenRecordset("Aktualna lista produktów")

Debug.Print " Zestaw rekordów bazujący na " & _

"trwałym obiekcie QueryDef (" & _

rstPom.Name & ")"

Debug.Print "    Restartable = " & _

rstPom.Restartable

rstPom.Close

.Close

End With

End Sub


Właściwość Size - przykład (DAO)
Właściwość Size - przykład

W poniższym przykładzie przedstawiono działanie właściwości Size, tworząc wykaz nazw i rozmiarów obiektów Field z tabeli Pracownicy.

Sub SizeX()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim fldNowe As Field

Dim fldPętla As Field

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfPracownicy = _

dbsNorthwind.TableDefs!Pracownicy

With tdfPracownicy

' Utwórz i dołącz nowy obiekt Field do

' tabeli Pracownicy.

Set fldNowe = .CreateField("TelefonFaks")

fldNowe.Type = dbText

fldNowe.Size = 20

.Fields.Append fldNowe

Debug.Print "Obiekt TableDef: " & .Name

Debug.Print "    Nazwa pola - Typ pola " & _

"- Rozmiar pola"

' Wylicz elementy kolekcji Fields;

' drukuj nazwy, typy i rozmiary pól.

For Each fldPętla In .Fields

Debug.Print "        " & fldPętla.Name & _

" - " & fldPętla.Type & " - " & _

fldPętla.Size

Next fldPętla

' Usuń nowe pole, gdyż jest to tylko przykład.

.Fields.Delete fldNowe.Name

End With

dbsNorthwind.Close

End Sub


Właściwość Sort - przykład (DAO/Microsoft Jet)
Właściwość Sort - przykład

W poniższym przykładzie przedstawiono właściwość Sort, zmieniając jej wartość i tworząc nowy obiekt Recordset. Do uruchomienia tej procedury potrzebna jest funkcja WydrukSort.

Sub SortX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim rstPracSort As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenDynaset)

With rstPracownicy

WydrukSort "Pierwotny obiekt Recordset:", _

rstPracownicy

.Sort = "Nazwisko, Imię"

' Drukuj właściwość Sort i kolejność rekordów.

WydrukSort "Obiekt Recordset po zmianie " & _

"właściwości Sort:", rstPracownicy

' Z bieżącego obiektu Recordset otwórz nowy

' obiekt Recordset.

Set rstPracSort = .OpenRecordset

' Drukuj właściwość Sort i kolejność rekordów.

WydrukSort "Nowy obiekt Recordset:", rstPracSort

rstPracSort.Close

.Close

End With

dbsNorthwind.Close

End Sub

Function WydrukSort(strPom As String, _

rstPom As Recordset)

With rstPom

Debug.Print strPom

Debug.Print "    Sort = " & _

IIf(.Sort <> "", .Sort, "[pusta]")

.MoveFirst

' Wylicz rekordy obiektu Recordset.

Do While Not .EOF

Debug.Print "        " & !Nazwisko & _

", " & !Imię

.MoveNext

Loop

End With

End Function

Uwaga   Jeżeli wiemy, jakie dane chcemy wybrać, to zwykle efektywniejszym sposobem utworzenia obiektu Recordset jest użycie instrukcji SQL. Poniższy przykład pokazuje, w jaki sposób można utworzyć tylko jeden obiekt, uzyskując takie same rezultaty, jak w przykładzie przedstawionym powyżej.

Sub SortX2()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Otwórz obiekt Recordset z użyciem instrukcji SQL,

' która określa porządek sortowania.

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("SELECT * " & _

"FROM Pracownicy ORDER BY Nazwisko, Imię", _

dbOpenDynaset)

dbsNorthwind.Close

End Sub


Właściwości SourceField, SourceTable - przykład (DAO)
Właściwości SourceField, SourceTable - przykład

W poniższym przykładzie przedstawiono właściwości SourceField i SourceTable, otwierając obiekt Recordset utworzony z pól pochodzących z dwóch tabel.

Sub SourceFieldX()

Dim dbsNorthwind As Database

Dim rstProduktyKategorie As Recordset

Dim fldPętla As Field

Dim strSQL As String

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Otwórz obiekt Recordset z użyciem instrukcji SQL,

' która wykorzystuje pola z dwóch różnych tabel.

strSQL = "SELECT NrProduktu AS IdProd, " & _

"NazwaProduktu AS NazwaProd, " & _

"Kategorie.NrKategorii AS IdKat, " & _

"NazwaKategorii AS NazwaKat " & _

"FROM Kategorie INNER JOIN Produkty ON " & _

"Kategorie.NrKategorii = " & _

"Produkty.NrKategorii " & _

"ORDER BY NazwaProduktu"

Set rstProduktyKategorie = _

dbsNorthwind.OpenRecordset(strSQL)

Debug.Print _

"Pole - Tabela źródłowa - Pole źródłowe"

' Wylicz elementy kolekcji Fields obiektu

' Recordset drukując nazwę pola, tabelę źródłową

' i nazwę źródłową.

For Each fldPętla In rstProduktyKategorie.Fields

Debug.Print "    " & fldPętla.Name & " - " & _

fldPętla.SourceTable & " - " & _

fldPętla.SourceField

Next fldPętla

rstProduktyKategorie.Close

dbsNorthwind.Close

End Sub


Właściwość SQL - przykład (DAO)
Właściwość SQL - przykład

W poniższym przykładzie jest ustawiana i zmieniana właściwość SQL tymczasowego obiektu QueryDef. Następnie porównywane są uzyskane rezultaty. Do uruchomienia tej procedury potrzebna jest funkcja WydrukSQL.

Sub SQLX()

Dim dbsNorthwind As Database

Dim qdfPom As QueryDef

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set qdfPom = dbsNorthwind.CreateQueryDef("")

' Otwórz obiekt Recordset, używając tymczasowego

' obiektu QueryDef, i drukuj raport.

WydrukSQL "SELECT * FROM Pracownicy " & _

"WHERE Kraj = 'USA' " & _

"ORDER BY Nazwisko", qdfPom

' Otwórz obiekt Recordset, używając tymczasowego

' obiektu QueryDef, i drukuj raport.

WydrukSQL "SELECT * FROM Pracownicy " & _

"WHERE Kraj = 'UK' " & _

"ORDER BY Nazwisko", qdfPom

dbsNorthwind.Close

End Sub

Function WydrukSQL(strSQL As String, _

qdfPom As QueryDef)

Dim rstPracownicy As Recordset

' Ustaw właściwość SQL tymczasowego obiektu

' QueryDef i otwórz obiekt Recordset.

qdfPom.SQL = strSQL

Set rstPracownicy = qdfPom.OpenRecordset

Debug.Print strSQL

With rstPracownicy

' Wylicz rekordy obiektu Recordset.

Do While Not .EOF

Debug.Print "    " & !Imię & " " & _

!Nazwisko & ", " & !Kraj

.MoveNext

Loop

.Close

End With

End Function


Właściwość Type - przykład (DAO)
Właściwość Type - przykład

W poniższym przykładzie wykorzystano właściwość Type, zwracając nazwę stałej, która odpowiada wartości właściwości Type dla czterech różnych typów obiektów Recordset. Do uruchomienia tej procedury potrzebna jest funkcja TypZestawuRek.

Sub TypeX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Domyślną stałą jest dbOpenTable.

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

Debug.Print "Zestaw rekordów typu tabela " & _

"(tabela Pracownicy): " & _

TypZestawuRek(rstPracownicy.Type)

rstPracownicy.Close

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenDynaset)

Debug.Print "Zestaw rekordów typu zestaw " & _

"dynamiczny (tabela Pracownicy): " & _

TypZestawuRek(rstPracownicy.Type)

rstPracownicy.Close

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenSnapshot)

Debug.Print "Zestaw rekordów typu " & _

"utrwalonego (tabela Pracownicy): " & _

TypZestawuRek(rstPracownicy.Type)

rstPracownicy.Close

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy", _

dbOpenForwardOnly)

Debug.Print "Zestaw rekordów typu " & _

"progresywnego (tabela Pracownicy): " & _

TypZestawuRek(rstPracownicy.Type)

rstPracownicy.Close

dbsNorthwind.Close

End Sub

Function TypZestawuRek(intTyp As Integer) As String

Select Case intTyp

Case dbOpenTable

TypZestawuRek = "dbOpenTable"

Case dbOpenDynaset

TypZestawuRek = "dbOpenDynaset"

Case dbOpenSnapshot

TypZestawuRek = "dbOpenSnapshot"

Case dbOpenForwardOnly

TypZestawuRek = "dbOpenForwardOnly"

End Select

End Function

W poniższym przykładzie wykorzystano właściwość Type, zwracając nazwę stałej, która odpowiada wartości właściwości Type wszystkich obiektów Field w tabeli Pracownicy. Do uruchomienia tej procedury potrzebna jest funkcja TypPola.

Sub TypeX2()

Dim dbsNorthwind As Database

Dim fldPętla As Field

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Debug.Print "Pola z tabeli Pracownicy:"

Debug.Print "    Typ - Nazwa"

' Wylicz elementy kolekcji Fields tabeli

' Pracownicy.

For Each fldPętla In _

dbsNorthwind.TableDefs!Pracownicy.Fields

Debug.Print _

"        " & TypPola(fldPętla.Type) & _

" - " & fldPętla.Name

Next fldPętla

dbsNorthwind.Close

End Sub

Function TypPola(intTyp As Integer) As String

Select Case intTyp

Case dbBoolean

TypPola = "dbBoolean"

Case dbByte

TypPola = "dbByte"

Case dbInteger

TypPola = "dbInteger"

Case dbLong

TypPola = "dbLong"

Case dbCurrency

TypPola = "dbCurrency"

Case dbSingle

TypPola = "dbSingle"

Case dbDouble

TypPola = "dbDouble"

Case dbDate

TypPola = "dbDate"

Case dbText

TypPola = "dbText"

Case dbLongBinary

TypPola = "dbLongBinary"

Case dbMemo

TypPola = "dbMemo"

Case dbGUID

TypPola = "dbGUID"

End Select

End Function

W poniższym przykładzie wykorzystano właściwość Type, zwracając nazwę stałej, która odpowiada wartości właściwości Type wszystkich obiektów QueryDef w bazie danych Northwind. Do uruchomienia tej procedury potrzebna jest funkcja TypDefKwerendy.

Sub TypeX3()

Dim dbsNorthwind As Database

Dim qdfPętla As QueryDef

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Debug.Print _

"Obiekty QueryDef z bazy danych Northwind:"

Debug.Print "    Typ - Nazwa"

' Wylicz elementy kolekcji QueryDefs z bazy danych

' Northwind.

For Each qdfPętla In dbsNorthwind.QueryDefs

Debug.Print "        " & _

TypDefKwerendy(qdfPętla.Type) & " - " & _

qdfPętla.Name

Next qdfPętla

dbsNorthwind.Close

End Sub

Function TypDefKwerendy(intTyp As Integer) As String

Select Case intTyp

Case dbQSelect

TypDefKwerendy = "dbQSelect"

Case dbQAction

TypDefKwerendy = "dbQAction"

Case dbQCrosstab

TypDefKwerendy = "dbQCrosstab"

Case dbQDelete

TypDefKwerendy = "dbQDelete"

Case dbQUpdate

TypDefKwerendy = "dbQUpdate"

Case dbQAppend

TypDefKwerendy = "dbQAppend"

Case dbQMakeTable

TypDefKwerendy = "dbQMakeTable"

Case dbQDDL

TypDefKwerendy = "dbQDDL"

Case dbQSQLPassThrough

TypDefKwerendy = "dbQSQLPassThrough"

Case dbQSetOperation

TypDefKwerendy = "dbQSetOperation"

Case dbQSPTBulk

TypDefKwerendy = "dbQSPTBulk"

End Select

End Function


Właściwość Unique - przykład (DAO/Microsoft Jet)
Właściwość Unique - przykład

W poniższym przykładzie ustawiana jest właściwość Unique nowego obiektu Index na wartość True; po czym obiekt ten jest dołączany do kolekcji Indexes tabeli Pracownicy. Następnie wyliczane są elementy kolekcji Indexes obiektu TableDef i kolekcji Properties każdego obiektu Index. Nowy obiekt Index dopuszcza w obiekcie TableDef tylko jeden rekord z określoną kombinacją wartości pól Kraj, Nazwisko i Imię.

Sub UniqueX()

Dim dbsNorthwind As Database

Dim tdfPracownicy As TableDef

Dim idxNowy As Index

Dim idxPętla As Index

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfPracownicy = dbsNorthwind!Pracownicy

With tdfPracownicy

' Utwórz i dołącz nowy obiekt Index do kolekcji

' Indexes tabeli Pracownicy.

Set idxNowy = .CreateIndex("NowyIndeks")

With idxNowy

.Fields.Append .CreateField("Kraj")

.Fields.Append .CreateField("Nazwisko")

.Fields.Append .CreateField("Imię")

.Unique = True

End With

.Indexes.Append idxNowy

.Indexes.Refresh

Debug.Print .Indexes.Count & _

" Indeksy w TableDef " & .Name

' Wylicz elementy kolekcji Indexes tabeli

' Pracownicy.

For Each idxPętla In .Indexes

Debug.Print "    " & idxPętla.Name

' Wylicz elementy kolekcji Properties dla

' każdego obiektu Index.

For Each prpPętla In idxPętla.Properties

Debug.Print "        " & prpPętla.Name & _

" = " & IIf(prpPętla = "", "[pusta]", _

prpPętla)

Next prpPętla

Next idxPętla

' Usuń nowy obiekt Index, gdyż jest to tylko

' przykład.

.Indexes.Delete idxNowy.Name

End With

dbsNorthwind.Close

End Sub


Właściwość Updatable - przykład (DAO)
Właściwość Updatable - przykład

W poniższym przykładzie przedstawiono właściwość Updatable dla obiektu Database, czterech typów obiektów Recordset, obiektu TableDef i obiektu QueryDef.

Sub UpdatableX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

Debug.Print .Name

Debug.Print "    Updatable = " & .Updatable

' Wartością domyślną jest dbOpenTable.

Set rstPracownicy = .OpenRecordset("Pracownicy")

Debug.Print "Zestaw rekordów typu tabela z " & _

"tabeli Pracownicy"

Debug.Print "    Updatable = " & _

rstPracownicy.Updatable

rstPracownicy.Close

Set rstPracownicy = .OpenRecordset( _

"Pracownicy", dbOpenDynaset)

Debug.Print "Zestaw rekordów typu zestaw " & _

"dynamiczny z tabeli Pracownicy"

Debug.Print "    Updatable = " & _

rstPracownicy.Updatable

rstPracownicy.Close

Set rstPracownicy = .OpenRecordset( _

"Pracownicy", dbOpenSnapshot)

Debug.Print "Zestaw rekordów typu " & _

"utrwalonego z tabeli Pracownicy"

Debug.Print "    Updatable = " & _

rstPracownicy.Updatable

rstPracownicy.Close

Set rstPracownicy = .OpenRecordset( _

"Pracownicy", dbOpenForwardOnly)

Debug.Print "Zestaw rekordów typu " & _

"progresywnego z tabeli Pracownicy"

Debug.Print "    Updatable = " & _

rstPracownicy.Updatable

rstPracownicy.Close

Debug.Print "'" & .TableDefs(0).Name & _

"' (TableDef)"

Debug.Print "    Updatable = " & _

.TableDefs(0).Updatable

Debug.Print "'" & .QueryDefs(0).Name & _

"' (QueryDef)"

Debug.Print "    Updatable = " & _

.QueryDefs(0).Updatable

.Close

End With

End Sub


Właściwość V1xNullBehavior - przykład (DAO/Microsoft Jet)
Właściwość V1xNullBehavior - przykład

W poniższym przykładzie wykonywana jest konwersję pliku bazy danych Microsoft Jet z wersji 1.1 na wersję 3.0. Podczas konwersji zostaje utworzona właściwość V1xNullBehavior, która następnie jest dodawana do kolekcji Properties nowej bazy danych. Dla pokazania zmian powstałych wskutek konwersji wyliczono zawartość kolekcji Properties obu plików bazy danych. Na końcu procedury właściwość V1xNullBehavior jest usuwana. Zakłada się tu, że wszystkie aplikacje zostaną zmodyfikowane tak, aby w pustych polach typu Text i typu Memo zamiast ciągów pustych zapisywały wartości Null.

Uwaga   Procedura ta nie będzie działała, dopóki nie będzie dostępny plik bazy danych Microsoft Jet w wersji 1.1 o nazwie "Nwind11.mdb".

Sub V1xNullBehaviorX()

Dim dbsNorthwind As Database

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Nwind11.mdb")

With dbsNorthwind

Debug.Print .Name & ", wersja " & .Version

' Wylicz elementy kolekcji Properties

' bazy danych Northwind.

For Each prpPętla In .Properties

On Error Resume Next

If prpPętla <> "" Then Debug.Print "    " & _

prpPętla.Name & " = " & prpPętla

On Error GoTo 0

Next prpPętla

.Close

End With

DBEngine.CompactDatabase "Nwind11.mdb", _

"Nwind30.mdb", , dbVersion30

Set dbsNorthwind = OpenDatabase("Nwind30.mdb")

With dbsNorthwind

Debug.Print .Name & ", wersja " & .Version

' Wylicz elementy kolekcji Properties

' defragmentowanej bazy danych. Do właściwości

' V1xNullBehavior nie można odwoływać się

' jawnie, tzn. w postaci

' dbsNorthwind.V1xNullBehavior, ale można

' odwoływać się do niej w pętlach lub za

' pośrednictwem ciągu znaków, przykładowo

' dbsNorthwind.Properties("V1xNullBehavior").

For Each prpPętla In .Properties

On Error Resume Next

If prpPętla <> "" Then Debug.Print "    " & _

prpPętla.Name & " = " & prpPętla

On Error GoTo 0

Next prpPętla

.Properties.Delete "V1xNullBehavior"

.Close

End With

End Sub


Właściwość ValidateOnSet - przykład (DAO/Microsoft Jet)
Właściwość ValidateOnSet - przykład

W poniższym przykładzie wykorzystano właściwość ValidateOnSet do przechwytywania błędów podczas wprowadzania danych. Do uruchomienia tej procedury potrzebna jest funkcja SprawdźDane.

Sub ValidateOnSetX()

Dim dbsNorthwind As Database

Dim fldDni As Field

Dim rstPracownicy As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Utwórz i dołącz nowy obiekt Field do kolekcji

' Fields tabeli Pracownicy.

Set fldDni = _

dbsNorthwind.TableDefs!Pracownicy.CreateField( _

"DniUrlopu", dbInteger, 2)

fldDni.ValidationRule = "BETWEEN 1 AND 20"

fldDni.ValidationText = _

"Liczba musi być z zakresu od 1 do 20!"

dbsNorthwind.TableDefs!Pracownicy.Fields. _

Append fldDni

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

With rstPracownicy

Do While True

' Dodaj nowy rekord.

.AddNew

' Pobierz od użytkownika dane dla trzech pól.

' Dla każdego z tych pól sprawdź, czy dane te

' nie naruszają reguł poprawności.

If SprawdźDane(!Imię, _

"Podaj imię.") = False Then Exit Do

If SprawdźDane(!Nazwisko, _

"Podaj nazwisko.") = False Then Exit Do

If SprawdźDane(!DniUrlopu, _

"Podaj liczbę dni urlopu.") = _

False Then Exit Do

.Update

.Bookmark = .LastModified

Debug.Print !Imię & " " & !Nazwisko & _

" - " & "Liczba dni urlopu = " & _

!DniUrlopu

' Usuń nowy rekord, gdyż jest to tylko

' przykład.

.Delete

Exit Do

Loop

' Anuluj efekt metody AddNew, jeżeli

' którakolwiek  z reguł poprawności została

' naruszona.

If .EditMode <> dbEditNone Then .CancelUpdate

.Close

End With

' Usuń nowe pole, gdyż jest to tylko przykład.

dbsNorthwind.TableDefs!Pracownicy.Fields.Delete _

fldDni.Name

dbsNorthwind.Close

End Sub

Function SprawdźDane(fldPom As Field, _

strKomunikat As String) As Boolean

Dim strDane As String

Dim errPętla As Error

SprawdźDane = True

' ValidateOnSet jest właściwością przeznaczoną do

' odczytu i zapisu tylko w przypadku obiektów Field

' w obiektach Recordset.

fldPom.ValidateOnSet = True

Do While True

strDane = InputBox(strKomunikat)

If strDane = "" Then Exit Do

' Przechwytuj ewentualne błędy podczas

' ustawiania wartości obiektu Field.

On Error GoTo Błędne_dane

If fldPom.Type = dbInteger Then

fldPom = Val(strDane)

Else

fldPom = strDane

End If

On Error GoTo 0

If Not IsNull(fldPom) Then Exit Do

Loop

If strDane = "" Then SprawdźDane = False

Exit Function

Błędne_dane:

If DBEngine.Errors.Count > 0 Then

' Wylicz elementy kolekcji Errors. Właściwość

' opisująca ostatni obiekt Error będzie taka

' sama jak właściwość ValidationText

' odpowiedniego pola.

For Each errPętla In DBEngine.Errors

MsgBox "Błąd numer: " & errPętla.Number & _

vbCr & errPętla.Description

Next errPętla

End If

Resume Next

End Function


Właściwości ValidationRule i ValidationText - przykład (DAO/Microsoft Jet)
Właściwości ValidationRule i ValidationText - przykład

W poniższym przykładzie tworzony jest nowy obiekt Field w określonym obiekcie TableDef. Następnie w oparciu o przekazane dane ustawiane są właściwości ValidationRule i ValidationText. Ponadto pokazano, w jaki sposób można użyć właściwości ValidationRule i ValidationText podczas wprowadzania rzeczywistych danych. Do uruchomienia tej procedury potrzebna jest funkcja UstawSprawdzanie.

Sub ValidationRuleX()

Dim dbsNorthwind As Database

Dim fldDni As Field

Dim rstPracownicy As Recordset

Dim strKomunikat As String

Dim strDni As String

Dim errPętla As Error

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Utwórz nowe pole dla obiektu TableDef tabeli

' Pracownicy, stosując określone ustawienia

' właściwości.

Set fldDni = UstawSprawdzanie( _

dbsNorthwind.TableDefs!Pracownicy, _

"DniUrlopu", dbInteger, 2, "BETWEEN 1 AND 20", _

"Liczba musi być z zakresu od 1 do 20!")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

With rstPracownicy

' Wylicz rekordy obiektu Recordset. Dla każdego

' rekordu wypełnij nowe pole danymi

' wprowadzonymi przez użytkownika.

Do While Not .EOF

.Edit

strKomunikat = _

"Podaj liczbę dni urlopu dla: " & _

!Imię & " " & !Nazwisko & vbCr & _

"[" & !DniUrlopu.ValidationRule & "]"

Do While True

' Pobierz dane od użytkownika.

strDni = InputBox(strKomunikat)

If strDni = "" Then

.CancelUpdate

Exit Do

End If

!DniUrlopu = Val(strDni)

' Ponieważ wartością domyślną

' ValidateOnSet jest False, dane z bufora

' będą sprawdzane według ValidationRule

' podczas wykonania metody Update.

On Error GoTo Błąd_danych

.Update

On Error GoTo 0

' Jeżeli metoda Update zakończy się

' pomyślnie, drukuj zmienione dane.

If .EditMode = dbEditNone Then

Debug.Print !Imię & " " & !Nazwisko & _

" - " & "Liczba dni urlopu = " & _

!DniUrlopu

Exit Do

End If

Loop

If strDni = "" Then Exit Do

.MoveNext

Loop

.Close

End With

' Usuń nowe pole, gdyż jest to tylko przykład.

dbsNorthwind.TableDefs!Pracownicy.Fields.Delete _

fldDni.Name

dbsNorthwind.Close

Exit Sub

Błąd_danych:

If DBEngine.Errors.Count > 0 Then

' Wylicz elementy kolekcji Errors.

For Each errPętla In DBEngine.Errors

MsgBox "Błąd numer: " & _

errPętla.Number & vbCr & _

errPętla.Description

Next errPętla

End If

Resume Next

End Sub

Function UstawSprawdzanie(tdfPom As TableDef, _

strNazwaPola As String, intTyp As Integer, _

intDługość As Integer, strReguła As String, _

strTekst As String) As Field

' Utwórz i dołącz nowy obiekt Field do kolekcji

' Fields podanego obiektu TableDef.

Set UstawSprawdzanie = 	tdfPom.CreateField( _

strNazwaPola, intTyp, intDługość)

UstawSprawdzanie.ValidationRule = strReguła

UstawSprawdzanie.ValidationText = strTekst

tdfPom.Fields.Append UstawSprawdzanie

End Function


Właściwość Value - przykład (DAO)
Właściwość Value - przykład

W poniższym przykładzie przedstawiona jest właściwość Value obiektów Field i Property.

Sub ValueX()

Dim dbsNorthwind As Database

Dim rstPracownicy As Recordset

Dim fldPętla As Field

Dim prpPętla As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstPracownicy = _

dbsNorthwind.OpenRecordset("Pracownicy")

With rstPracownicy

Debug.Print "Wartości pól z tabeli Pracownicy"

' Wylicz elementy kolekcji Fields tabeli

' Pracownicy.

For Each fldPętla In .Fields

Debug.Print "    " & fldPętla.Name & " = ";

Select Case fldPętla.Type

Case dbLongBinary

Debug.Print "[LongBinary]"

Case dbMemo

Debug.Print "[Memo]"

Case Else

' Ponieważ Value jest właściwością

' domyślną obiektu Field, użycie

' słowa kluczowego Value nie jest

' tutaj konieczne.

Debug.Print fldPętla.Value

End Select

Next fldPętla

Debug.Print "Właściwości z tabeli Pracownicy"

' Wylicz elementy kolekcji Properties obiektu

' Recordset.

For Each prpPętla In .Properties

On Error Resume Next

' Ponieważ Value jest właściwością

' domyślną obiektu Property, użycie

' słowa kluczowego Value nie jest

' tutaj konieczne.

If prpPętla <> "" Then Debug.Print "    " & _

prpPętla.Name & " = " & prpPętla.Value

On Error GoTo 0

Next prpPętla

.Close

End With

dbsNorthwind.Close

End Sub


Właściwości AllPermissions, Permissions i SystemDB - przykład (DAO/Microsoft Jet)
Właściwości AllPermissions, Permissions i SystemDB - przykład

W poniższym przykładzie wykorzystano właściwości SystemDB, AllPermissions i Permissions do zaprezentowania różnych poziomów uprawnień, jakie mogą posiadać użytkownicy, w zależności od uprawnień grupy, do której należą.

Sub AllPermissionsX()

' Sprawdź, czy plik informacji o grupie roboczej

' Microsoft Jet jest dostępny.

DBEngine.SystemDB = "system.mdw"

Dim dbsNorthwind As Database

Dim ctrPętla As Container

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Wylicz elementy kolekcji Containers i wyświetl

' nazwę bieżącego użytkownika i jego uprawnienia.

For Each ctrPętla In dbsNorthwind.Containers

With ctrPętla

Debug.Print "Kontener: " & .Name

Debug.Print "Użytkownik: " & .UserName

Debug.Print "    Uprawnienia: " & _

.Permissions

Debug.Print "    AllPermissions: " & _

.AllPermissions

End With

Next ctrPętla

dbsNorthwind.Close

End Sub


Właściwość Attributes - przykład (DAO)
Właściwość Attributes - przykład

W poniższym przykładzie wyświetlana jest właściwość Attributes obiektów Field, Relation i TableDef z bazy danych Northwind.

Sub AttributesX()

Dim dbsNorthwind As Database

Dim fldPętla As Field

Dim relPętla As Relation

Dim tdfPętla As TableDef

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Wyświetl atrybuty pól obiektu TableDef.

Debug.Print "Atrybuty pól tabeli " & _

.TableDefs(0).Name

For Each fldPętla In .TableDefs(0).Fields

Debug.Print "    " & fldPętla.Name & _

" = " & fldPętla.Attributes

Next fldPętla

' Wyświetl atrybuty związków w bazie danych

' Northwind.

Debug.Print "Atrybuty związków w bazie " & _

"danych " & .Name & ":"

For Each relPętla In .Relations

Debug.Print "    " & relPętla.Name & _

" = " & relPętla.Attributes

Next relPętla

' Wyświetl atrybuty tabel bazy danych Northwind.

Debug.Print "Atrybuty tabel bazy danych " & _

.Name & ":"

For Each tdfPętla In .TableDefs

Debug.Print "    " & tdfPętla.Name & _

" = " & tdfPętla.Attributes

Next tdfPętla

.Close

End With

End Sub


Właściwości BatchCollisionCount i metoda Update - przykład (DAO/ODBCDirect)
Właściwość BatchCollisionCount i metoda Update - przykład

W poniższym przykładzie właściwość BatchCollisionCount i metoda Update zastosowane są do ilustracji aktualizacji grupowej, przy czym kolizje są rozwiązywane przez wymuszenie aktualizacji grupowej.

Sub BatchX()

Dim wrkGłówny As Workspace

Dim conGłówne As Connection

Dim rstTymcz As Recordset

Dim intPętla As Integer

Dim strKomunikat As String

Set wrkGłówny = CreateWorkspace("ObszarODBC", _

"admin", "", dbUseODBC)

' Poniższe ustawienie DefaultCursorDriver jest

' wymagane podczas aktualizacji grupowej.

wrkGłówny.DefaultCursorDriver = _

dbUseClientBatchCursor

Set conGłówne = wrkGłówny.OpenConnection( _

"Wydawcy", dbDriverNoPrompt, False, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Poniższy argument blokowania jest wymagany

' podczas aktualizacji grupowej.

Set rstTymcz = conGłówne.OpenRecordset( _

"SELECT * FROM należn_plan", dbOpenDynaset, 0, _

dbOptimisticBatch)

With rstTymcz

' Modyfikuj dane z lokalnego zestawu rekordów.

Do While Not .EOF

.Edit

If !należność <= 20 Then

!należność = !należność - 4

Else

!należność = !należność + 2

End If

.Update

.MoveNext

Loop

' Spróbuj wykonać aktualizację grupową.

.Update dbUpdateBatch

' Jeżeli występują kolizje, pozwól zdecydować

' użytkownikowi, czy wymuszać zmiany,

' czy też rozwiązywać kolizje indywidualnie.

If .BatchCollisionCount > 0 Then

strKomunikat = "Występują kolizje. " & _

vbCr & _

"Czy chcesz aby program wymusił " & _

vbCr & _

"aktualizację używając danych lokalnych?"

If MsgBox(strKomunikat, vbYesNo) = vbNo Then

.Update dbUpdateBatch, True

End If

End If

.Close

End With

conGłówne.Close

wrkGłówny.Close

End Sub


Właściwości BatchSize i UpdateOptions - przykład (DAO/ODBCDirect)
Właściwości BatchSize i UpdateOptions - przykład

W poniższym przykładzie właściwości BatchSize i UpdateOptions są użyte do kontroli różnych aspektów aktualizacji grupowej dla podanego obiektu Recordset.

Sub BatchSizeX()

Dim wrkGłówny As Workspace

Dim conGłówne As Connection

Dim rstTymcz As Recordset

Set wrkGłówny = CreateWorkspace("ObszarODBC", _

"admin", "", dbUseODBC)

' To ustawienie DefaultCursorDriver jest wymagane

' podczas aktualizacji grupowej.

wrkGłówny.DefaultCursorDriver = _

 dbUseClientBatchCursor

Set conGłówne = wrkGłówny.OpenConnection( _

"Wydawcy",dbDriverNoPrompt, False, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Poniższe ustawienie argumentu blokowania jest

' wymagane podczas aktualizacji grupowej.

Set rstTymcz = conGłówne.OpenRecordset( _

"SELECT * FROM należn_plan", dbOpenDynaset, 0, _

dbOptimisticBatch)

With rstTymcz

' Zwiększ liczbę instrukcji wysyłanych

' jednorazowo do serwera, redukując w ten sposób

' liczbę dostępów do serwera konieczną do

' wykonania aktualizacji.

.BatchSize = 25

' Zmień właściwość UpdateOptions tak, aby

' klauzule WHERE instrukcji przesyłanych do

' serwera zawierały oprócz kolumn kluczowych

' również kolumny uaktualnione. Ponadto,

' wszystkie modyfikacje rekordów będą wykonywane

' przez usunięcie oryginalnego rekordu i dodanie

' zmodyfikowanego, a nie przez modyfikację

' oryginału.

.UpdateOptions = dbCriteriaModValues + _

dbCriteriaDeleteInsert

' Wykonaj aktualizację, korzystając z powyższych

' nowych ustawień

' ...

.Close

End With

conGłówne.Close

wrkGłówny.Close

End Sub


Właściwość CollatingOrder - przykład (DAO/Microsoft Jet)
Właściwość CollatingOrder - przykład

W poniższym przykładzie wyświetlana jest właściwość CollatingOrder bazy danych Northwind oraz poszczególnych pól tabeli.

Sub CollatingOrderX()

Dim dbsNorthwind As Database

Dim fldPętla As Field

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Pokaż sposób uporządkowania rekordów w bazie

' danych Northwind.

Debug.Print "Sposób uporządkowania " & _

"rekordów w bazie danych " & .Name & _

" = " & .CollatingOrder

' Pokaż sposób uporządkowania pól obiektu

' TableDef.

Debug.Print "Sposób uporządkowania pól " & _

"w tabeli " & .TableDefs(0).Name & ":"

For Each fldPętla In .TableDefs(0).Fields

Debug.Print "    " & fldPętla.Name & _

" = " & fldPętla.CollatingOrder

Next fldPętla

.Close

End With

End Sub


Właściwość ConflictTable - przykład (DAO/Microsoft Jet)
Właściwość ConflictTable - przykład

W poniższym przykładzie wykorzystano właściwość ConflictTable do wyświetlenia nazw tabel, w których wystąpił konflikt podczas synchronizacji.

Sub ConflictTableX()

Dim dbsNorthwind As Database

Dim tdfTest As TableDef

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Wylicz elementy kolekcji TableDefs i dla każdego

' z nich sprawdź właściwość ConflictTable.

For Each tdfTest In dbsNorthwind.TableDefs

If tdfTest.ConflictTable <> "" Then _

Debug.Print "W tabeli " & tdfTest.Name & _

" wystąpił konflikt."

Next tdfTest

dbsNorthwind.Close

End Sub

W poniższym przykładzie obiekty Recordset otwierane są z tabeli konfliktów oraz z jednej z tabel, która ten konflikt spowodowała. Następnie przeglądane są obie tabele i przy wykorzystaniu zawartości pola RequiredDate wybierana jest ta, w której przeglądany rekord został uaktualniony później. Rekord ten jest kopiowany do drugiej tabeli.

Sub ConflictTableX2(dbsNaprawiona As Database)

Dim tdfTest As TableDef

Dim rstŹródłowy As Recordset

Dim rstKonfliktowy As Recordset

Dim fldPętla As Field

Set tdfTest = dbsNaprawiona.TableDefs("Zamówienia")

If tdfTest.ConflictTable <> "" Then

Set rstŹródłowy = _

dbsNaprawiona.OpenRecordset( _

tdfTest.Name, dbOpenTable)

Set rstKonfliktowy = _

dbsNaprawiona.OpenRecordset( _

tdfTest.ConflictTable, dbOpenTable)

rstŹródłowy.Index = "[d_Guid]"

rstKonfliktowy.MoveFirst

Do Until rstKonfliktowy.EOF

rstŹródłowy.Seek "=", rstKonfliktowy![s_Guid]

If Not rstŹródłowy.NoMatch Then

If rstŹródłowy!RequiredDate < _

rstKonfliktowy!RequiredDate Then

On Error Resume Next

For Each fldPętla _

in rstKonfliktowy.Fields

fldPętla = _

 rstŹródłowy(fldPętla.Name)

Next fldPętla

On Error Goto 0

End If

End If

rstKonfliktowy.Delete

rstKonfliktowy.MoveNext

Loop

rstKonfliktowy.Close

rstŹródłowy.Close

End If

End Sub


Właściwości Connect i SourceTableName - przykład (DAO)
Właściwości Connect i SourceTableName - przykład

W poniższym przykładzie właściwości Connect i SourceTableName są wykorzstane do połączenia różnych tabel zewnętrznych z bazą danych Microsoft Jet. Przykładowa procedura korzysta z procedury DołączZewn zdefiniowanej poniżej.

Sub ConnectX()

Dim dbsTymcz As Database

Dim strMenu As String

Dim strWybór As String

' Otwórz bazę danych Microsoft Jet, do której

' będzie dołączana tabela.

Set dbsTymcz = OpenDatabase("DB1.mdb")

' Utwórz tekst menu.

strMenu = "Wpisz numer wybranego źródła danych:" _

& vbCr

strMenu = strMenu & _

"   1. baza danych Microsoft Jet" & vbCr

strMenu = strMenu & _

"   2. tabela Microsoft FoxPro 3.0" & vbCr

strMenu = strMenu & _

"   3. tabela dBASE" & vbCr

strMenu = strMenu & _

"   4. tabela Paradox" & vbCr

strMenu = strMenu & _

"   W. (pokaż możliwości 5-9)"

' Pobierz odpowiedź użytkownika.

strWybór = InputBox(strMenu)

If UCase(strWybór) = "W" Then

' Utwórz tekst menu.

strMenu = "Wpisz numer wybranego źródła " & _

"danych:" & vbCr

strMenu = strMenu & _

"   5. arkusz Microsoft Excel" & vbCr

strMenu = strMenu & _

"   6. arkusz Lotus" & vbCr

strMenu = strMenu & _

"   7. tekst rozdzielony przecinkami (CSV)" _

& vbCr

strMenu = strMenu & _

"   8. tabela HTML" & vbCr

strMenu = strMenu & _

"   9. folder Microsoft Exchange"

' Pobierz odpowiedź użytkownika.

strWybór = InputBox(strMenu)

End If

' Wywołaj procedurę DołączZewn. Trzeci argument

' będzie użyty jako ciąg Connect, a czwarty

' jako SourceTableName.

Select Case Val(strWybór)

Case 1

DołączZewn dbsTymcz, _

"TabelaJet", _

";DATABASE=C:\Moje dokumenty\" & _

"Northwind.mdb", _

"Pracownicy"

Case 2

DołączZewn dbsTymcz, _

"TabelaFoxPro", _

"FoxPro 3.0;DATABASE=C:\FoxPro30\" & _

"Samples", _

"Q1Sales"

Case 3

DołączZewn dbsTymcz, _

"TabelaDBASE", _

"dBase IV;DATABASE=C:\dBASE\Samples", _

"Accounts"

Case 4

DołączZewn dbsTymcz, _

"TabelaParadox", _

"Paradox 3.X;DATABASE=C:\Paradox\" & _

"Samples", _

"Accounts"

Case 5

DołączZewn dbsTymcz, _

"TabelaExcel", _

"Excel 5.0;" & _

"DATABASE=C:\Excel\Samples\" & _

"Q1Sales.xls", _

"January Sales"

Case 6

DołączZewn dbsTymcz, _

"TabelaLotus", _

"Lotus WK3;" & _

"DATABASE=C:\Lotus\Samples\" & _

"Sales.xls", _

"THIRDQTR"

Case 7

DołączZewn dbsTymcz, _

"TabelaCSV", _

"Text;DATABASE=C:\Samples", _

"Sample.txt"

Case 8

DołączZewn dbsTymcz, _

"TabelaHTML", _

"HTML Import;DATABASE=http://" & _

"www.server1.com/samples/page1.html", _

"Q1SalesData"

Case 9

DołączZewn dbsTymcz, _

"TabelaExchange", _

"Exchange 4.0;MAPILEVEL=" & _

"Mailbox - Michelle Wortman (Exchange)" & _

"|People\Important;", _

"Jerry Wheeler"

End Select

dbsTymcz.Close

End Sub

Sub DołączZewn(dbsTymcz As Database, _

strTabela As String, strPołącz As String, _

strTablŹródł As String)

Dim tdfPołącz As TableDef

Dim rstPołącz As Recordset

Dim intTymcz As Integer

' Utwórz nowy obiekt TableDef, ustaw jego

' właściwości Connect i SourceTableName

' w zależności od przekazanych argumentów i dołącz

' go do kolekcji TableDefs.

Set tdfPołącz = dbsTymcz.CreateTableDef(strTabela)

tdfPołącz.Connect = strPołącz

tdfPołącz.SourceTableName = strTablŹródł

dbsTymcz.TableDefs.Append tdfPołącz

Set rstPołącz = dbsTymcz.OpenRecordset(strTabela)

Debug.Print "Dane z połączonej tabeli:"

' Wyświetl trzy pierwsze rekordy dołączanej

' tablicy.

intTymcz = 1

With rstPołącz

Do While Not .EOF And intTymcz <= 3

Debug.Print , .Fields(0), .Fields(1)

intTymcz = intTymcz + 1

.MoveNext

Loop

If Not .EOF Then Debug.Print , _

"[więcej rekordów]"

.Close

End With

' Usuń połączoną tabelę ponieważ jest to tylko

' przykład.

dbsTymcz.TableDefs.Delete strTabela

End Sub


Właściwość Container - przykład (DAO/Microsoft Jet)
Właściwość Container - przykład

W poniższym przykładzie wyświetlana jest właściwość Container dla różnych obiektów Document.

Sub ContainerPropertyX()

Dim dbsNorthwind As Database

Dim ctrPętla As Container

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Wyświetl nazwę kontenera dla pierwszego obiektu

' Document w kolekcji Documents każdego obiektu

' Container.

For Each ctrPętla In dbsNorthwind.Containers

Debug.Print "Dokument: " & _

 ctrPętla.Documents(0).Name

Debug.Print "    Kontener = " & _

ctrPętla.Documents(0).Container

Next ctrPętla

dbsNorthwind.Close

End Sub


Właściwość Database - przykład (DAO/ODBCDirect)
Właściwość Database - przykład

W poniższym przykładzie właściwość Database wykorzystano do celu zaprezentowania sposobu przekształcenia kodu programu stosowanego do uzyskania dostępu do danych ODBC poprzez aparat bazy danych Microsoft Jet, na kod korzystający z obiektów Connection w obszarze roboczym ODBCDirect.

Procedura StaryKod wykorzystuje źródło danych ODBC dołączone do aparatu Microsoft Jet do dostępu do bazy danych ODBC.

Sub StaryKod()

Dim wrkGłówny As Workspace

Dim dbsWyd As Database

Dim prpPętla As Property

' Utwórz obiekt Workspace aparatu Microsoft Jet.

Set wrkGłówny = _

CreateWorkspace("", "admin", "", dbUseJet)

' Otwórz obiekt Database, korzystając z informacji

' z ciągu połączenia.

Set dbsWyd = _

wrkGłówny.OpenDatabase("Wydawcy", _

dbDriverNoPrompt, False, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Wylicz elementy kolekcji Properties obiektu

' Database.

With dbsWyd

Debug.Print "Właściwości bazy danych " & _

.Name & ":"

On Error Resume Next

For Each prpPętla In .Properties

If prpPętla.Name = "Connection" Then

' Właściwość zwraca w rzeczywistości

' obiekt Connection.

Debug.Print "    Connection[.Name] = " & _

.Connection.Name

Else

Debug.Print "    " & prpPętla.Name & _

" = " & prpPętla

End If

Next prpPętla

On Error GoTo 0

End With

dbsWyd.Close

wrkGłówny.Close

End Sub

Przykładowa procedura NowyKod otwiera obiekt Connection w obszarze roboczym ODBCDirect, a następnie przypisuje właściwość Database obiektu Connection do zmiennej obiektowej nazwanej tak, jak źródło danych w starej procedurze. Żaden element poniższego kodu programu nie musi być zmieniany, dopóki nie będzie konieczności skorzystania ze specjalnych właściwości obszarów roboczych Microsoft Jet.

Sub NowyKod()

Dim wrkGłówny As Workspace

Dim conWyd As Connection

Dim dbsWyd As Database

Dim prpPętla As Property

' Utwórz obiekt Workspace ODBCDirect, zamiast

' obiektu Workspace Microsoft Jet.

Set wrkGłówny = _

CreateWorkspace("", "admin", "", dbUseODBC)

' Otwórz obiekt Connection, korzystając z

' informacji z ciągu połączenia.

Set conWyd = wrkGłówny.OpenConnection _

("Wydawcy", dbDriverNoPrompt, False, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Przypisz właściwość Database do zmiennej

' obiektowej o takiej nazwie, jak w starym kodzie.

Set dbsWyd = conWyd.Database

' Wylicz elementy kolekcji Properties obiektu

' Database. Od tego miejsca kod procedury NowyKod

' jest identyczny z kodem procedury StaryKod.

With dbsWyd

Debug.Print "Właściwości bazy danych " & _

.Name & ":"

On Error Resume Next

For Each prpPętla In .Properties

If prpPętla.Name = "Connection" Then

' Właściwość zwraca w rzeczywistości

' obiekt Connection.

Debug.Print "    Connection[.Name] = " & _

.Connection.Name

Else

Debug.Print "    " & prpPętla.Name & _

" = " & prpPętla

End If

Next prpPętla

On Error GoTo 0

End With

dbsWyd.Close

wrkGłówny.Close

End Sub


Właściwość DefaultType - przykład (DAO)
Właściwość DefaultType - przykład

W poniższym przykładzie wykorzystano właściwość DefaultType w celu ustalenia, jaki typ obiektu Workspace zostanie utworzony po wywołaniu metody CreateWorkspace. Do uruchomienia tej procedury niezbędna jest funkcja PokażTyp.

Sub DefaultTypeX()

Dim wrkODBC As Workspace

Dim wrkJet As Workspace

Dim prpPętla As Property

' Ustaw właściwość DefaultType i utwórz obiekt

' Workspace, nie określając jego typu.

DBEngine.DefaultType = dbUseODBC

Set wrkODBC = CreateWorkspace("ObszarODBC", _

"admin", "")

Debug.Print "DBEngine.DefaultType = " & _

PokażTyp(DBEngine.DefaultType)

With wrkODBC

' Wylicz elementy kolekcji Properties obiektu

' Workspace.

Debug.Print "Właściwości obszaru roboczego " & _

.Name

On Error Resume Next

For Each prpPętla In .Properties

Debug.Print "    " & prpPętla.Name & _

" = " & prpPętla

If prpPętla.Name = "Type" Then Debug.Print _

"        (" & _

PokażTyp(prpPętla.Value) & ")"

Next prpPętla

On Error GoTo 0

End With

' Ustaw właściwość DefaultType i utwórz obiekt

' Workspace nie określając jego typu.

DBEngine.DefaultType = dbUseJet

Set wrkJet = _

CreateWorkspace("ObszarJet", "admin", "")

Debug.Print "DBEngine.DefaultType = " & _

PokażTyp(DBEngine.DefaultType)

With wrkJet

' Wylicz elementy kolekcji Properties obiektu

' Workspace.

Debug.Print "Właściwości obszaru roboczego " & _

.Name

On Error Resume Next

For Each prpPętla In .Properties

Debug.Print "    " & prpPętla.Name & _

" = " & prpPętla

If prpPętla.Name = "Type" Then Debug.Print _

"        (" & _

PokażTyp(prpPętla.Value) & ")"

Next prpPętla

On Error GoTo 0

End With

wrkODBC.Close

wrkJet.Close

End Sub

Function PokażTyp(intTymcz As Integer) As String

If intTymcz = dbUseJet Then

PokażTyp = "dbUseJet"

Else

PokażTyp = "dbUseODBC"

End If

End Function


Właściwości DefaultUser, DefaultPassword - przykład (DAO)
Właściwości DefaultUser, DefaultPassword - przykład

W poniższym przykładzie ustawiane są właściwości DefaultUser oraz DefaultPassword, które ustalają ustawienia domyślnego obiektu Workspace.

Sub DefaultUserX()

' Ustaw właściwości DefaultUser i

' DefaultPassword obiektu DBEngine.

DBEngine.DefaultUser = "NowyUżytkownik"

DBEngine.DefaultPassword = ""

Debug.Print "Przypisanie ciągu " & _

"'NowyUżytkownik' do właściwości " & _

"DBEngine.DefaultUser..."

Debug.Print "Przypisanie ciągu o " & _

"długości zerowej do właściwości " & _

"DBEngine.DefaultPassword..."

Dim wrkJet As Workspace

Dim wrkPętla As Workspace

Dim prpPętla As Property

Set wrkJet = _

CreateWorkspace("ObszarJet", "admin", _

"", dbUseJet)

' Wylicz elementy kolekcji Workspaces

On Error Resume Next

For Each wrkPętla In Workspaces

Debug.Print "Obszar roboczy: " & wrkPętla.Name

' Wylicz elementy kolekcji Properties

' dla każdego obiektu Workspace.

For Each prpPętla In wrkPętla.Properties

Debug.Print "    " & prpPętla.Name & _

" = " & prpPętla

Next prpPętla

Next wrkPętla

On Error GoTo 0

wrkJet.Close

End Sub


Właściwość DesignMasterID - przykład (DAO/Microsoft Jet)
Właściwość DesignMasterID - przykład

W poniższym przykładzie właściwość DesignMasterID jest ustawiana na wartość właściwości ReplicaID innej bazy danych, która w wyniku tej operacji staje się wzorcem w zestawie replik. Stara baza, która do tej pory pełniła rolę wzorca, synchronizowana jest z nową w celu uaktualnienia zmian w projekcie bazy. Aby uruchomić ten kod programu, konieczne jest utworzenie wzorca i repliki oraz wstawienie odpowiednich nazw i ścieżek dostępu. Poniższego kodu nie można uruchomić ze starego lub nowego wzorca; należy uruchomić go z innej bazy danych.

Sub SetNewDesignMaster(strStaryProj as String, _

strNowyProj as String)

Dim dbsStara As Database

Dim dbsNowa As Database

' Otwórz bieżący wzorzec w trybie wyłącznego

' dostępu.

Set dbsStara = OpenDatabase(strStaryProj, True)

' Otwórz bazę danych, która stanie się nowym

' wzorcem.

Set dbsNowa = OpenDatabase(strNowyProj)

' Przypisz status wzorca nowej bazie danych.

dbsStara.DesignMasterID = dbsNowa.ReplicaID

' Zsynchronizuj stary wzorzec z nowym i

' zezwól na dwukierunkową wymianę informacji.

dbsStara.Synchronize strNowyProj, _

dbRepImpExpChanges

dbsStara.Close

dbsNowa.Close

End Sub


Właściwość Direction - przykład (DAO/ODBCDirect)
Właściwość Direction - przykład

W poniższym przykładzie właściwość Direction jest wykorzystana do skonfigurowania konfiguracji parametrów kwerendy kierowanej do źródła danych ODBC.

Sub DirectionX()

Dim wrkGłówny As Workspace

Dim conGłówne As Connection

Dim qdfTymcz As QueryDef

Dim rstTymcz As Recordset

Dim strSQL As String

Dim intPętla As Integer

' Utwórz obszar roboczy ODBC i otwórz połączenie z

' bazą danych Microsoft SQL Server.

Set wrkGłówny = CreateWorkspace("ObszarODBC", _

"admin", "", dbUseODBC)

Set conGłówne = wrkGłówny.OpenConnection( _

"Wydawcy", dbDriverNoPrompt, False, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Ustaw ciąg z instrukcją SQL wywołującą

' przechowywaną procedurę składową getempsperjob.

strSQL = "{ call getempsperjob (?, ?) }"

Set qdfTymcz = conGłówne.CreateQueryDef("", strSQL)

With qdfTymcz

' Wskaż, że dwa parametry kwerendy jedynie

' przekazują informacje do przechowywanej

' procedury.

.Parameters(0).Direction = dbParamInput

.Parameters(1).Direction = dbParamInput

' Przypisz parametrom wartości początkowe.

.Parameters(0) = "0877"

.Parameters(1) = 0

Set rstTymcz = .OpenRecordset()

With rstTymcz

' W pętli przejdź przez wszystkie

' dopuszczalne wartości drugiego parametru.

' Dla każdej wartości ponów kwerendę dla

' zestawu rekordów aby otrzymać właściwe

' wyniki, i następnie wyświetl zawartość

' zestawu rekordów.

For intPętla = 1 To 14

qdfTymcz.Parameters(1) = intPętla

.Requery

Debug.Print "Wydawca = " & _

qdfTymcz.Parameters(0) & _

", praca = " & intPętla

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

Next intPętla

.Close

End With

End With

conGłówne.Close

wrkGłówny.Close

End Sub


Obiekt Error, kolekcja Errors oraz właściwości Description, Number, Source, HelpFile i HelpContext - przykład (DAO)
Obiekt Error, kolekcja Errors oraz właściwości Description, Number, Source, HelpFile i HelpContext - przykład

Poniższy przykład wymusza wystąpienia błędu, przechwytuje go, a następnie wyświetla właściwości Description, Number, Source, HelpContext i HelpFile przechwyconego obiektu Error.

Sub DescriptionX()

Dim dbsTest As Database

On Error GoTo ErrorHandler

' Celowo wywołaj błąd.

Set dbsTest = OpenDatabase("BrakBazy")

Exit Sub

ErrorHandler:

Dim strBłąd As String

Dim errPętla As Error

' Wylicz elementy kolekcji Errors i wyświetl

' właściwości każdego obiektu Error.

For Each errPętla In Errors

With errPętla

strBłąd = _

"Nr błędu: " & .Number & vbCr

strBłąd = strBłąd & _

"    " & .Description & vbCr

strBłąd = strBłąd & _

"    (Źródło: " & .Source & ")" & vbCr

strBłąd = strBłąd & _

"Naciśnij F1, aby obejrzeć " & _

"temat Pomocy " & .HelpContext & vbCr

strBłąd = strBłąd & _

"    zamieszczony w pliku " & _

.HelpFile & "."

End With

MsgBox strBłąd

Next

Resume Next

End Sub


Właściwość Inherit - przykład (DAO/Microsoft Jet)
Właściwość Inherit - przykład

W poniższym przykładzie właściwość Inherit kontenera Tables ustawiana jest na wartość True, tak aby każdy później utworzony w kontenerze Tables obiekt Document posiadał takie ustawienia dotyczące bezpieczeństwa, jak kontener Tables.

Sub InheritX()

Dim dbsNorthwind As Database

Dim conTabele As Container

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set conTabele = dbsNorthwind.Containers("Tabele")

' Nadanie właściwości Inherit kontenera Tables

' wartości True oraz ustawienie uprawnień tego

' kontenera spowoduje, że każdy nowo utworzony w

' nim obiekt Document odziedziczy jego uprawnienia.

conTabele.Inherit = True

conTabele.Permissions = dbSecWriteSec

dbsNorthwind.Close

End Sub


Właściwość Inherited - przykład (DAO)
Właściwość Inherited - przykład

W poniższym przykładzie wykorzystano właściwość Inherited do ustalenia, czy zdefiniowany przez użytkownika obiekt Property został utworzony dla obiektu Recordset, czy dla innego obiektu.

Sub InheritedX()

Dim dbsNorthwind As Database

Dim tdfTest As TableDef

Dim rstTest As Recordset

Dim prpNowa As Property

Dim prpPętla As Property

' Utwórz nową właściwość dla zapisanego obiektu

' TableDef, a następnie otwórz zestaw rekordów z

' tego boiektu TableDef.

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfTest = dbsNorthwind.TableDefs(0)

Set prpNowa = _

tdfTest.CreateProperty("NowaWłaściwość", _

dbBoolean, True)

tdfTest.Properties.Append prpNowa

Set rstTest = _

tdfTest.OpenRecordset(dbOpenForwardOnly)

' Wyświetl właściwości Name i Inherited nowego

' obiektu Property w obiekcie TableDef.

Debug.Print "Właściwość " & _

"NowaWłaściwość obiektu TableDef " & _

tdfTest.Name & ":"

Debug.Print "    Inherited = " & _

tdfTest.Properties("NowaWłaściwość").Inherited

' Wyświetl właściwości Name i Inherited nowego

' obiektu Property w obiekcie Recordset.

Debug.Print "Właściwość " & _

"NowaWłaściwość obiektu Recordset " & _

rstTest.Name & ":"

Debug.Print "    Inherited = " & _

rstTest.Properties("NowaWłaściwość").Inherited

' Usuń nowy obiekt TableDef, gdyż jest to tylko

' przykład.

tdfTest.Properties.Delete prpNowa.Name

dbsNorthwind.Close

End Sub


Właściwość IniPath - przykład (DAO/Microsoft Jet)
Właściwość IniPath - przykład

W poniższym przykładzie klucz aplikacji w Rejestrze Windows zapisywany jest do ścieżki we właściwości IniPath.

Sub IniPathX()

' Zmień właściwość IniPath tak, aby wskazywała na

' inną sekcję Rejestru Windows zawierającą

' informacje o ustawieniach.

Debug.Print "Oryginalne ustawienia " & _

"właściwości IniPath = " & _

IIf(DBEngine.IniPath = "", "[Pusta]", _

DBEngine.IniPath)

DBEngine.IniPath = _

"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\" & _

"Jet\3.5\ISAM Formats\FoxPro 3.0"

Debug.Print "Nowe ustawienia właściwości " & _

"IniPath = " & _

IIf(DBEngine.IniPath = "", "[Pusta]", _

DBEngine.IniPath)

End Sub


Właściwość IsolateODBCTrans - przykład (DAO/Microsoft Jet)
Właściwość IsolateODBCTrans - przykład

W poniższym przykładzie otwierane są trzy obszary robocze ODBCDirect i właściwość IsolateODBCTrans każdego z nich ustawiana jest na wartość True, aby w ten sposób odisolować od siebie transakcje działające na tym samym źródle danych.

Sub IsolateODBCTransX()

DBEngine.DefaultType = dbUseJet

Dim wrkJet1 As Workspace

Dim wrkJet2 As Workspace

Dim wrkJet3 As Workspace

' Otwórz trzy obszary robocze ODBCDirect, aby

' odizolować transakcje działające na tym samym

' źródle danych ODBC.

Set wrkJet1 = CreateWorkspace("", "admin", "")

wrkJet1.IsolateODBCTrans = True

Set wrkJet2 = CreateWorkspace("", "admin", "")

wrkJet2.IsolateODBCTrans = True

Set wrkJet3 = CreateWorkspace("", "admin", "")

wrkJet3.IsolateODBCTrans = True

wrkJet1.Close

wrkJet2.Close

wrkJet3.Close

End Sub


Właściwość KeepLocal - przykład (DAO/Microsoft Jet)
Właściwość KeepLocal - przykład

W poniższym przykładzie właściwość KeepLocal dołączana jest do kolekcji właściwości obiektu Document modułu Utilities w bazie danych Northwind. Należy ustawić tę właściwość w obiekcie (takim jak tabela), zanim baza danych zostanie przekształcona na postać replikowalną. Po dokonaniu konwersji bazy danych na wzorzec obiekt określony jako lokalny nie zostanie rozproszony do innych elementów zestawu replik. Ścieżkę do pliku Northwind.mdb należy dostosować stosownie do jego lokalizacji w danym komputerze.

Sub KeepLocalNWObjectX()

Dim dbsNorthwind As Database

Dim docTymcz As Document

Dim prpTymcz As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set docTymcz = dbsNorthwind.Containers("Moduły"). _

Documents("Funkcje usługowe")

Set prpTymcz = docTymcz.CreateProperty( _

"KeepLocal", dbText, "T")

docTymcz.Properties.Append prpTymcz

dbsNorthwind.Close

End Sub

W poniższym kodzie programu właściwość KeepLocal określonego obiektu TableDef ustawiana jest na wartość "T". Jeśli właściwość KeepLocal nie istnieje, jest tworzona i dołączana do kolekcji Properties tabeli, a jej wartość ustawiana jest na "T".

Sub SetKeepLocal(tdfTymcz As TableDef)

On Error GoTo ErrHandler

tdfTymcz.Properties("KeepLocal") = "T"

On Error GoTo 0

Exit Sub

ErrHandler:

Dim prpNowa As Property

If Err.Number = 3270 Then

Set prpNowa = _

tdfTymcz.CreateProperty("KeepLocal", _

dbText, "T")

tdfTymcz.Properties.Append prpNowa

Else

MsgBox "Błąd " & Err & ": " & Error

End If

End Sub


Właściwość LoginTimeout - przykład (DAO)
Właściwość LoginTimeout - przykład

W poniższym przykładzie właściwość LoginTimeout obiektu DBEngine ustawiana jest na 120 sekund. Następnie otwierane są trzy obszary robocze ODBCDirect, a ich właściwości LoginTimeout są modyfikowane. Przy modyfikacji wykorzystana jest wartość domyślna odziedziczona z obiektu DBEngine.

Sub LoginTimeoutX()

' Zmień domyślną wartość właściwości LoginTimeout.

DBEngine.LoginTimeout = 120

Dim wrkODBC1 As Workspace

Dim wrkODBC2 As Workspace

Dim wrkODBC3 As Workspace

Set wrkODBC1 = CreateWorkspace("", "admin", "", _

dbUseODBC)

Set wrkODBC2 = CreateWorkspace("", "admin", "", _

dbUseODBC)

Set wrkODBC3 = CreateWorkspace("", "admin", "", _

dbUseODBC)

' Zmień właściwości LoginTimeout poszczególnych

' obszarów roboczych ODBCDirect na 60 sekund, na

' wartość domyślną (120 sekund) oraz na wartość 0.

wrkODBC1.LoginTimeout = 60

wrkODBC2.LoginTimeout = -1

wrkODBC2.LoginTimeout = 0

wrkODBC1.Close

wrkODBC2.Close

wrkODBC3.Close

End Sub


Właściwości LogMessages oraz ReturnsRecords - przykład (DAO/Microsoft Jet)
Właściwości LogMessages oraz ReturnsRecords - przykład

W poniższym przykładzie wykorzystano właściwości LogMessages i ReturnsRecords do utworzenia kwerendy przekazującej, która zwróci dane i komunikaty wygenerowane przez serwer zdalny.

Sub LogMessagesX()

Dim wrkJet As Workspace

Dim dbsBieżąca As Database

Dim qdfTymcz As QueryDef

Dim prpNowa As Property

Dim rstTymcz As Recordset

' Utwórz obiekt Workspace aparatu Microsoft Jet.

Set wrkJet = _

CreateWorkspace("", "admin", "", dbUseJet)

Set dbsBieżąca =  wrkJet.OpenDatabase("DB1.mdb")

' Utwórz kwerendę, która będzie zapamiętywała

' wszystkie komunikaty serwera w tabelach

' tymczasowych.

Set qdfTymcz = _

dbsBieżąca.CreateQueryDef("NowaKwerenda")

qdfTymcz.Connect = _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy"

qdfTymcz.SQL = "SELECT * FROM sklepy"

qdfTymcz.ReturnsRecords = True

Set prpNowa = qdfTymcz.CreateProperty( _

"LogMessages", dbBoolean, True)

qdfTymcz.Properties.Append prpNowa

' Wykonaj kwerendę i wyświetl wyniki.

Set rstTymcz = qdfTymcz.OpenRecordset()

Debug.Print "Zawartość zestawu rekordów:"

With rstTymcz

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

.Close

End With

' Usuń nowy obiekt QueryDef, gdyż jest to tylko

' przykład.

dbsBieżąca.QueryDefs.Delete qdfTymcz.Name

dbsBieżąca.Close

wrkJet.Close

End Sub


Właściwość MaxRecords - przykład (DAO)
Właściwość MaxRecords - przykład

W poniższym przykładzie wykorzystano właściwość MaxRecords do ustalenia największej liczby rekordów, jakie może zwrócić kwerenda skierowana do źródła danych ODBC.

Sub MaxRecordsX()

Dim dbsBieżąca As Database

Dim qdfPrzekazująca As QueryDef

Dim qdfLokalna As QueryDef

Dim rstTymcz As Recordset

' Otwórz bazę danych, która umożliwia utworzenie

' obiektów QueryDef.

Set dbsBieżąca = OpenDatabase("DB1.mdb")

' Utwórz kwerendę przekazującą, aby pobrać dane z

' bazy danych Microsoft SQL Server.

Set qdfPrzekazująca = _

dbsBieżąca.CreateQueryDef("")

' Ustaw właściwości nowej kwerendy, ograniczając

' liczbę rekordów, które mogą zostać zwrócone, do

' 20.

qdfPrzekazująca.Connect = _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy"

qdfPrzekazująca.SQL = "SELECT * FROM tytuły"

qdfPrzekazująca.ReturnsRecords = True

qdfPrzekazująca.MaxRecords = 20

Set rstTymcz = qdfPrzekazująca.OpenRecordset()

' Wyświetl wyniki kwerendy.

Debug.Print "Wyniki kwerendy:"

With rstTymcz

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

.Close

End With

dbsBieżąca.Close

End Sub


Właściwość Name - przykład (DAO)
Właściwość Name - przykład

W poniższym przykładzie wykorzystano właściwość Name do nadania nazwy nowo utworzonemu obiektowi, do pokazania obiektów zadanej kolekcji oraz do usunięcia obiektu z kolekcji.

Sub NameX()

Dim dbsNorthwind As Database

Dim qdfNowa As QueryDef

Dim qdfPętla As QueryDef

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Utwórz nowy trwały obiekt QueryDef i dołącz go

' do kolekcji QueryDefs.

Set qdfNowa = .CreateQueryDef()

qdfNowa.Name = "NowaKwerenda"

qdfNowa.SQL = "SELECT * FROM Pracownicy"

.QueryDefs.Append qdfNowa

' Wylicz elementy kolekcji QueryDefs, aby

' wyświetlić nazwy obiektów QueryDef.

Debug.Print "Nazwy kwerend w bazie danych " & _

.Name

For Each qdfPętla In .QueryDefs

Debug.Print "    " & qdfPętla.Name

Next qdfPętla

' Usuń nowy obiekt QueryDef, gdyż jest to tylko

' przykład.

.QueryDefs.Delete qdfNowa.Name

.Close

End With

End Sub


Właściwości ODBCTimeout i QueryTimeout - przykład (DAO)
Właściwości ODBCTimeout i QueryTimeout - przykład

W poniższym przykładzie wykorzystano właściwości ODBCTimeout oraz QueryTimeout do pokazania, jak ustawienie właściwości QueryTimeout obiektu Database wpływa na domyślne ustawienie właściwości ODBCTimeout każdego obiektu QueryDef utworzonego z tego obiektu Database.

Sub ODBCTimeoutX()

Dim dbsBieżąca As Database

Dim qdfSklepy As QueryDef

Dim rstSklepy As Recordset

Set dbsBieżąca = OpenDatabase("Northwind.mdb")

' Zmień domyślną wartość właściwości QueryTimeout

' bazy danych Northwind.

Debug.Print "Domyślna wartość QueryTimeout " & _

"bazy danych: " & dbsBieżąca.QueryTimeout

dbsBieżąca.QueryTimeout = 30

Debug.Print "Nowa wartość QueryTimeout bazy " & _

"danych: " & dbsBieżąca.QueryTimeout

' Utwórz nowy obiekt QueryDef.

Set qdfSklepy = _

dbsBieżąca.CreateQueryDef("Sklepy", _

"SELECT * FROM sklepy")

qdfSklepy.Connect = _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy"

' Zmień ustawienie właściwości ODBCTimeout nowego

' obiektu QueryDef, korzystając z wartości

' domyślnej.

Debug.Print "Domyślna wartość ODBCTimeout " & _

" obiektu QueryDef: " & qdfSklepy.ODBCTimeout

qdfSklepy.ODBCTimeout = 0

Debug.Print "Nowa wartość ODBCTimeout obiektu " & _

"QueryDef: " & qdfSklepy.ODBCTimeout

' Wykonaj kwerendę i wyświetl wyniki.

Set rstSklepy = qdfSklepy.OpenRecordset()

Debug.Print "Zawartość zestawu rekordów: "

With rstSklepy

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

.Close

End With

' Usuń nowy obiekt QueryDef, gdyż jest to tylko

' przykład.

dbsBieżąca.QueryDefs.Delete qdfSklepy.Name

dbsBieżąca.Close

End Sub


Właściwości Owner i SystemDB - przykład (DAO/Microsoft Jet)
Właściwości Owner i SystemDB - przykład

W poniższym przykładzie wykorzystano właściwości Owner i SystemDB do wyświetlenia właścicieli różnych obiektów Document.

Sub OwnerX()

' Sprawdź, czy plik grupy roboczej Microsoft Jet

' jest dostępny.

DBEngine.SystemDB = "system.mdw"

Dim dbsNorthwind As Database

Dim ctrPętla As Container

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

Debug.Print "Właściciele dokumentów:"

' Wylicz elementy kolekcji Containers i wyświetl

' właściciela pierwszego obiektu Document w

' kolekcji Documents każdego kontenera.

For Each ctrPętla In .Containers

With ctrPętla

Debug.Print "    [" & _

.Documents(0).Name & _

"] w kontenerze [" & .Name & _

"], którego właścicielem jest [" & _

.Documents(0).Owner & "]"

End With

Next ctrPętla

.Close

End With

End Sub


Właściwość PartialReplica - przykład (DAO/Microsoft Jet)
Właściwość PartialReplica - przykład

W poniższym kodzie wykorzystano właściwość PartialReplica do wykonania repliki wszystkich rekordów zawierających zamówienia od klientów z Kalifornii.

Sub PartialReplicaX()

' Założenia: dbsTymcz jest repliką częściową,

' w której istnieją odpowiednie związku między

' tabelami.

Dim tdfZamówienia As TableDef

Dim relKliZam As Relation

Dim dbsTymcz As Database

Dim relPętla As Relation

Set dbsTymcz = OpenDatabase("Northwind.mdb")

Set tdfZamówienia = _

dbsTymcz.TableDefs("Zamówienia")

' Odszukaj obiekt Relation reprezentujacy związek

' "Klienci - Zamówienia".

For Each relPętla In dbsTymcz.Relations

If relPętla.Table = "Klienci" And _

relPętla.ForeignTable = "Zamówienia" Then

' Ustaw właściwość PartialReplica obiektu

' Relation na wartość True.

relPętla.PartialReplica = True

Exit For

End If

Next relPętla

End Sub

Uwaga   Jeśli filtr repliki oraz związek repliki zostały ustawione na tę samą tabelę, ich kombinacja funkcjonuje tak, jak operacja logiczna OR, a nie jak operacja logiczna AND. W powyższym przykładzie rekordami, które podlegają wymianie w momencie synchronizacji, są zamówienia o wartości wyższej niż 1000 $ LUB wszystkie zamówienia od klientów z Kalifornii, a nie wszystkie zamówienia z Kalifornii, których wartość przekracza 1000 $.


Właściwość Prepare - przykład (DAO/ODBCDirect)
Właściwość Prepare - przykład

W poniższym przykładzie właściwość Prepare jest wykorzystana do określenia, że kwerenda ma być wykonana bezpośrednio, a nie za pośrednictwem tymczasowej procedury przechowywanej na serwerze.

Sub PrepareX()

Dim wrkODBC As Workspace

Dim conWyd As Connection

Dim qdfTymcz As QueryDef

Dim rstTymcz As Recordset

' Utwórz obiekt Workspace typu ODBCDirect i otwórz

' obiekt Connection.

Set wrkODBC = CreateWorkspace("", _

"admin", "", dbUseODBC)

Set conWyd = _

wrkODBC.OpenConnection("Wydawcy", , , _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

Set qdfTymcz = conWyd.CreateQueryDef("")

With qdfTymcz

' Ponieważ kwerenda będzie wykonywana jedynie

' raz, wybierz funkcję SQLExecDirect z API ODBC.

' Jeżeli właściwość ta nie zostanie ustawiona

' przed ustawieniem właściwości SQL, będzie

' wywołana funkcja SQLPrepare z API ODBC,

' co zniweluje oczekiwane zwiększenie

' wydajności.

.Prepare = dbQUnprepare

.SQL = "UPDATE należn_plan " & _

"SET należność = należność * 2 " & _

"WHERE tytuł_kod LIKE 'BU____' OR " & _

"tytuł_kod LIKE 'PC____'"

.Execute

End With

Debug.Print "Wyniki kwerendy:"

' Otwórz zestaw zawierający zmodyfikowane rekordy.

Set rstTymcz = conWyd.OpenRecordset( _

"SELECT * FROM należn_plan " & _

"WHERE tytuł_kod LIKE 'BU____' OR " & _

"tytuł_kod LIKE 'PC____'")

' Wylicz elementy tego zestawu rekordów.

With rstTymcz

Do While Not .EOF

Debug.Print , !tytuł_kod, !dół_zakres, _

!gór_zakres, !należność

.MoveNext

Loop

.Close

End With

conWyd.Close

wrkODBC.Close

End Sub


Właściwości RecordStatus i DefaultCursorDriver - przykład (DAO/ODBCDirect)
Właściwości RecordStatus i DefaultCursorDriver - przykład

W poniższym przykładzie właściwości RecordStatus i DefaultCursorDriver są wykorzystane do pokazania, jak zmiany w lokalnym obiekcie Recordset są śledzone podczas aktualizacji grupowej. Przykład korzysta z poniżej zdefiniowanej procedury PokażStatusRek.

Sub RecordStatusX()

Dim wrkGłówny As Workspace

Dim conGłówne As Connection

Dim rstTymcz As Recordset

Set wrkGłówny = CreateWorkspace("ObszarODBC", _

"admin", "", dbUseODBC)

' To ustawienie DefaultCursorDriver jest wymagane

' podczas aktualizacji grupowej.

wrkGłówny.DefaultCursorDriver = _

dbUseClientBatchCursor

Set conGłówne = _

wrkGłówny.OpenConnection("Wydawcy", _

dbDriverNoPrompt, False, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Poniższy argument blokowania jest wymagany

' podczas aktualizacji grupowej.

Set rstTymcz = conGłówne.OpenRecordset( _

"SELECT * FROM autorzy", dbOpenDynaset, 0, _

dbOptimisticBatch)

With rstTymcz

.MoveFirst

Debug.Print "Oryginalny rekord: " & !au_nazwisko

Debug.Print , PokażStatusRek(.RecordStatus)

.Edit

!au_nazwisko = "Bowen"

.Update

Debug.Print "Edytowany rekord: " & !au_nazwisko

Debug.Print , PokażStatusRek(.RecordStatus)

.AddNew

!au_nazwisko = "NoweNazwisko"

.Update

Debug.Print "Nowy rekord: " & !au_nazwisko

Debug.Print , PokażStatusRek(.RecordStatus)

.Delete

Debug.Print "Usunięty rekord: " & !au_nazwisko

Debug.Print , PokażStatusRek(.RecordStatus)

' Zamknij lokalny zestaw rekordów nie

' aktualizując danych na serwerze.

.Close

End With

conGłówne.Close

wrkGłówny.Close

End Sub

Function PokażStatusRek(lngTymcz As Long) As String

Dim strTymcz As String

strTymcz = ""

' Na podstawie wartości RecordStatus zbuduj

' komunikat.

If lngTymcz = dbRecordUnmodified Then _

strTymcz = "[dbRecordUnmodified]"

If lngTymcz = dbRecordModified Then _

strTymcz = "[dbRecordModified]"

If lngTymcz = dbRecordNew Then _

strTymcz = "[dbRecordNew]"

If lngTymcz = dbRecordDeleted Then _

strTymcz = "[dbRecordDeleted]"

If lngTymcz = dbRecordDBDeleted Then _

strTymcz = "[dbRecordDBDeleted]"

PokażStatusRek = strTymcz

End Function


Właściwość Replicable - przykład (DAO/Microsoft Jet)
Właściwość Replicable - przykład

W poniższym przykładzie zaprezentowano dwie sytuacje, w których wykorzystuje się właściwość Replicable — na bazie danych oraz na obiekcie bazy danych.

W poniższym przykładzie baza danych Northwind.mdb staje się bazą replikowalną. Zaleca się przed uruchomieniem poniższego programu utworzenie kopii zapasowej bazy danych Northwind. Należy również ustawić ścieżkę do bazy Northwind stosownie do lokalizacji tej bazy w danym komputerze.

Sub MakeDesignMasterX()

Dim dbsNorthwind As Database

Dim prpNowa As Property

' Otwórz bazę danych w trybie wyłącznego dostępu.

Set dbsNorthwind = OpenDatabase("Northwind.mdb", _

True)

With dbsNorthwind

' Jeśli właściwość Replicable nie istnieje,

' utwórz ją. Nie obsługuj błędów w przypadku,

' gdy właściwość istnieje.

On Error Resume Next

Set prpNowa = .CreateProperty("Replicable", _

dbText, "T")

.Properties.Append prpNowa

' Ustaw właściwość Replicable na wartość True.

.Properties("Replicable") = "T"

.Close

End With

End Sub

W poniższym przykładzie tworzony jest nowy obiekt TableDef, a następnie zmieniany na postać replikowalną. Baza danych musi być replikowalna; w przeciwnym razie poniższa procedura nie będzie działała poprawnie.

Sub CreateReplLocalTableX()

Dim dbsNorthwind As Database

Dim tdfNowa As TableDef

Dim fldNowe As Field

Dim prpNowa As Property

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Utwórz nowy obiekt TableDef o nazwie "Podatki".

Set tdfNowa = _

dbsNorthwind.CreateTableDef("Podatki")

' Zdefiniuj pole typu tekstowego o nazwie "Próg".

Set fldNowe = _

tdfNowa.CreateField("Próg", dbText, 3)

' Dołącz nowe pole do obiektu TableDef.

tdfNowa.Fields.Append fldNowe

' Dodaj nowy obiekt TableDef do bazy danych.

dbsNorthwind.TableDefs.Append tdfNowa

' Utwórz nową właściwość Replicable dla nowego

' obiektu TableDef.

Set prpNowa = tdfNowa.CreateProperty( _

"Replicable", dbText, "T")

' Dołącz właściwość Replicable do nowego obiektu

' TableDef.

tdfNowa.Properties.Append prpNowa

dbsNorthwind.Close

End Sub

W poniższym kodzie właściwość Replicable podanego obiektu TableDef ustawiana jest na wartość "T". Jeśli właściwość nie istnieje, jest ona tworzona i dołączana do kolekcji Properties tabeli, a jej wartość ustawiana jest na "T".

Sub SetReplicable(tdfTymcz As TableDef)

tdfTymcz.Properties("Replicable") = "T"

On Error GoTo 0

Exit Sub

ErrHandler:

Dim prpNowa As Property

If Err.Number = 3270 Then

Set prpNowa = tdfTymcz.CreateProperty( _

"Replicable", dbText, "T")

tdfTymcz.Properties.Append prpNowa

Else

MsgBox "Błąd " & Err & ": " & Error

End If

End Sub


Właściwość ReplicaFilter - przykład (DAO/Microsoft Jet)
Właściwość ReplicaFilter - przykład

W poniższym przykładzie wykorzystano właściwość ReplicaFilter w celu dokonania replikacji jedynie tych rekordów, które są związane z klientami z regionu Kalifornia.

Sub ReplicaFilterX()

' W poniższym przykładzie przyjęto, że aktualnie

' otwarta baza danych jest repliką.

Dim tdfKlienci As TableDef

Dim strFiltr As String

Dim dbsTymcz As Database

Set dbsTymcz = OpenDatabase("Northwind.mdb")

Set tdfKlienci = dbsTymcz.TableDefs("Klienci")

' Zsynchronizuj z pełną repliką przed ustawieniem

' filtru repliki.

dbsTymcz.Synchronize "C:\SPRZEDAŻ\RO96.MDB"

strFiltr = "Region = 'CA'"

tdfKlienci.ReplicaFilter = strFiltr

dbsTymcz.PopulatePartial "C:\SPRZEDAŻ\RO96.MDB"

' Usuń filtr repliki, gdyż jest to tylko przykład.

tdfKlienci.ReplicaFilter = False

' Ponownie wypełnij bazę danych

dbsTymcz.PopulatePartial "C:\SPRZEDAŻ\RO96.MDB"

End Sub


Właściwość ReplicaID - przykład (DAO/Microsoft Jet)
Właściwość ReplicaID - przykład

W poniższym przykładzie tworzona jest replika z wzorcem bazy danych Northwind.mdb, a następnie zwracana jest wartość ReplicaID repliki. Wartość ta jest tworzona automatycznie przez aparat bazy danych Microsoft Jet. (Jeśli do tej pory nie został utworzony wzorzec dla bazy Northwind, należy poszukać informacji o jego tworzeniu w opisie właściwości Replicable lub zmienić w kodzie nazwę bazy danych tak, żeby wskazywała na istniejący wzorzec).

Sub MakeReplicaReplicaIDX()

Dim dbsNorthwind As Database

Dim prpNrRepliki As Property

Dim dbsReplika As Database

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

' Utwórz nową replikę.

dbsNorthwind.MakeReplica "Nwreplika2.mdb", _

"druga replika"

dbsNorthwind.Close

' Otwórz nową replikę, aby przeczytać wartość jej

' ReplicaID.

Set dbsReplika = OpenDatabase("Nwreplika2.mdb")

Debug.Print dbsReplika.ReplicaID

dbsReplika.Close

End Sub


Właściwość Required - przykład (DAO)
Właściwość Required - przykład

W poniższym przykładzie wykorzystano właściwość Required do wyświetlenia nazw tych pól z trzech różnych tabel, które muszą zawierać dane, aby mógł zostać dodany nowy rekord. Do uruchomienia tej procedury niezbędna jest procedura PokażObowiazkowe.

Sub RequiredX()

Dim dbsNorthwind As Database

Dim tdfPętla As TableDef

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

' Pokaż, które pola z kolekcji Fields trzech

' różnych obiektów TableDef są obowiązkowe.

PokażObowiazkowe .TableDefs("Kategorie")

PokażObowiazkowe .TableDefs("Klienci")

PokażObowiazkowe .TableDefs("Pracownicy")

.Close

End With

End Sub

Sub PokażObowiazkowe(tdfTymcz As TableDef)

Dim fldPętla As Field

' Wylicz elementy kolekcji Fields podanego

' obiektu TableDef i wyświetl właściwość Required.

Debug.Print "Pola tabeli " & tdfTymcz.Name & ":"

For Each fldPętla In tdfTymcz.Fields

Debug.Print , fldPętla.Name & _

", Required = " & fldPętla.Required

Next fldPętla

End Sub


Właściwość StillExecuting i metoda Cancel - przykład (DAO/ODBCDirect)
Właściwość StillExecuting i metoda Cancel - przykład

W poniższym przykładzie wykorzystano właściwość StillExecuting i metodę Cancel do asynchronicznego otwarcia obiektu Connection.

Sub CancelConnectionX()

Dim wrkGłówny As Workspace

Dim conGłówne As Connection

Dim sngCzas As Single

Set wrkGłówny = CreateWorkspace("ObszarODBC", _

"admin", "", dbUseODBC)

' Otwórz połączenie asynchronicznie.

Set conGłówne = wrkGłówny.OpenConnection( _

"Wydawcy", _

dbDriverNoPrompt + dbRunAsync, False, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

sngCzas = Timer

' Czekaj przez pięć sekund.

Do While Timer - sngCzas < 5

Loop

' Jeśli połączenie nie zostało nawiązane,

' spytaj użytkownika, czy chce czekać. Jeśli nie

' chce, anuluj połączenie i wyjdź z procedury.

Do While conGłówne.StillExecuting

If MsgBox( _

"Na razie brak połączenia ---czy czekać?", _

vbYesNo) = vbNo Then

conGłówne.Cancel

MsgBox "Połączenie zostało anulowane!"

wrkGłówny.Close

Exit Sub

End If

Loop

With conGłówne

' Wykorzystaj obiekt conGłówne typu Connection.

.Close

End With

wrkGłówny.Close

End Sub

W poniższym przykładzie wykorzystano właściwość StillExecuting i metodę Cancel do asynchronicznego wykonania obiektu QueryDef.

Sub CancelQueryDefX()

Dim wrkGłówny As Workspace

Dim conGłówne As Connection

Dim qdfTymcz As QueryDef

Dim sngCzas As Single

Set wrkGłówny = CreateWorkspace("ObszarODBC", _

"admin", "", dbUseODBC)

Set conGłówne = wrkGłówny.OpenConnection( _

"Wydawcy", dbDriverNoPrompt, False, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

Set qdfTymcz = conGłówne.CreateQueryDef("")

With qdfTymcz

.SQL = "UPDATE należn_plan " & _

"SET należność = należność * 2 " & _

"WHERE tytuł_kod LIKE 'BU____' OR " & _

"tytuł_kod LIKE 'PC____'"

' Wykonaj kwerendę asynchronicznie.

.Execute dbRunAsync

sngCzas = Timer

' Czekaj przez pięć sekund.

Do While Timer - sngCzas < 5

Loop

' Jeśli kwerenda nie została zakończona,

' spytaj użytkownika, czy chce czekać.

' Jeśli nie chce, anuluj kwerendę i wyjdź

' z procedury.

Do While .StillExecuting

If MsgBox( "Kwerenda jest wciąż nie " & _

"zakończona--czy czekać?",vbYesNo) = _

vbNo Then

.Cancel

MsgBox "Kwerenda została anulowana!"

Exit Do

End If

Loop

End With

conGłówne.Close

wrkGłówny.Close

End Sub

W poniższym przykładzie wykorzystano właściwość StillExecuting i metodę Cancel do asynchronicznego przejścia do ostatniego rekordu obiektu Recordset.

Sub CancelRecordsetX()

Dim wrkGłówny As Workspace

Dim conGłówne As Connection

Dim rstTymcz As Recordset

Dim sngCzas As Single

Set wrkGłówny = CreateWorkspace("ObszarODBC", _

"admin", "", dbUseODBC)

Set conGłówne = wrkGłówny.OpenConnection( _

"Wydawcy", dbDriverNoPrompt, False, _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

Set rstTymcz = conGłówne.OpenRecordset( _

"SELECT * FROM należn_plan", dbOpenDynaset)

With rstTymcz

' Wołaj metodę MoveLast asynchronicznie.

.MoveLast dbRunAsync

sngCzas = Timer

' Czekaj przez pięć sekund.

Do While Timer - sngCzas < 5

Loop

' Jeśli wykonanie metody MoveLast nie zostało

' zakończone, spytaj użytkownika czy, chce czekać.

' Jeśli nie chce, anuluj metodę MoveLast i wyjdź

' z procedury.

Do While .StillExecuting

If MsgBox("Wciąż nie na ostatnim " & _

"rekordzie --czy czekać?", _

vbYesNo) = vbNo Then

.Cancel

MsgBox "Metoda MoveLast została " & _

"anulowana!"

conGłówne.Close

wrkGłówny.Close

Exit Sub

End If

Loop

' Użyj zestawu rekordów.

.Close

End With

conGłówne.Close

wrkGłówny.Close

End Sub


Właściwość Transactions - przykład (DAO)
Właściwość Transactions - przykład

W poniższym przykładzie przedstawiono właściwość Transactions w obszarach roboczych Microsoft Jet i ODBCDirect.

Sub TransactionsX()

Dim wrkJet As Workspace

Dim wrkODBC As Workspace

Dim dbsNorthwind As Database

Dim conWyd As Connection

Dim rstTymcz As Recordset

' Otwórz obszary robocze Microsoft Jet i

' ODBCDirect, bazę danych Microsoft Jet oraz

' połączenie ODBCDirect.

Set wrkJet = _

CreateWorkspace("", "admin", "", dbUseJet)

Set wrkODBC = _

CreateWorkspace("", "admin", "", dbUseODBC)

Set dbsNorthwind = _

wrkJet.OpenDatabase("Northwind.mdb")

Set conWyd = wrkODBC.OpenConnection("", , , _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Otwórz dwa różne obiekty Recordset i wyświetl

' właściwość Transactions każdego z nich.

Debug.Print "Otwieranie zestawu rekordów " & _

"Microsoft Jet typu tabela..."

Set rstTymcz = dbsNorthwind.OpenRecordset( _

"Pracownicy", dbOpenTable)

Debug.Print "    Transactions = " & _

 rstTymcz.Transactions

Debug.Print "Otwieranie zestawu rekordów " & _

"typu progresywnego, dla którego " & _

"źródłem jest instrukcja SQL..."

Set rstTymcz = dbsNorthwind.OpenRecordset( _

"SELECT * FROM Pracownicy", dbOpenForwardOnly)

Debug.Print "    właściwość Transactions = " & _

rstTymcz.Transactions

' Wyświetl właściwość Transactions obiektu

' Connection obszaru roboczego ODBCDirect.

Debug.Print "Sprawdzenie właściwości " & _

"Transactions połączenia ODBC..."

Debug.Print "    Transactions = " & _

conWyd.Transactions

rstTymcz.Close

dbsNorthwind.Close

conWyd.Close

wrkJet.Close

wrkODBC.Close

End Sub


Właściwość UserName - przykład (DAO)
Właściwość UserName - przykład

W poniższym przykładzie wykorzystano właściwość UserName do zmiany uprawnień określonego użytkownika do korzystania z pewnego obiektu. Następnie właściwość ta jest użyta do sprawdzenia uprawnień tego użytkownika do wstawiania nowych danych do tego obiektu.

Sub UserNameX()

' Sprawdź, czy plik z informacjami o grupie

' roboczej Microsoft Jet jest dostępny.

DBEngine.SystemDB = "system.mdw"

Dim dbsNorthwind As Database

Dim docTymcz As Document

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set docTymcz = _

dbsNorthwind.Containers("Tables").Documents(0)

' Zmień uprawnienia użytkownika NowyUżytkownik

' dotyczące pierwszego obiektu Document w

' kontenerze Tables.

With docTymcz

.UserName = "NowyUżytkownik"

.Permissions = dbSecRetrieveData

If (.Permissions And dbSecInsertData) = _

dbSecInsertData Then

Debug.Print .UserName & _

" ma prawo do wprowadzania danych."

Else

Debug.Print .UserName & _

" nie ma uprawnień do " & _

"wprowadzania danych."

End If

End With

dbsNorthwind.Close

End Sub


Właściwość Version - przykład (DAO)
Właściwość Version - przykład

W poniższym przykładzie wykorzystano właściwość Version do wyświetlenia raportu o aparacie bazy danych Microsoft Jet w pamięci, bazie danych Microsoft Jet oraz o połączeniu ODBC.

Sub VersionX()

Dim wrkJet As Workspace

Dim dbsNorthwind As Database

Dim wrkODBC As Workspace

Dim conWyd As Connection

' Otwórz obiekt Database typu Microsoft Jet.

Set wrkJet = CreateWorkspace("NowyObszarJet", _

"admin", "", dbUseJet)

Set dbsNorthwind = _

wrkJet.OpenDatabase("Northwind.mdb")

' Utwórz obiekt Workspace typu ODBCDirect i otwórz

' obiekty Connection.

Set wrkODBC = CreateWorkspace("NowyObszarODBC", _

"admin", "", dbUseODBC)

Set conWyd = _

wrkODBC.OpenConnection("Połączenie1", , , _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy")

' Zaprezentuj trzy różne przypadki zastosowania

' właściwości Version.

Debug.Print "Wersja obiektu DBEngine " & _

"(Microsoft Jet w pamięci) = " & _

DBEngine.Version

Debug.Print "Wersja aparatu bazy danych " & _

"Microsoft Jet wykorzystanego przy " & _

"tworzeniu bazy danych " & dbsNorthwind.Name & _

" = " & dbsNorthwind.Version

Debug.Print "Wersja połączenia ODBCDirect " & _

"(na podstawie właściwości Database) = " & _

conWyd.Database.Version

dbsNorthwind.Close

conWyd.Close

wrkJet.Close

wrkODBC.Close

End Sub


Właściwości Connect i ReturnsRecords - przykład (klient/serwer) [DAO/Microsoft Jet]
Właściwości Connect i ReturnsRecords - przykład (klient/serwer)

W poniższym przykładzie wykorzystano właściwości Connect i ReturnsRecords, aby wybrać pięć najlepiej sprzedawanych tytułów książek z bazy danych serwera Microsoft SQL. Liczba pozycji na liście może przekraczać pięć, jeśli wielkość sprzedaży pewnych książek jest identyczna. W takim przypadku wyświetlany jest komunikat ze stosownym wyjaśnieniem.

Sub ClientServerX1()

Dim dbsBieżąca As Database

Dim qdfPrzekazująca As QueryDef

Dim qdfChwilowa As QueryDef

Dim rstNajlepsze As Recordset

Dim strKomunikat As String

' Otwórz bazę danych, z której można tworzyć

' obiekty QueryDef.

Set dbsBieżąca = OpenDatabase("BD1.mdb")

' Utwórz kwerendę przekazującą, aby pobrać dane z

' bazy danych serwera Microsoft SQL.

Set qdfPrzekazująca = _

dbsBieżąca.CreateQueryDef("WszystkieTytuły")

qdfPrzekazująca.Connect = _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy"

qdfPrzekazująca.SQL = "SELECT * FROM tytuły " & _

"ORDER BY sprzedaż DESC"

qdfPrzekazująca.ReturnsRecords = True

' Utwórz tymczasowy obiekt QueryDef, aby pobrać

' dane z kwerendy przekazującej.

Set qdfChwilowa = dbsBieżąca.CreateQueryDef("")

qdfChwilowa.SQL = _

"SELECT TOP 5 tytuł FROM WszystkieTytuły"

Set rstNajlepsze = qdfChwilowa.OpenRecordset()

' Wyświetl wyniki kwerend.

With rstNajlepsze

strKomunikat = _

"Lista pięciu najlepiej sprzedawanych " & _

"książek:" & vbCr

Do While Not .EOF

strKomunikat = strKomunikat & "    " & _

!Tytuł & vbCr

.MoveNext

Loop

If .RecordCount > 5 Then

strKomunikat = strKomunikat & _

"(Na liście znajduje się " & _

vbCr & .RecordCount & _

" tytułów, ponieważ sprzedano " & _

"jednakową ilość pewnych książek.)"

End If

MsgBox strKomunikat

.Close

End With

' Usuń nową kwerendę przekazującą, gdyż jest to

' tylko przykład.

dbsBieżąca.QueryDefs.Delete "WszystkieTytuły"

dbsBieżąca.Close

End Sub


Metoda CreateQueryDef, metoda OpenRecordset i właściwość SQL - przykład (klient/serwer) [DAO/Microsoft Jet]
Metoda CreateQueryDef, metoda OpenRecordset i właściwość SQL - przykład (klient/serwer)

W poniższym przykładzie wykorzystano metody CreateQueryDef i OpenRecordset oraz właściwość SQL, aby wykonać kwerendę na tabeli tytułów w przykładowej bazie danych Wyd serwera Microsoft SQL i wyświetlić tytuł i numer tytułu najlepiej sprzedawanej książki. Następnie wykonywana jest kwerenda na tabeli autorów, a użytkownik proszony jest o wysłanie do każdego autora premii w postaci czeku. Wartość czeku zależy od wysokości honorarium autorskiego danego autora (pełna pula wynosi 1000 zł i każdy autor powinien otrzymać pewien procent tej sumy).

Sub ClientServerX2()

Dim dbsBieżąca As Database

Dim qdfBestselery As QueryDef

Dim qdfNagrodzeni As QueryDef

Dim rstNajlepsza As Recordset

Dim rstOdbiorcyPremii As Recordset

Dim strListaAutorów As String

' Otwórz bazę danych, z której można tworzyć

' obiekty QueryDef.

Set dbsBieżąca = OpenDatabase("BD1.mdb")

' Utwórz tymczasowy obiekt QueryDef, aby pobrać

' dane z bazy danych serwera Microsoft SQL.

Set qdfBestselery = dbsBieżąca.CreateQueryDef("")

With qdfBestselery

.Connect = "ODBC;DATABASE=wyd;UID=sa;PWD=;" & _

 "DSN=Wydawcy"

.SQL = "SELECT tytuł, nr_tytułu " & _

"FROM tytuły ORDER BY sprzedaż DESC"

Set rstNajlepsza = .OpenRecordset()

rstNajlepsza.MoveFirst

End With

' Utwórz tymczasowy obiekt QueryDef, aby pobrać

' dane z bazy danych serwera Microsoft SQL w

' oparciu o wyniki pierwszej kwerendy.

Set qdfNagrodzeni = dbsBieżąca.CreateQueryDef("")

With qdfNagrodzeni

.Connect = "ODBC;DATABASE=wyd;UID=sa;PWD=;" & _

"DSN=Wydawcy"

.SQL = "SELECT * FROM autor " & _

"WHERE nr_tytułu = '" & _

rstNajlepsza!nr_tytułu & "'"

Set rstOdbiorcyPremii = .OpenRecordset()

End With

' Utwórz ciąg wynikowy.

With rstOdbiorcyPremii

Do While Not .EOF

strListaAutorów = strListaAutorów & "   " & _

!nr_autora & ":  $" & _

(10 * !procent_puli) & vbCr

.MoveNext

Loop

End With

' Wyświetl wyniki.

MsgBox "Proszę wysłać czeki o wskazanych " & _

"wartościach do następujących autorów:" & _

vbCr & strListaAutorów & _

"za osiągnięcie nadzwyczajnej wielkości " & _

"sprzedaży książki pt. " & _

rstNajlepsza!Tytuł & "."

rstNajlepsza.Close

dbsBieżąca.Close

End Sub


Metoda CreateTableDef, FillCache i właściwości CacheSize, CacheStart i SourceTableName - przykład (klient/serwer) [DAO/Microsoft Jet]
Metoda CreateTableDef, metoda FillCache i właściwości CacheSize, CacheStart i SourceTableName - przykład (klient/serwer)

W poniższym przykładzie wykorzystano metody CreateTableDef i FillCache oraz właściwości CacheSize, CacheStart i SourceTableName, aby wykonać operację dwukrotnego wyliczenia rekordów tabeli połączonej. Następnie operacja ta jest wykonywana ponownie z wykorzystaniem bufora o pojemności 50 rekordów. Dalej wyświetlane są wyniki ilustrujące szybkość przeglądania tabeli połączonej bez użycia oraz z użyciem bufora.

Sub ClientServerX3()

Dim dbsBieżąca As Database

Dim tdfHonoraria As TableDef

Dim rstZdalny As Recordset

Dim sngStart As Single

Dim sngStop As Single

Dim sngBezBufora As Single

Dim sngBufor As Single

Dim intPętla As Integer

Dim strTymcz As String

Dim intRekordów As Integer

' Otwórz bazę danych, do której można dołączyć

' tabelę połączoną.

Set dbsBieżąca = OpenDatabase("BD1.mdb")

' Utwórz tabelę połączoną, która łączy się z bazą

' danych serwera Microsoft SQL.

Set tdfHonoraria = _

dbsBieżąca.CreateTableDef("Honoraria")

tdfHonoraria.Connect = _

"ODBC;DATABASE=wyd;UID=sa;PWD=;DSN=Wydawcy"

tdfHonoraria.SourceTableName = "rozkładhonor"

dbsBieżąca.TableDefs.Append tdfHonoraria

Set rstZdalny = _

dbsBieżąca.OpenRecordset("Honoraria")

With rstZdalny

' Wylicz dwukrotnie elementy obiektu Recordset i

' zapamiętaj czas tej operacji.

sngStart = Timer

For intPętla = 1 To 2

.MoveFirst

Do While Not .EOF

' Wykonaj prostą operację w celu

' przeprowadzenia testu.

strTymcz = !nr_tytułu

.MoveNext

Loop

Next intPętla

sngStop = Timer

sngBezBufora = sngStop - sngStart

' Zapamiętaj w buforze 50 pierwszych rekordów.

.MoveFirst

.CacheSize = 50

.FillCache

sngStart = Timer

' Wylicz dwukrotnie elementy obiektu Recordset i

' zapamiętaj czas tej operacji.

For intPętla = 1 To 2

intRekordów = 0

.MoveFirst

Do While Not .EOF

' Wykonaj prostą operację w celu

' przeprowadzenia testu.

strTymcz = !nr_tytułu

' Licz rekordy. Jeśli bufor jest

' wypełniona, wyczyść jego zawartość,

' aby zwolnić miejsce dla następnych 50

' rekordów.

intRekordów = intRekordów + 1

.MoveNext

If intRekordów Mod 50 = 0 Then

.CacheStart = .Bookmark

.FillCache

End If

Loop

Next intPętla

sngStop = Timer

sngBufor = sngStop - sngStart

' Wyświetl wyniki testów.

MsgBox "Czasy wykonywania operacji:" & vbCr & _

"    Bez użycia bufora: " & _

Format(sngBezBufora, "##0.000") & _

" sekund" & vbCr & _

"    z zastosowaniem bufora" & _

" o pojemności 50 rekordów: " & _

Format(sngBufor, "##0.000") & " sekund"

.Close

End With

' Usuń tabelę połączoną, gdyż jest to tylko

' przykład.

dbsBieżąca.TableDefs.Delete tdfHonoraria.Name

dbsBieżąca.Close

End Sub