Klasa CDaoDatabase
Reprezentuje połączenie z bazą danych programu Access przy użyciu obiektów dostępu do danych (DAO).
Uwaga
Obiekt dostępu do danych (DAO) jest obsługiwany za pośrednictwem pakietu Office 2013. DaO 3.6 jest wersją ostateczną i jest przestarzała.
class CDaoDatabase : public CObject
Nazwa/nazwisko | opis |
---|---|
CDaoDatabase::CDaoDatabase | CDaoDatabase Tworzy obiekt. Wywołaj metodę Open , aby połączyć obiekt z bazą danych. |
Nazwa/nazwisko | opis |
---|---|
CDaoDatabase::CanTransact | Zwraca wartość niezerowa, jeśli baza danych obsługuje transakcje. |
CDaoDatabase::CanUpdate | Zwraca wartość niezerową, jeśli CDaoDatabase obiekt jest aktualizowalny (nie tylko do odczytu). |
CDaoDatabase::Close | Zamyka połączenie z bazą danych. |
CDaoDatabase::Create | Tworzy podstawowy obiekt bazy danych DAO i inicjuje CDaoDatabase obiekt. |
CDaoDatabase::CreateRelation | Definiuje nową relację między tabelami w bazie danych. |
CDaoDatabase::D eleteQueryDef | Usuwa obiekt querydef zapisany w kolekcji QueryDefs bazy danych. |
CDaoDatabase::D eleteRelation | Usuwa istniejącą relację między tabelami w bazie danych. |
CDaoDatabase::D eleteTableDef | Usuwa definicję tabeli w bazie danych. Spowoduje to usunięcie rzeczywistej tabeli i wszystkich jej danych. |
CDaoDatabase::Execute | Wykonuje zapytanie akcji. Wywołanie Execute zapytania zwracającego wyniki zgłasza wyjątek. |
CDaoDatabase::GetConnect | Zwraca parametry połączenia używane do łączenia obiektu z CDaoDatabase bazą danych. Używany do ODBC. |
CDaoDatabase::GetName | Zwraca nazwę aktualnie używanej bazy danych. |
CDaoDatabase::GetQueryDefCount | Zwraca liczbę zapytań zdefiniowanych dla bazy danych. |
CDaoDatabase::GetQueryDefInfo | Zwraca informacje o określonym zapytaniu zdefiniowanym w bazie danych. |
CDaoDatabase::GetQueryTimeout | Zwraca liczbę sekund, po których upłynął limit czasu operacji zapytań bazy danych. Dotyczy wszystkich kolejnych otwartych, dodawania nowych, aktualizacji i edytowania operacji oraz innych operacji na źródłach danych ODBC (tylko) takich jak Execute wywołania. |
CDaoDatabase::GetRecordsAffected | Zwraca liczbę rekordów, których dotyczy ostatnia aktualizacja, edytowanie lub dodawanie operacji albo wywołanie metody Execute . |
CDaoDatabase::GetRelationCount | Zwraca liczbę relacji zdefiniowanych między tabelami w bazie danych. |
CDaoDatabase::GetRelationInfo | Zwraca informacje o określonej relacji zdefiniowanej między tabelami w bazie danych. |
CDaoDatabase::GetTableDefCount | Zwraca liczbę tabel zdefiniowanych w bazie danych. |
CDaoDatabase::GetTableDefInfo | Zwraca informacje o określonej tabeli w bazie danych. |
CDaoDatabase::GetVersion | Zwraca wersję aparatu bazy danych skojarzoną z bazą danych. |
CDaoDatabase::IsOpen | Zwraca wartość niezerową, jeśli CDaoDatabase obiekt jest obecnie połączony z bazą danych. |
CDaoDatabase::Open | Ustanawia połączenie z bazą danych. |
CDaoDatabase::SetQueryTimeout | Ustawia limit czasu operacji zapytań bazy danych (tylko w źródłach danych ODBC). Wpływa na wszystkie kolejne operacje otwierania, dodawania nowych, aktualizacji i usuwania. |
Nazwa/nazwisko | opis |
---|---|
CDaoDatabase::m_pDAODatabase | Wskaźnik do bazowego obiektu bazy danych DAO. |
CDaoDatabase::m_pWorkspace | Wskaźnik do obiektu CDaoWorkspace , który zawiera bazę danych i definiuje jego przestrzeń transakcji. |
Aby uzyskać informacje o obsługiwanych formatach bazy danych, zobacz funkcję składową GetName . W danym obszarze roboczym może być aktywny co najmniej jeden CDaoDatabase
obiekt reprezentowany przez obiekt CDaoWorkspace . Obszar roboczy obsługuje kolekcję otwartych obiektów bazy danych nazywanych kolekcją Bazy danych.
Obiekty bazy danych można tworzyć niejawnie podczas tworzenia obiektów zestawu rekordów. Można jednak również jawnie tworzyć obiekty bazy danych. Aby jawnie użyć istniejącej bazy danych z CDaoDatabase
programem , wykonaj jedną z następujących czynności:
Skonstruuj
CDaoDatabase
obiekt, przekazując wskaźnik do otwartego obiektu CDaoWorkspace .Lub skonstruuj
CDaoDatabase
obiekt bez określania obszaru roboczego (MFC tworzy tymczasowy obiekt obszaru roboczego).
Aby utworzyć nowy pakiet Microsoft Jet (. Baza danych MDB, skonstruuj CDaoDatabase
obiekt i wywołaj jego funkcję składową Create . Nie należy dzwonić po Create
.Open
Aby otworzyć istniejącą bazę danych, skonstruuj CDaoDatabase
obiekt i wywołaj jego funkcję open member.
Dowolne z tych technik dołącza obiekt bazy danych DAO do kolekcji Databases obszaru roboczego i otwiera połączenie z danymi. Po utworzeniu obiektów CDaoRecordset, CDaoTableDef lub CDaoQueryDef do obsługi połączonej bazy danych przekaż konstruktory dla tych obiektów wskaźnik do CDaoDatabase
obiektu. Po zakończeniu korzystania z połączenia wywołaj funkcję Zamknij element członkowski i zniszczyć CDaoDatabase
obiekt. Close
Zamyka wszystkie zestawy rekordów, które nie zostały jeszcze zamknięte.
Przetwarzanie transakcji bazy danych jest dostarczane na poziomie obszaru roboczego — zobacz funkcje składowe BeginTrans, CommitTrans i Rollback klasy CDaoWorkspace
.
Zalecanym sposobem pracy ze źródłami danych Open Database Base Connectivity (ODBC) jest dołączanie tabel zewnętrznych do bazy danych Microsoft Jet (.MDB
).
Każda baza danych przechowuje własne kolekcje obiektów tabledef, querydef, recordset i relation. Klasa CDaoDatabase
dostarcza funkcje składowe do manipulowania tymi obiektami.
Uwaga
Obiekty są przechowywane w dao, a nie w obiekcie bazy danych MFC. MFC dostarcza klasy dla obiektów tabledef, querydef i recordset, ale nie dla obiektów relacyjnych.
CDaoDatabase
Nagłówek: afxdao.h
Wywołaj tę funkcję składową, aby określić, czy baza danych zezwala na transakcje.
BOOL CanTransact();
Nonzero, jeśli baza danych obsługuje transakcje; w przeciwnym razie 0.
Transakcje są zarządzane w obszarze roboczym bazy danych.
Wywołaj tę funkcję składową, aby określić, czy CDaoDatabase
obiekt zezwala na aktualizacje.
BOOL CanUpdate();
Nonzero, jeśli CDaoDatabase
obiekt zezwala na aktualizacje; w przeciwnym razie 0, wskazując, że przekazano wartość TRUE w bReadOnly po otwarciu CDaoDatabase
obiektu lub że sama baza danych jest tylko do odczytu. Zobacz funkcję Otwórz element członkowski.
Aby uzyskać informacje na temat aktualizowalności bazy danych, zobacz temat "Updatable Property" (Updatable Property) w pomocy dao.
CDaoDatabase
Tworzy obiekt.
CDaoDatabase(CDaoWorkspace* pWorkspace = NULL);
pWorkspace
Wskaźnik do CDaoWorkspace
obiektu, który będzie zawierać nowy obiekt bazy danych. Jeśli zaakceptujesz domyślną wartość NULL, konstruktor tworzy obiekt tymczasowy CDaoWorkspace
, który używa domyślnego obszaru roboczego DAO. Wskaźnik do obiektu obszaru roboczego można uzyskać za pośrednictwem elementu członkowskiego danych m_pWorkspace .
Po utworzeniu obiektu, jeśli tworzysz nowy pakiet Microsoft Jet (. Baza danych MDB) wywołuje funkcję elementu członkowskiego Create obiektu. Jeśli zamiast tego otworzysz istniejącą bazę danych, wywołaj funkcję Open member obiektu.
Po zakończeniu pracy z obiektem należy wywołać jego funkcję zamknij składową, a następnie zniszczyć CDaoDatabase
obiekt.
Wygodne może być osadzanie CDaoDatabase
obiektu w klasie dokumentów.
Uwaga
Obiekt CDaoDatabase
jest również tworzony niejawnie, jeśli otworzysz obiekt CDaoRecordset bez przekazywania wskaźnika do istniejącego CDaoDatabase
obiektu. Ten obiekt bazy danych jest zamykany po zamknięciu obiektu zestawu rekordów.
Wywołaj tę funkcję składową, aby odłączyć się od bazy danych i zamknąć wszystkie otwarte zestawy rekordów, definicje tabel i definicje zapytań skojarzone z bazą danych.
virtual void Close();
Dobrym rozwiązaniem jest zamknięcie tych obiektów przed wywołaniem tej funkcji składowej. CDaoDatabase
Zamknięcie obiektu spowoduje usunięcie go z kolekcji Databases w skojarzonym obszarze roboczym. Ponieważ Close
obiekt nie zostanie zniszczony CDaoDatabase
, można użyć go ponownie, otwierając tę samą bazę danych lub inną bazę danych.
Przestroga
Przed zamknięciem bazy danych wywołaj funkcję składową Update (jeśli istnieją oczekujące zmiany) i Close
funkcję składową we wszystkich otwartych obiektach zestawu rekordów. Jeśli zamkniesz funkcję, która deklaruje obiekt lub CDaoDatabase
CDaoRecordset na stosie, baza danych zostanie zamknięta, wszystkie niezapisane zmiany zostaną utracone, wszystkie oczekujące transakcje zostaną wycofane, a wszelkie oczekujące zmiany danych zostaną utracone.
Przestroga
Jeśli spróbujesz zamknąć obiekt bazy danych, gdy wszystkie obiekty zestawu rekordów są otwarte, lub jeśli spróbujesz zamknąć obiekt obszaru roboczego, gdy wszystkie obiekty bazy danych należące do tego określonego obszaru roboczego są otwarte, te obiekty zestawu rekordów zostaną zamknięte i wszystkie oczekujące aktualizacje lub zmiany zostaną wycofane. Jeśli spróbujesz zamknąć obiekt obszaru roboczego, gdy wszystkie obiekty bazy danych należące do niego są otwarte, operacja zamyka wszystkie obiekty bazy danych należące do tego określonego obiektu obszaru roboczego, co może spowodować zamknięcie nieujawnianych obiektów zestawu rekordów. Jeśli obiekt bazy danych nie zostanie zamknięty, MFC zgłosi błąd asercji w kompilacjach debugowania.
Jeśli obiekt bazy danych jest zdefiniowany poza zakresem funkcji, a funkcja zostanie zamknięta bez jego zamknięcia, obiekt bazy danych pozostanie otwarty do momentu jawnego zamknięcia lub modułu, w którym jest zdefiniowany, jest poza zakresem.
Aby utworzyć nowy pakiet Microsoft Jet (. Baza danych MDB) wywołuje tę funkcję składową po utworzeniu CDaoDatabase
obiektu.
virtual void Create(
LPCTSTR lpszName,
LPCTSTR lpszLocale = dbLangGeneral,
int dwOptions = 0);
lpszName
Wyrażenie ciągu, które jest nazwą tworzonego pliku bazy danych. Może to być pełna ścieżka i nazwa pliku, na przykład "C:\\MYDB. MDB". Musisz podać nazwę. Jeśli nie podasz rozszerzenia nazwy pliku, . Baza danych MDB jest dołączana. Jeśli sieć obsługuje jednolitą konwencję nazewnictwa (UNC), możesz również określić ścieżkę sieciową, taką jak "\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB". Tylko Microsoft Jet (. Pliki bazy danych MDB) można utworzyć przy użyciu tej funkcji składowej. (Podwójne ukośniki odwrotne są wymagane w literałach ciągów, ponieważ "\" jest znakiem ucieczki języka C++).
lpszLocale
Wyrażenie ciągu używane do określania kolejności sortowania na potrzeby tworzenia bazy danych. Domyślna wartość to dbLangGeneral
. Dopuszczalne wartości:
dbLangGeneral
Angielski, niemiecki, francuski, portugalski, włoski i nowoczesny hiszpańskidbLangArabic
ArabskidbLangCyrillic
RosyjskidbLangCzech
CzeskidbLangDutch
HolenderskidbLangGreek
GreckidbLangHebrew
HebrajskidbLangHungarian
WęgierskidbLangIcelandic
IslandzkidbLangNordic
Języki nordyckie (tylko aparat bazy danych Microsoft Jet w wersji 1.0)dbLangNorwdan
Norweski i duńskidbLangPolish
PolskidbLangSpanish
Tradycyjny hiszpańskidbLangSwedfin
Szwedzki i fińskidbLangTurkish
Turecki
dwOptions
Liczba całkowita wskazująca co najmniej jedną opcję. Dopuszczalne wartości:
dbEncrypt
Utwórz zaszyfrowaną bazę danych.dbVersion10
Utwórz bazę danych z bazą danych Microsoft Jet w wersji 1.0.dbVersion11
Utwórz bazę danych z bazą danych Microsoft Jet w wersji 1.1.dbVersion20
Utwórz bazę danych z bazą danych Microsoft Jet w wersji 2.0.dbVersion30
Utwórz bazę danych z bazą danych Microsoft Jet w wersji 3.0.
Jeśli pominięto stałą szyfrowania, zostanie utworzona niezaszyfrowana baza danych. Można określić tylko jedną stałą wersji. Jeśli pominięto stałą wersję, zostanie utworzona baza danych korzystająca z bazy danych Microsoft Jet w wersji 3.0.
Przestroga
Jeśli baza danych nie jest zaszyfrowana, możliwe jest, nawet w przypadku zaimplementowania zabezpieczeń użytkownika/hasła, aby bezpośrednio odczytać plik dysku binarnego, który stanowi bazę danych.
Create
Tworzy plik bazy danych i bazowy obiekt bazy danych DAO oraz inicjuje obiekt C++. Obiekt jest dołączany do kolekcji Bazy danych skojarzonego obszaru roboczego. Obiekt bazy danych jest w stanie otwartym; Nie dzwonij po Create
.Open*
Uwaga
Za pomocą Create
programu można utworzyć tylko rozwiązanie Microsoft Jet (. Bazy danych MDB. Nie można tworzyć baz danych ISAM ani baz danych ODBC.
Wywołaj tę funkcję składową, aby ustanowić relację między co najmniej jednym polem w tabeli podstawowej w bazie danych i co najmniej jednym polem w tabeli obcej (inna tabela w bazie danych).
void CreateRelation(
LPCTSTR lpszName,
LPCTSTR lpszTable,
LPCTSTR lpszForeignTable,
long lAttributes,
LPCTSTR lpszField,
LPCTSTR lpszForeignField);
void CreateRelation(CDaoRelationInfo& relinfo);
lpszName
Unikatowa nazwa obiektu relacji. Nazwa musi zaczynać się literą i może zawierać maksymalnie 40 znaków. Może zawierać liczby i znaki podkreślenia, ale nie może zawierać znaków interpunkcyjnych ani spacji.
lpszTable
Nazwa tabeli podstawowej w relacji. Jeśli tabela nie istnieje, MFC zgłasza wyjątek typu CDaoException.
lpszForeignTable
Nazwa tabeli obcej w relacji. Jeśli tabela nie istnieje, MFC zgłasza wyjątek typu CDaoException
.
lAttributes
Długa wartość zawierająca informacje o typie relacji. Możesz użyć tej wartości, aby wymusić między innymi integralność referencyjną. Możesz użyć operatora bitowego OR (|
), aby połączyć dowolną z następujących wartości (o ile kombinacja ma sens):
dbRelationUnique
Relacja to jeden do jednego.dbRelationDontEnforce
Relacja nie jest wymuszana (brak więzów integralności).dbRelationInherited
Relacja istnieje w niebieżnej bazie danych, która zawiera dwie dołączone tabele.dbRelationUpdateCascade
Aktualizacje będą kaskadowe (aby uzyskać więcej informacji na temat kaskad, zobacz Uwagi).dbRelationDeleteCascade
Usunięcia będą kaskadowe.
lpszField
Wskaźnik do ciągu zakończonego wartości null zawierającego nazwę pola w tabeli podstawowej (o nazwie lpszTable).
lpszForeignField
Wskaźnik do ciągu zakończonego wartością null zawierającego nazwę pola w tabeli obcej (o nazwie lpszForeignTable).
relinfo
Odwołanie do obiektu CDaoRelationInfo zawierającego informacje o relacji, którą chcesz utworzyć.
Relacja nie może obejmować zapytania ani dołączonej tabeli z zewnętrznej bazy danych.
Użyj pierwszej wersji funkcji, gdy relacja obejmuje jedno pole w każdej z dwóch tabel. Użyj drugiej wersji, gdy relacja obejmuje wiele pól. Maksymalna liczba pól w relacji wynosi 14.
Ta akcja powoduje utworzenie bazowego obiektu relacyjnego DAO, ale jest to szczegóły implementacji MFC, ponieważ hermetyzacja obiektów relacyjnych MFC jest zawarta w klasie CDaoDatabase
. MFC nie dostarcza klasy dla relacji.
Jeśli ustawisz atrybuty obiektu relacji w celu aktywowania operacji kaskadowych, aparat bazy danych automatycznie aktualizuje lub usuwa rekordy w co najmniej jednej innej tabeli po wprowadzeniu zmian w powiązanych tabelach kluczy podstawowych.
Załóżmy na przykład, że ustanowić kaskadową relację usuwania między tabelą Customers i tabelą Orders. Po usunięciu rekordów z tabeli Customers rekordy w tabeli Orders (Zamówienia) powiązane z tym klientem również zostaną usunięte. Ponadto w przypadku ustanowienia kaskadowych relacji usuwania między tabelą Orders i innymi tabelami rekordy z tych tabel są automatycznie usuwane po usunięciu rekordów z tabeli Customers.
Aby uzyskać powiązane informacje, zobacz temat "CreateRelation Method" (Metoda CreateRelation) w pomocy dao.
Wywołaj tę funkcję składową, aby usunąć określoną definicję zapytania — zapisaną kwerendę — z CDaoDatabase
kolekcji QueryDefs obiektu.
void DeleteQueryDef(LPCTSTR lpszName);
lpszName
Nazwa zapisanego zapytania do usunięcia.
Następnie to zapytanie nie jest już zdefiniowane w bazie danych.
Aby uzyskać informacje na temat tworzenia obiektów querydef, zobacz klasa CDaoQueryDef. Obiekt querydef staje się skojarzony z określonym CDaoDatabase
obiektem podczas konstruowania CDaoQueryDef
obiektu, przekazując go wskaźnik do obiektu bazy danych.
Wywołaj tę funkcję składową, aby usunąć istniejącą relację z kolekcji Relacje obiektu bazy danych.
void DeleteRelation(LPCTSTR lpszName);
lpszName
Nazwa relacji do usunięcia.
Następnie relacja już nie istnieje.
Aby uzyskać powiązane informacje, zobacz temat "Delete Method" (Usuwanie metody) w pomocy dao.
Wywołaj tę funkcję składową, aby usunąć określoną tabelę i wszystkie jej dane z CDaoDatabase
kolekcji TableDefs obiektu.
void DeleteTableDef(LPCTSTR lpszName);
lpszName
Nazwa tabelidef do usunięcia.
Następnie ta tabela nie jest już zdefiniowana w bazie danych.
Uwaga
Należy zachować ostrożność, aby nie usuwać tabel systemowych.
Aby uzyskać informacje na temat tworzenia obiektów tabledef, zobacz klasa CDaoTableDef. Obiekt tabledef staje się skojarzony z określonym CDaoDatabase
obiektem podczas konstruowania CDaoTableDef
obiektu, przekazując go wskaźnik do obiektu bazy danych.
Aby uzyskać powiązane informacje, zobacz temat "Delete Method" (Usuwanie metody) w pomocy dao.
Wywołaj tę funkcję składową, aby uruchomić zapytanie akcji lub wykonać instrukcję SQL w bazie danych.
void Execute(
LPCTSTR lpszSQL,
int nOptions = dbFailOnError);
lpszSQL
Wskaźnik do ciągu zakończonego wartości null zawierającego prawidłowe polecenie SQL do wykonania.
nOpcje
Liczba całkowita określająca opcje dotyczące integralności zapytania. Możesz użyć operatora bitowego OR (|
), aby połączyć dowolną z poniższych stałych, pod warunkiem, że kombinacja ma sens. Na przykład nie można połączyć dbInconsistent
z poleceniem dbConsistent
:
dbDenyWrite
Odmów uprawnień do zapisu innym użytkownikom.dbInconsistent
(Ustawienie domyślne) Niespójne aktualizacje.dbConsistent
Spójne aktualizacje.dbSQLPassThrough
Przekazywanie sql. Powoduje przekazanie instrukcji SQL do źródła danych ODBC na potrzeby przetwarzania.dbFailOnError
Wycofaj aktualizacje, jeśli wystąpi błąd.dbSeeChanges
Wygeneruj błąd czasu wykonywania, jeśli inny użytkownik zmienia edytowane dane.
Uwaga
Jeśli oba dbInconsistent
elementy i dbConsistent
są dołączone lub jeśli żadna z nich nie jest dołączona, wynik jest domyślny. Aby uzyskać wyjaśnienie tych stałych, zobacz temat "Execute Method" (Metoda wykonywania) w pomocy dao.
Execute
Działa tylko w przypadku zapytań akcji lub zapytań przekazywania SQL, które nie zwracają wyników. Nie działa w przypadku wybranych zapytań, które zwracają rekordy.
Aby uzyskać definicję i informacje o zapytaniach dotyczących akcji, zobacz tematy "Zapytanie akcji" i "Execute Method" w Pomocy dao.
Porada
Biorąc pod uwagę poprawną składniowo instrukcję SQL i odpowiednie uprawnienia, Execute
funkcja składowa nie powiedzie się, nawet jeśli nie można zmodyfikować ani usunąć pojedynczego wiersza. W związku z tym należy zawsze używać dbFailOnError
opcji podczas używania funkcji składowej Execute
do uruchamiania kwerendy aktualizacji lub usuwania. Ta opcja powoduje, że MFC zgłosi wyjątek typu CDaoException i wycofa wszystkie pomyślne zmiany, jeśli którykolwiek z rekordów, których dotyczy problem, jest zablokowany i nie można go zaktualizować ani usunąć. Należy pamiętać, że zawsze można wywołać metodę GetRecordsAffected
, aby zobaczyć liczbę rekordów, których dotyczy problem.
Wywołaj funkcję składową GetRecordsAffected obiektu bazy danych, aby określić liczbę rekordów, na które ma wpływ ostatnie Execute
wywołanie. Na przykład GetRecordsAffected
zwraca informacje o liczbie rekordów usuniętych, zaktualizowanych lub wstawionych podczas wykonywania zapytania akcji. Zwrócona liczba nie odzwierciedla zmian w powiązanych tabelach, gdy obowiązują kaskadowe aktualizacje lub usunięcia.
Execute
nie zwraca zestawu rekordów. Użycie Execute
w zapytaniu, które wybiera rekordy powoduje, że MFC zgłasza wyjątek typu CDaoException
. (Nie ma ExecuteSQL
funkcji składowej analogicznej do CDatabase::ExecuteSQL
.)
Wywołaj tę funkcję składową, aby pobrać parametry połączenia używane do łączenia obiektu z CDaoDatabase
bazą danych ODBC lub ISAM.
CString GetConnect();
Parametry połączenia, jeśli funkcja Otwórz została pomyślnie wywołana w źródle danych ODBC; w przeciwnym razie pusty ciąg. W przypadku rozwiązania Microsoft Jet (. Baza danych MDB, ciąg jest zawsze pusty, chyba że został ustawiony do użycia z dbSQLPassThrough
opcją używaną z funkcją Execute elementu członkowskiego lub używanym podczas otwierania zestawu rekordów.
Ciąg zawiera informacje o źródle otwartej bazy danych lub bazy danych używanej w zapytaniu przekazywanym. Parametry połączenia składa się z specyfikatora typu bazy danych i zero lub więcej parametrów oddzielonych średnikami.
Uwaga
Używanie klas MFC DAO do nawiązywania połączenia ze źródłem danych za pośrednictwem ODBC jest mniej wydajne niż nawiązywanie połączenia za pośrednictwem dołączonej tabeli.
Uwaga
Parametry połączenia służy do przekazywania dodatkowych informacji do ODBC i niektórych sterowników ISAM zgodnie z potrzebami. Nie jest on używany dla elementu . Bazy danych MDB. W przypadku tabel bazowych bazy danych microsoft Jet parametry połączenia jest pustym ciągiem (""), z wyjątkiem sytuacji, gdy używasz jej dla zapytania przekazywanego SQL zgodnie z opisem w sekcji Wartość zwracana powyżej.
Aby uzyskać opis sposobu tworzenia parametry połączenia, zobacz funkcję Open member. Po ustawieniu parametry połączenia w wywołaniu Open
możesz później użyć go do sprawdzenia ustawienia w celu określenia typu, ścieżki, identyfikatora użytkownika, hasła lub źródła danych ODBC bazy danych.
Wywołaj tę funkcję składową, aby pobrać nazwę aktualnie otwartej bazy danych, czyli nazwę istniejącego pliku bazy danych lub nazwę zarejestrowanego źródła danych ODBC.
CString GetName();
Pełna ścieżka i nazwa pliku bazy danych, jeśli się powiedzie; w przeciwnym razie pusty ciąg CString.
Jeśli sieć obsługuje jednolitą konwencję nazewnictwa (UNC), możesz również określić ścieżkę sieciową — na przykład "\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB. MDB". (Podwójne ukośniki odwrotne są wymagane w literałach ciągów, ponieważ "\" jest znakiem ucieczki języka C++).
Możesz na przykład wyświetlić tę nazwę w nagłówku. Jeśli podczas pobierania nazwy wystąpi błąd, MFC zgłasza wyjątek typu CDaoException.
Uwaga
Aby uzyskać lepszą wydajność w przypadku uzyskiwania dostępu do zewnętrznych baz danych, zalecamy dołączenie zewnętrznych tabel baz danych do bazy danych Microsoft Jet (. MDB) zamiast łączyć się bezpośrednio ze źródłem danych.
Typ bazy danych jest wskazywany przez plik lub katalog wskazujący ścieżkę w następujący sposób:
Nazwa ścieżki wskazuje wartość .. | Typ bazy danych |
---|---|
. Plik MDB | Baza danych Microsoft Jet (Microsoft Access) |
Katalog zawierający . Pliki DBF | Baza danych dBASE |
Katalog zawierający plik .XLS | Baza danych programu Microsoft Excel |
Katalog zawierający . Pliki PDX | Baza danych Programu Paradox |
Katalog zawierający odpowiednio sformatowane pliki bazy danych tekstowych | Baza danych formatu tekstu |
W przypadku baz danych ODBC, takich jak SQL Server i Oracle, parametry połączenia bazy danych identyfikuje nazwę źródła danych (DSN) zarejestrowaną przez ODBC.
Wywołaj tę funkcję składową, aby pobrać liczbę zapytań zdefiniowanych w kolekcji QueryDefs bazy danych.
short GetQueryDefCount();
Liczba zapytań zdefiniowanych w bazie danych.
GetQueryDefCount
jest przydatna, jeśli musisz przeprowadzić pętlę przez wszystkie definicje zapytań w kolekcji QueryDefs. Aby uzyskać informacje o danym zapytaniu w kolekcji, zobacz GetQueryDefInfo.
Wywołaj tę funkcję składową, aby uzyskać różne rodzaje informacji o zapytaniu zdefiniowanym w bazie danych.
void GetQueryDefInfo(
int nIndex,
CDaoQueryDefInfo& querydefinfo,
DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
void GetQueryDefInfo(
LPCTSTR lpszName,
CDaoQueryDefInfo& querydefinfo,
DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
nIndex
Indeks wstępnie zdefiniowanego zapytania w kolekcji QueryDefs bazy danych dla wyszukiwania według indeksu.
querydefinfo
Odwołanie do obiektu CDaoQueryDefInfo zwracającego żądane informacje.
dwInfoOptions
Opcje określające, które informacje o zestawie rekordów mają być pobierane. Dostępne opcje są wymienione tutaj wraz z tym, co powodują, że funkcja zwraca informacje o zestawie rekordów:
AFX_DAO_PRIMARY_INFO (domyślna) nazwa, typ
AFX_DAO_SECONDARY_INFO podstawowe informacje oraz: Data utworzenia, data ostatniej aktualizacji, zwraca rekordy, możliwe do zaktualizowania
AFX_DAO_ALL_INFO podstawowe i pomocnicze informacje oraz: SQL, Connect, ODBCTimeout
lpszName
Ciąg zawierający nazwę zapytania zdefiniowanego w bazie danych dla wyszukiwania według nazwy.
Podano dwie wersje funkcji, aby można było wybrać zapytanie według indeksu w kolekcji QueryDefs bazy danych lub według nazwy zapytania.
Aby uzyskać opis informacji zwracanych w zapytaniudefinfo, zobacz strukturę CDaoQueryDefInfo . Ta struktura zawiera elementy członkowskie, które odpowiadają elementom informacji wymienionych powyżej w opisie dwInfoOptions. Jeśli zażądasz jednego poziomu informacji, uzyskasz również wszelkie wcześniejsze poziomy informacji.
Wywołaj tę funkcję składową, aby pobrać bieżącą liczbę sekund, które mają być dozwolone przed przekroczeniem limitu czasu kolejnych operacji w połączonej bazie danych.
short GetQueryTimeout();
Krótka liczba całkowita zawierająca wartość limitu czasu w sekundach.
Operacja może upłynął limit czasu z powodu problemów z dostępem do sieci, nadmiernego czasu przetwarzania zapytań itd. Ustawienie ma wpływ na wszystkie otwarte, dodaj nowe, aktualizujące i usuwające operacje na wszystkich zestawach rekordów skojarzonych z tym CDaoDatabase
obiektem. Bieżące ustawienie limitu czasu można zmienić, wywołując funkcję SetQueryTimeout. Zmiana wartości limitu czasu zapytania dla zestawu rekordów po otwarciu nie zmienia wartości zestawu rekordów. Na przykład kolejne operacje przenoszenia nie używają nowej wartości. Wartość domyślna jest początkowo ustawiana podczas inicjowania aparatu bazy danych.
Wartość domyślna limitu czasu zapytania jest pobierana z rejestru systemu Windows. Jeśli nie ma ustawienia rejestru, wartość domyślna to 60 sekund. Nie wszystkie bazy danych obsługują możliwość ustawiania wartości limitu czasu zapytania. Jeśli ustawisz wartość limitu czasu zapytania 0, nie wystąpi limit czasu; i komunikacja z bazą danych może przestać odpowiadać. To zachowanie może być przydatne podczas programowania. Jeśli wywołanie nie powiedzie się, MFC zgłasza wyjątek typu CDaoException.
Aby uzyskać powiązane informacje, zobacz temat "QueryTimeout Property" (Właściwość QueryTimeout) w pomocy dao.
Wywołaj tę funkcję składową, aby określić liczbę rekordów, których dotyczy najnowsze wywołanie funkcji elementu członkowskiego Execute .
long GetRecordsAffected();
Długa liczba całkowita zawierająca liczbę rekordów, których dotyczy problem.
Zwrócona wartość zawiera liczbę rekordów usuniętych, zaktualizowanych lub wstawionych przez uruchomienie zapytania akcji za pomocą polecenia Execute
. Zwrócona liczba nie odzwierciedla zmian w powiązanych tabelach, gdy obowiązują kaskadowe aktualizacje lub usunięcia.
Aby uzyskać powiązane informacje, zobacz temat "RecordsAffected Property" (Właściwość, której dotyczy problem) w pomocy dao.
Wywołaj tę funkcję składową, aby uzyskać liczbę relacji zdefiniowanych między tabelami w bazie danych.
short GetRelationCount();
Liczba relacji zdefiniowanych między tabelami w bazie danych.
GetRelationCount
jest przydatna, jeśli musisz przeprowadzić pętlę przez wszystkie zdefiniowane relacje w kolekcji Relacje bazy danych. Aby uzyskać informacje o danej relacji w kolekcji, zobacz GetRelationInfo.
Aby zilustrować koncepcję relacji, rozważ tabelę Dostawcy i tabelę Products, która może mieć relację jeden do wielu. W związku z tym jeden dostawca może dostarczyć więcej niż jeden produkt. Inne stosunki to jeden do jednego i wiele do wielu.
Wywołaj tę funkcję składową, aby uzyskać informacje o określonej relacji w kolekcji Relacje bazy danych.
void GetRelationInfo(
int nIndex,
CDaoRelationInfo& relinfo,
DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
void GetRelationInfo(
LPCTSTR lpszName,
CDaoRelationInfo& relinfo,
DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
nIndex
Indeks obiektu relacji w kolekcji Relacje bazy danych dla wyszukiwania według indeksu.
relinfo
Odwołanie do obiektu CDaoRelationInfo zwracającego żądane informacje.
dwInfoOptions
Opcje określające, które informacje o relacji mają być pobierane. Dostępne opcje są wymienione tutaj wraz z tym, co powodują, że funkcja zwróci relację:
AFX_DAO_PRIMARY_INFO (domyślna) nazwa, tabela, tabela obca
atrybuty AFX_DAO_SECONDARY_INFO, informacje o polu
Informacje o polu to obiekt CDaoRelationFieldInfo zawierający pola z tabeli podstawowej zaangażowanej w relację.
lpszName
Ciąg zawierający nazwę obiektu relacji dla wyszukiwania według nazwy.
Dwie wersje tej funkcji zapewniają dostęp według indeksu lub nazwy. Aby uzyskać opis informacji zwróconych w relinfo, zobacz strukturę CDaoRelationInfo . Ta struktura zawiera elementy członkowskie, które odpowiadają elementom informacji wymienionych powyżej w opisie dwInfoOptions. Jeśli zażądasz informacji na jednym poziomie, uzyskasz również informacje na wszystkich poprzednich poziomach.
Uwaga
Jeśli ustawisz atrybuty obiektu relacji, aby aktywować operacje kaskadowe (dbRelationUpdateCascades
lub dbRelationDeleteCascades
), aparat bazy danych Microsoft Jet automatycznie aktualizuje lub usuwa rekordy w co najmniej jednej innej tabeli po wprowadzeniu zmian w powiązanych tabelach kluczy podstawowych. Załóżmy na przykład, że ustanowić kaskadową relację usuwania między tabelą Customers i tabelą Orders. Po usunięciu rekordów z tabeli Customers rekordy w tabeli Orders (Zamówienia) powiązane z tym klientem również zostaną usunięte. Ponadto w przypadku ustanowienia kaskadowych relacji usuwania między tabelą Orders i innymi tabelami rekordy z tych tabel są automatycznie usuwane po usunięciu rekordów z tabeli Customers.
Wywołaj tę funkcję składową, aby pobrać liczbę tabel zdefiniowanych w bazie danych.
short GetTableDefCount();
Liczba definicji tabel zdefiniowanych w bazie danych.
GetTableDefCount
jest przydatne, jeśli musisz przeprowadzić pętlę przez wszystkie definicje tabel w kolekcji TableDefs bazy danych. Aby uzyskać informacje o danej tabeli w kolekcji, zobacz GetTableDefInfo.
Wywołaj tę funkcję składową, aby uzyskać różne rodzaje informacji o tabeli zdefiniowanej w bazie danych.
void GetTableDefInfo(
int nIndex,
CDaoTableDefInfo& tabledefinfo,
DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
void GetTableDefInfo(
LPCTSTR lpszName,
CDaoTableDefInfo& tabledefinfo,
DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
nIndex
Indeks obiektu tabledef w kolekcji TableDefs bazy danych dla wyszukiwania według indeksu.
tabledefinfo
Odwołanie do obiektu CDaoTableDefInfo zwracającego żądane informacje.
dwInfoOptions
Opcje określające, które informacje o tabeli mają być pobierane. Dostępne opcje są wymienione tutaj wraz z tym, co powodują, że funkcja zwróci relację:
AFX_DAO_PRIMARY_INFO (domyślna) nazwa, możliwe do zaktualizowania, atrybuty
AFX_DAO_SECONDARY_INFO podstawowe informacje oraz: Data utworzenia, Data ostatniej aktualizacji, Nazwa tabeli źródłowej, Połącz
AFX_DAO_ALL_INFO podstawowe i pomocnicze informacje oraz: Reguła walidacji, Tekst weryfikacji, Liczba rekordów
lpszName
Nazwa obiektu tabledef dla wyszukiwania według nazwy.
Podano dwie wersje funkcji, aby można było wybrać tabelę według indeksu w kolekcji TableDefs bazy danych lub według nazwy tabeli.
Aby uzyskać opis informacji zwracanych w tabelidefinfo, zobacz strukturę CDaoTableDefInfo . Ta struktura zawiera elementy członkowskie, które odpowiadają elementom informacji wymienionych powyżej w opisie dwInfoOptions. Jeśli żądasz informacji na jednym poziomie, uzyskasz również informacje dotyczące wszystkich poprzednich poziomów.
Uwaga
Opcja AFX_DAO_ALL_INFO zawiera informacje, które mogą być powolne do uzyskania. W takim przypadku zliczanie rekordów w tabeli może być bardzo czasochłonne, jeśli istnieje wiele rekordów.
Wywołaj tę funkcję składową, aby określić wersję pliku bazy danych Microsoft Jet.
CString GetVersion();
CString wskazujący wersję pliku bazy danych skojarzonego z obiektem.
Zwrócona wartość reprezentuje numer wersji w postaci "główna.pomocnicza"; na przykład "3.0". Numer wersji produktu (na przykład 3.0) składa się z numeru wersji (3), okresu i numeru wydania (0). Wersje do tej pory to 1.0, 1.1, 2.0 i 3.0.
Aby uzyskać powiązane informacje, zobacz temat "Właściwość wersji" w Pomocy dao.
Wywołaj tę funkcję składową, aby określić, czy CDaoDatabase
obiekt jest obecnie otwarty w bazie danych.
BOOL IsOpen() const;
Niezero, jeśli CDaoDatabase
obiekt jest obecnie otwarty; w przeciwnym razie 0.
Zawiera wskaźnik do interfejsu OLE dla obiektu bazy danych DAO bazowego CDaoDatabase
obiektu.
Użyj tego wskaźnika, jeśli chcesz uzyskać bezpośredni dostęp do interfejsu DAO.
Aby uzyskać informacje dotyczące bezpośredniego wywoływania obiektu DAO, zobacz Technical Note 54 (Uwaga techniczna 54).
Zawiera wskaźnik do obiektu CDaoWorkspace zawierającego obiekt bazy danych.
Użyj tego wskaźnika, jeśli chcesz uzyskać bezpośredni dostęp do obszaru roboczego. Aby na przykład uzyskać wskaźniki do innych obiektów bazy danych w kolekcji Bazy danych obszaru roboczego.
Należy wywołać tę funkcję składową, aby zainicjować nowo skonstruowany CDaoDatabase
obiekt reprezentujący istniejącą bazę danych.
virtual void Open(
LPCTSTR lpszName,
BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE,
LPCTSTR lpszConnect = _T(""));
lpszName
Wyrażenie ciągu, które jest nazwą istniejącego środowiska Microsoft Jet (. Plik bazy danych MDB. Jeśli nazwa pliku ma rozszerzenie, jest wymagane. Jeśli sieć obsługuje jednolitą konwencję nazewnictwa (UNC), możesz również określić ścieżkę sieciową, taką jak "\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB. MDB". (Podwójne ukośniki odwrotne są wymagane w literałach ciągów, ponieważ "\" jest znakiem ucieczki języka C++).
Niektóre zagadnienia mają zastosowanie podczas korzystania z lpszName. Jeśli:
Odwołuje się do bazy danych, która jest już otwarta w celu uzyskania wyłącznego dostępu przez innego użytkownika, MFC zgłasza wyjątek typu CDaoException. Pułapka tego wyjątku, aby poinformować użytkownika, że baza danych jest niedostępna.
Jest pustym ciągiem ("") i lpszConnect jest "ODBC;", zostanie wyświetlone okno dialogowe z listą wszystkich zarejestrowanych nazw źródeł danych ODBC, aby użytkownik mógł wybrać bazę danych. Należy unikać bezpośrednich połączeń ze źródłami danych ODBC; zamiast tego należy użyć dołączonej tabeli.
W przeciwnym razie nie odwołuje się do istniejącej bazy danych ani prawidłowej nazwy źródła danych ODBC, MFC zgłasza wyjątek typu
CDaoException
.
Uwaga
Aby uzyskać szczegółowe informacje na temat kodów błędów DAOO, zobacz DAOERR. Plik H. Aby uzyskać powiązane informacje, zobacz temat "Trappable Data Access Errors" (Błędy dostępu do danych uwięzionych) w pomocy dao.
bExclusive
Wartość logiczna, która ma mieć wartość TRUE, jeśli baza danych ma zostać otwarta w celu uzyskania wyłącznego dostępu (nieudostępnego) i FALSE, jeśli baza danych ma zostać otwarta na potrzeby dostępu współdzielonego. Jeśli pominiesz ten argument, baza danych zostanie otwarta na potrzeby dostępu współdzielonego.
bReadOnly
Wartość logiczna, która ma mieć wartość TRUE, jeśli baza danych ma zostać otwarta na potrzeby dostępu tylko do odczytu i wartość FALSE, jeśli baza danych ma zostać otwarta na potrzeby dostępu do odczytu/zapisu. Jeśli pominiesz ten argument, baza danych zostanie otwarta na potrzeby dostępu do odczytu/zapisu. Wszystkie zależne zestawy rekordów dziedziczą ten atrybut.
lpszConnect
Wyrażenie ciągu używane do otwierania bazy danych. Ten ciąg stanowi argumenty połączenia ODBC. Aby podać ciąg źródłowy, należy podać wyłącznie i tylko do odczytu argumenty. Jeśli baza danych jest bazą danych Microsoft Jet (. MDB), ten ciąg jest pusty (""). Składnia wartości domyślnej — _T("") — zapewnia przenośność dla formatu Unicode, a także kompilacje ANSI aplikacji.
Open
kojarzy bazę danych z bazowym obiektem DAO. Nie można użyć obiektu bazy danych do konstruowania obiektów recordset, tabledef lub querydef, dopóki nie zostanie zainicjowany. Open
Dołącza obiekt bazy danych do kolekcji Databases skojarzonego obszaru roboczego.
Użyj parametrów w następujący sposób:
Jeśli otwierasz pakiet Microsoft Jet (. Baza danych MDB, użyj parametru lpszName i przekaż pusty ciąg dla parametru lpszConnect lub przekaż ciąg hasła formularza "; PWD=password", jeśli baza danych jest chroniona hasłem (. Tylko bazy danych MDB).
Jeśli otwierasz źródło danych ODBC, przekaż prawidłową parametry połączenia ODBC w lpszConnect i pusty ciąg w lpszName.
Aby uzyskać powiązane informacje, zobacz temat "OpenDatabase Method" (Metoda OpenDatabase) w pomocy dao.
Uwaga
Aby uzyskać lepszą wydajność podczas uzyskiwania dostępu do zewnętrznych baz danych, w tym baz danych ISAM i źródeł danych ODBC, zaleca się dołączenie zewnętrznych tabel baz danych do bazy danych aparatu Microsoft Jet (). MDB) zamiast łączyć się bezpośrednio ze źródłem danych.
Istnieje możliwość przekroczenia limitu czasu połączenia, jeśli na przykład host DBMS jest niedostępny. Jeśli próba połączenia nie powiedzie się, Open
zgłasza wyjątek typu CDaoException.
Pozostałe uwagi dotyczą tylko baz danych ODBC:
Jeśli baza danych jest bazą danych ODBC, a parametry w wywołaniu Open
nie zawierają wystarczającej ilości informacji, aby nawiązać połączenie, sterownik ODBC otwiera okno dialogowe w celu uzyskania niezbędnych informacji od użytkownika. Podczas wywoływania Open
metody parametry połączenia, lpszConnect, jest przechowywany prywatnie i jest dostępny przez wywołanie funkcji elementu członkowskiego GetConnect.
Jeśli chcesz, możesz otworzyć własne okno dialogowe przed wywołaniemOpen
, aby uzyskać informacje od użytkownika, takie jak hasło, a następnie dodać te informacje do parametry połączenia przekazać do Open
. Możesz też zapisać parametry połączenia przekazać (być może w rejestrze systemu Windows), aby można było ponownie użyć go przy następnym wywołaniu Open
aplikacji na CDaoDatabase
obiekcie.
Można również użyć parametry połączenia dla wielu poziomów autoryzacji logowania (każdy dla innego CDaoDatabase
obiektu) lub przekazać inne informacje specyficzne dla bazy danych.
Wywołaj tę funkcję składową, aby zastąpić domyślną liczbę sekund, która ma być dozwolona przed upływem limitu czasu kolejnych operacji w połączonej bazie danych.
void SetQueryTimeout(short nSeconds);
nSeconds
Liczba sekund, na które należy zezwolić przed upływem limitu czasu próby zapytania.
Operacja może upłynął limit czasu z powodu problemów z dostępem do sieci, nadmiernego czasu przetwarzania zapytań itd. Przed SetQueryTimeout
otwarciem zestawu rekordów lub przed wywołaniem funkcji AddNew, Update lub Delete zestawu rekordów należy wywołać, jeśli chcesz zmienić wartość limitu czasu zapytania. To ustawienie ma wpływ na wszystkie kolejne wywołania open, AddNew
, Update
i Delete
do wszystkich zestawów rekordów skojarzonych z tym CDaoDatabase
obiektem. Zmiana wartości limitu czasu zapytania dla zestawu rekordów po otwarciu nie zmienia wartości zestawu rekordów. Na przykład kolejne operacje przenoszenia nie używają nowej wartości.
Wartość domyślna limitów czasu zapytania to 60 sekund. Nie wszystkie bazy danych obsługują możliwość ustawiania wartości limitu czasu zapytania. Jeśli ustawisz wartość limitu czasu zapytania 0, nie wystąpi limit czasu; komunikacja z bazą danych może przestać odpowiadać. To zachowanie może być przydatne podczas programowania.
Aby uzyskać powiązane informacje, zobacz temat "QueryTimeout Property" (Właściwość QueryTimeout) w pomocy dao.
Klasa CObject
Wykres hierarchii
Klasa CDaoWorkspace
Klasa CDaoRecordset
Klasa CDaoTableDef
Klasa CDaoQueryDef
Klasa CDatabase
Klasa CDaoException