CDaoDatabase 類別
表示使用資料存取物件 (DAO) 連接到 Access 資料庫。
注意
透過 Office 2013 支援資料存取物件 (DAO)。 DAO 3.6 是最終版本,而且已經過時。
語法
class CDaoDatabase : public CObject
成員
公用建構函式
名稱 | 描述 |
---|---|
CDaoDatabase::CDaoDatabase | 建構 CDaoDatabase 物件。 呼叫 Open 以將物件連接到資料庫。 |
公用方法
名稱 | 描述 |
---|---|
CDaoDatabase::CanTransact | 如果資料庫支援交易,則傳回非零。 |
CDaoDatabase::CanUpdate | 如果對像是可更新的 CDaoDatabase ,則傳回非零值(不是只讀的)。 |
CDaoDatabase::Close | 關閉資料庫連接。 |
CDaoDatabase::Create | 建立基礎 DAO 資料庫物件,並初始化 CDaoDatabase 物件。 |
CDaoDatabase::CreateRelation | 定義資料庫中數據表之間的新關聯性。 |
CDaoDatabase::D eleteQueryDef | 刪除儲存在資料庫的QueryDefs集合中的querydef物件。 |
CDaoDatabase::D eleteRelation | 刪除資料庫中數據表之間的現有關聯性。 |
CDaoDatabase::D eleteTableDef | 刪除資料庫中數據表的定義。 這會刪除實際數據表及其所有數據。 |
CDaoDatabase::Execute | 執行動作查詢。 呼叫 Execute 傳回結果的查詢會擲回例外狀況。 |
CDaoDatabase::GetConnect | 傳回用來將 物件連接到CDaoDatabase 資料庫的 連接字串。 用於 ODBC。 |
CDaoDatabase::GetName | 傳回目前使用中的資料庫名稱。 |
CDaoDatabase::GetQueryDefCount | 傳回為資料庫定義的查詢數目。 |
CDaoDatabase::GetQueryDefInfo | 傳回資料庫中所定義之指定查詢的相關信息。 |
CDaoDatabase::GetQueryTimeout | 傳回資料庫查詢作業逾時后的秒數。影響 ODBC 數據源上所有後續開啟、新增、更新和編輯作業和其他作業,例如 Execute 呼叫。 |
CDaoDatabase::GetRecordsAffected | 傳回受上次更新、編輯或新增作業或呼叫 Execute 所影響之記錄數目。 |
CDaoDatabase::GetRelationCount | 傳回資料庫中數據表之間定義的關聯數目。 |
CDaoDatabase::GetRelationInfo | 傳回資料庫中數據表之間所定義之指定關聯性的相關信息。 |
CDaoDatabase::GetTableDefCount | 傳回資料庫中定義的數據表數目。 |
CDaoDatabase::GetTableDefInfo | 傳回資料庫中指定數據表的相關信息。 |
CDaoDatabase::GetVersion | 傳回與資料庫相關聯的資料庫引擎版本。 |
CDaoDatabase::IsOpen | 如果物件目前連接到資料庫, CDaoDatabase 則傳回非零。 |
CDaoDatabase::Open | 建立資料庫的連線。 |
CDaoDatabase::SetQueryTimeout | 設定資料庫查詢作業(僅限 ODBC 數據源上)逾時的秒數。影響所有後續開啟、新增、更新和刪除作業。 |
公用資料成員
名稱 | 描述 |
---|---|
CDaoDatabase::m_pDAODatabase | 基礎 DAO 資料庫物件的指標。 |
CDaoDatabase::m_pWorkspace | 包含資料庫的 CDaoWorkspace 物件的指標,並定義其交易空間。 |
備註
如需支援之資料庫格式的資訊,請參閱 GetName 成員函式。 您可以在指定的「工作區」中一次有一或多個 CDaoDatabase
使用中的物件,由 CDaoWorkspace 物件表示。 工作區會維護開放式資料庫物件的集合,稱為Databases集合。
使用方式
當您建立記錄集物件時,您可以隱含建立資料庫物件。 但您也可以明確地建立資料庫物件。 若要明確地搭配 CDaoDatabase
使用現有的資料庫,請執行下列任一動作:
CDaoDatabase
建構 物件,將指標傳遞至開啟的 CDaoWorkspace 物件。或建構
CDaoDatabase
物件而不指定工作區 (MFC 會建立暫存工作區物件)。
若要建立新的 Microsoft Jet (.MDB) 資料庫、建構 CDaoDatabase
物件並呼叫其 Create 成員函式。 請勿在 之後Create
呼叫 Open
。
若要開啟現有的資料庫,請建構 CDaoDatabase
物件並呼叫其 Open 成員函式。
上述任何技術會將 DAO 資料庫物件附加至工作區的 Databases 集合,並開啟數據的連接。 當您接著建構 CDaoRecordset、CDaoTableDef 或 CDaoQueryDef 物件以在連線的資料庫上操作時,請將這些物件的建構函式傳遞至物件的CDaoDatabase
指標。 當您完成連接時,請呼叫 Close 成員函式並終結 CDaoDatabase
物件。 Close
關閉您尚未關閉的任何記錄集。
交易
資料庫事務處理是在工作區層級提供,請參閱 類別CDaoWorkspace
的 BeginTrans、CommitTrans 和 Rollback 成員函式。
ODBC 連接
使用 Open Database Base Connectivity (ODBC) 數據源的建議方式是將外部數據表附加至 Microsoft Jet (.MDB
) 資料庫。
集合
每個資料庫都會維護自己的 tabledef、querydef、recordset 和 relation 物件集合。 類別 CDaoDatabase
提供用來操作這些對象的成員函式。
注意
物件會儲存在 DAO 中,而不是儲存在 MFC 資料庫物件中。 MFC 會提供 tabledef、querydef 和 recordset 對象的類別,但不適用於關聯物件。
繼承階層架構
CDaoDatabase
需求
標頭: afxdao.h
CDaoDatabase::CanTransact
呼叫這個成員函式,以判斷資料庫是否允許交易。
BOOL CanTransact();
傳回值
如果資料庫支援交易,則為非零;否則為 0。
備註
交易是在資料庫的工作區中管理。
CDaoDatabase::CanUpdate
呼叫這個成員函式,以判斷物件是否 CDaoDatabase
允許更新。
BOOL CanUpdate();
傳回值
如果CDaoDatabase
對象允許更新,則為非零;否則為 0,表示當您開啟CDaoDatabase
物件或資料庫本身是只讀時,在 bReadOnly 中傳遞 TRUE。 請參閱 Open 成員函式。
備註
如需資料庫可更新性的相關信息,請參閱 DAO 說明中的「可更新屬性」主題。
CDaoDatabase::CDaoDatabase
建構 CDaoDatabase
物件。
CDaoDatabase(CDaoWorkspace* pWorkspace = NULL);
參數
pWorkspace
將包含新資料庫物件的 物件指標 CDaoWorkspace
。 如果您接受 NULL 的預設值,建構函式會建立使用預設 DAO 工作區的暫存 CDaoWorkspace
物件。 您可以透過 m_pWorkspace 數據成員取得工作區物件的指標。
備註
建構 物件之後,如果您要建立新的 Microsoft Jet (。MDB) 資料庫,呼叫物件的 Create 成員函式。 如果您改為開啟現有的資料庫,請呼叫物件的 Open 成員函式。
當您完成物件時,應該呼叫其 Close 成員函式,然後終結 CDaoDatabase
物件。
您可能會發現在檔案類別中內嵌 CDaoDatabase
物件會很方便。
注意
CDaoDatabase
如果您開啟 CDaoRecordset 物件而不傳遞現有CDaoDatabase
物件的指標,也會隱含建立 物件。 當您關閉 recordset 物件時,這個資料庫物件會關閉。
CDaoDatabase::Close
呼叫此成員函式以中斷與資料庫的連接,並關閉與資料庫相關聯的任何開啟記錄集、tabledefs 和 querydefs。
virtual void Close();
備註
最好先自行關閉這些物件,再呼叫這個成員函式。 CDaoDatabase
關閉物件會將它從相關聯工作區中的 Databases 集合中移除。 因為 Close
不會終結 CDaoDatabase
物件,因此您可以開啟相同的資料庫或不同的資料庫來重複使用物件。
警告
呼叫 Update 成員函式(如果有擱置的編輯),並在Close
關閉資料庫之前,在所有開啟的 recordset 物件上呼叫成員函式。 如果您結束的函式會在堆疊CDaoDatabase
上宣告 CDaoRecordset 或物件,則資料庫會關閉,任何未儲存的變更都會遺失,所有暫止的交易都會回復,而且任何暫止的資料編輯都會遺失。
警告
如果您在開啟任何記錄集物件時嘗試關閉資料庫物件,或嘗試關閉屬於該特定工作區的任何資料庫物件時關閉工作區物件,則會關閉這些記錄集物件,並回復任何擱置的更新或編輯。 如果您嘗試在開啟屬於工作區的任何資料庫物件時關閉工作區物件,此作業會關閉屬於該特定工作區物件的所有資料庫物件,這可能會導致未關閉的 recordset 物件。 如果您未關閉資料庫物件,MFC 會報告偵錯組建中的判斷提示失敗。
如果資料庫物件是在函式範圍之外定義,而且您結束函式而不關閉它,資料庫物件會保持開啟狀態,直到明確關閉或定義所在的模組超出範圍為止。
CDaoDatabase::Create
若要建立新的 Microsoft Jet (.MDB) 資料庫,在建構 CDaoDatabase
對象之後呼叫這個成員函式。
virtual void Create(
LPCTSTR lpszName,
LPCTSTR lpszLocale = dbLangGeneral,
int dwOptions = 0);
參數
lpszName
字串表示式,這是您要建立之資料庫檔案的名稱。 它可以是完整路徑和檔名,例如 「C:\\MYDB。MDB”。 您必須提供名稱。 如果您沒有提供延伸名,則為 。MDB 已附加。 如果您的網路支援統一命名慣例 (UNC),您也可以指定網路路徑,例如 “\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB”。 只有Microsoft Jet (.您可以使用這個成員函式來建立 MDB 資料庫檔案。 (字串常值需要雙反斜杠,因為 “\” 是逸出字元C++。
lpszLocale
字串表示式,用來指定建立資料庫的定序順序。 預設值是 dbLangGeneral
。 可能的值包括:
dbLangGeneral
英文、德文、法文、葡萄牙文、義大利文和現代西班牙文dbLangArabic
阿拉伯文dbLangCyrillic
俄語dbLangCzech
捷克語dbLangDutch
荷蘭語dbLangGreek
希臘語dbLangHebrew
希伯來語dbLangHungarian
匈牙利語dbLangIcelandic
冰島語dbLangNordic
北歐語言 (僅限 Microsoft Jet 資料庫引擎 1.0 版)dbLangNorwdan
挪威文和丹麥文dbLangPolish
波蘭語dbLangSpanish
傳統西班牙文dbLangSwedfin
瑞典文和芬蘭文dbLangTurkish
土耳其文
dwOptions
表示一或多個選項的整數。 可能的值包括:
dbEncrypt
建立加密的資料庫。dbVersion10
建立具有 Microsoft Jet 資料庫 1.0 版的資料庫。dbVersion11
建立具有 Microsoft Jet 資料庫 1.1 版的資料庫。dbVersion20
使用 Microsoft Jet 資料庫 2.0 版建立資料庫。dbVersion30
使用 Microsoft Jet 資料庫 3.0 版建立資料庫。
如果您省略加密常數,則會建立未加密的資料庫。 您只能指定一個版本常數。 如果您省略版本常數,則會建立使用 Microsoft Jet 資料庫 3.0 版的資料庫。
警告
如果資料庫未加密,即使您實作使用者/密碼安全性,也可以直接讀取構成資料庫的二進位磁碟檔案。
備註
Create
會建立資料庫檔案和基礎 DAO 資料庫物件,並初始化C++物件。 物件會附加至相關聯工作區的 Databases 集合。 資料庫物件處於開啟狀態;請勿在 之後Create
呼叫 Open*
。
注意
使用 Create
時,您只能建立 Microsoft Jet (。MDB) 資料庫。 您無法建立ISAM資料庫或 ODBC 資料庫。
CDaoDatabase::CreateRelation
呼叫這個成員函式,以建立資料庫中主數據表中一個或多個字段與外部數據表中一或多個字段之間的關聯性(資料庫中的另一個數據表)。
void CreateRelation(
LPCTSTR lpszName,
LPCTSTR lpszTable,
LPCTSTR lpszForeignTable,
long lAttributes,
LPCTSTR lpszField,
LPCTSTR lpszForeignField);
void CreateRelation(CDaoRelationInfo& relinfo);
參數
lpszName
relation 物件的唯一名稱。 名稱必須以字母開頭,且最多可以包含 40 個字元。 它可以包含數位和底線字元,但不能包含標點符號或空格。
lpszTable
關聯中主要數據表的名稱。 如果數據表不存在,MFC 會擲回 CDaoException 類型的 例外狀況。
lpszForeignTable
關聯性中的外數據表名稱。 如果數據表不存在,MFC 會擲回 類型的例外狀況 CDaoException
。
lAttributes
包含關聯性類型相關信息的長值。 您可以使用此值來強制執行引用完整性,以及其他事項。 您可以使用位 OR 運算子 (|
) 來結合下列任何一個值(只要組合有意義):
dbRelationUnique
關聯性是一對一。dbRelationDontEnforce
不會強制執行關聯性(沒有引用完整性)。dbRelationInherited
關聯性存在於包含兩個附加數據表的非目前資料庫中。dbRelationUpdateCascade
更新會串聯 (如需串聯的詳細資訊,請參閱)。dbRelationDeleteCascade
刪除將會重疊。
lpszField
Null 終止字串的指標,其中包含主數據表中欄位的名稱(由 lpszTable 命名)。
lpszForeignField
以 Null 結尾字串的指標,其中包含外表中欄位的名稱(由 lpszForeignTable 命名)。
relinfo
CDaoRelationInfo 對象的參考,其中包含您要建立之關聯的相關信息。
備註
關聯性不能涉及來自外部資料庫的查詢或附加數據表。
當關聯涉及兩個數據表中的一個字段時,請使用函式的第一個版本。 當關聯涉及多個字段時,請使用第二個版本。 關聯中的欄位數目上限為 14。
此動作會建立基礎 DAO 關聯物件,但這是 MFC 實作詳細數據,因為 MFC 的關聯物件封裝包含在 類別 CDaoDatabase
內。 MFC 不提供關聯性類別。
如果您將關聯物件的屬性設定為啟動串聯作業,資料庫引擎會在對相關主鍵數據表進行變更時,自動更新或刪除一或多個其他數據表中的記錄。
例如,假設您在 Customers 數據表與 Orders 數據表之間建立串聯刪除關聯性。 當您從 Customers 資料表中刪除記錄時,也會刪除與該客戶相關的 Orders 資料表中的記錄。 此外,如果您在 Orders 資料表與其他資料表之間建立串聯刪除關聯性,當您從 Customers 數據表刪除記錄時,會自動刪除這些數據表中的記錄。
如需相關信息,請參閱 DAO 說明中的
CDaoDatabase::D eleteQueryDef
呼叫這個成員函式,從物件的QueryDefs集合中刪除指定的querydef—已儲存的查詢 CDaoDatabase
。
void DeleteQueryDef(LPCTSTR lpszName);
參數
lpszName
要刪除之已儲存查詢的名稱。
備註
之後,該查詢就不會再定義於資料庫中。
如需建立 querydef 對象的相關信息,請參閱 CDaoQueryDef 類別。 當您建構 CDaoQueryDef
物件時,querydef 物件就會與特定CDaoDatabase
對象產生關聯,並將指標傳遞給資料庫物件。
CDaoDatabase::D eleteRelation
呼叫這個成員函式,從資料庫物件的 Relations 集合中刪除現有的關聯。
void DeleteRelation(LPCTSTR lpszName);
參數
lpszName
要刪除之關聯的名稱。
備註
之後,關聯已不存在。
如需相關信息,請參閱 DAO 說明中的「刪除方法」主題。
CDaoDatabase::D eleteTableDef
呼叫這個成員函式,從物件的 TableDefs 集合中刪除指定的數據表及其所有數據 CDaoDatabase
。
void DeleteTableDef(LPCTSTR lpszName);
參數
lpszName
要刪除之 tabledef 的名稱。
備註
之後,該數據表已不再定義於資料庫中。
注意
請非常小心不要刪除系統數據表。
如需建立 tabledef 對象的相關信息,請參閱 CDaoTableDef 類別。 當您建構 CDaoTableDef
物件時,tabledef 物件會變成與特定CDaoDatabase
對象相關聯的物件,並將指標傳遞給資料庫物件。
如需相關信息,請參閱 DAO 說明中的「刪除方法」主題。
CDaoDatabase::Execute
呼叫此成員函式以執行動作查詢,或在資料庫上執行 SQL 語句。
void Execute(
LPCTSTR lpszSQL,
int nOptions = dbFailOnError);
參數
lpszSQL
包含要執行之有效 SQL 命令之 Null 終止字串的指標。
nOptions
整數,指定與查詢完整性相關的選項。 您可以使用位 OR 運算符 (|
) 結合下列任何常數,前提是組合有意義。 例如,您不會結合 dbInconsistent
:dbConsistent
dbDenyWrite
拒絕其他使用者的寫入許可權。dbInconsistent
(預設值)更新不一致。dbConsistent
一致的更新。dbSQLPassThrough
SQL 傳遞。 導致 SQL 語句傳遞至 ODBC 數據源進行處理。dbFailOnError
如果發生錯誤,請回復更新。dbSeeChanges
如果其他使用者正在變更您正在編輯的數據,則產生運行時錯誤。
注意
dbInconsistent
如果 同時包含和dbConsistent
,或兩者都未包含,則結果為預設值。 如需這些常數的說明,請參閱 DAO 說明中的「執行方法」主題。
備註
Execute
僅適用於不會傳回結果的動作查詢或 SQL 傳遞查詢。 它不適用於會傳回記錄的選取查詢。
如需動作查詢的定義和資訊,請參閱 DAO 說明中的「動作查詢」和「執行方法」主題。
提示
指定語法正確的 SQL 語句和適當的許可權,即使無法修改或刪除單一數據列, Execute
成員函式也不會失敗。 因此,使用成員函式執行更新或刪除查詢時Execute
,一律使用 dbFailOnError
選項。 此選項會導致 MFC 擲回 CDaoException 類型的例外狀況,並在任何受影響的記錄遭到鎖定且無法更新或刪除時回復所有成功的變更。 請注意,您一律可以呼叫 GetRecordsAffected
以查看有多少筆記錄受到影響。
呼叫資料庫物件的 GetRecordsAffected 成員函式,以判斷受最近Execute
呼叫影響的記錄數目。 例如, GetRecordsAffected
傳回執行動作查詢時已刪除、更新或插入之記錄數目的相關信息。 當串聯更新或刪除生效時,傳回的計數不會反映相關數據表中的變更。
Execute
不會傳回記錄集。 在 Execute
選取記錄的查詢上使用 會導致 MFC 擲回 類型的例外狀況 CDaoException
。 (沒有 ExecuteSQL
類似 CDatabase::ExecuteSQL
的成員函式。
CDaoDatabase::GetConnect
呼叫這個成員函式,擷取用來將對象連接到 CDaoDatabase
ODBC 或 ISAM 資料庫的 連接字串。
CString GetConnect();
傳回值
如果已在 ODBC 數據源上成功呼叫 Open,則 連接字串,否則為空字串。 對於Microsoft噴氣機 (.MDB) 資料庫,除非您將字串設定為與 dbSQLPassThrough
Execute 成員函式一起使用,或用於開啟記錄集時使用的選項,否則字串一律是空的。
備註
字串提供開啟資料庫或傳遞查詢中使用的資料庫來源相關信息。 連接字串 是由資料庫類型規範和以分號分隔的零個或多個參數所組成。
注意
使用 MFC DAO 類別透過 ODBC 連接到數據源比透過附加資料表連線的效率低。
注意
連接字串 可用來視需要將其他資訊傳遞給 ODBC 和特定ISAM驅動程式。 它不會用於 。MDB 資料庫。 對於 Microsoft Jet 資料庫基表,連接字串 是空字串 (“”),除非您將它用於 SQL 傳遞查詢,如上述傳回值所述。
如需如何建立 連接字串 的說明,請參閱 Open 成員函式。 在呼叫中Open
設定 連接字串 之後,您稍後就可以使用它來檢查設定,以判斷資料庫的型別、路徑、使用者標識碼、密碼或 ODBC 數據源。
CDaoDatabase::GetName
呼叫這個成員函式來擷取目前開啟的資料庫名稱,也就是現有資料庫檔案的名稱或已註冊 ODBC 數據源的名稱。
CString GetName();
傳回值
如果成功,則為資料庫的完整路徑和檔名;否則為空 的 CString。
備註
如果您的網路支援統一命名慣例 (UNC),您也可以指定網路路徑,例如 “\\MYSERVER\\MYSHARE\\MYDIR\\MYDB。MDB”。 (字串常值需要雙反斜杠,因為 “\” 是逸出字元C++。
例如,您可能會想要在標題中顯示此名稱。 如果在擷取名稱時發生錯誤,MFC 會擲回 CDaoException 類型的 例外狀況。
注意
為了在存取外部資料庫時獲得更好的效能,我們建議您將外部資料庫數據表附加至 Microsoft Jet 資料庫 (.MDB)而不是直接連接到數據源。
資料庫類型是由路徑指向的檔案或目錄所指出,如下所示:
Pathname 指向 。。 | 資料庫類型 |
---|---|
.MDB 檔案 | Microsoft Jet 資料庫 (Microsoft Access) |
包含的目錄。DBF 檔案(s) | dBASE 資料庫 |
包含.XLS檔案的目錄 | Microsoft Excel 資料庫 |
包含的目錄。PDX 檔案(s) | Paradox 資料庫 |
包含適當格式化文字文件的目錄 | 文字格式資料庫 |
針對 SQL Server 和 Oracle 等 ODBC 資料庫,資料庫的 連接字串 會識別 ODBC 所註冊的數據來源名稱 (DSN)。
CDaoDatabase::GetQueryDefCount
呼叫這個成員函式,以擷取資料庫 QueryDefs 集合中定義的查詢數目。
short GetQueryDefCount();
傳回值
資料庫中定義的查詢數目。
備註
GetQueryDefCount
如果您需要迴圈查看 QueryDefs 集合中的所有 querydefs,會很有用。 若要取得集合中指定查詢的相關信息,請參閱 GetQueryDefInfo。
CDaoDatabase::GetQueryDefInfo
呼叫這個成員函式,以取得資料庫中所定義之查詢的各種資訊。
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
資料庫 QueryDefs 集合中預先定義的查詢索引,以依索引查閱。
querydefinfo
傳回所要求資訊的 CDaoQueryDefInfo 對象的參考。
dwInfoOptions
指定要擷取之記錄集相關信息的選項。 可用的選項會列在這裡,以及導致函式傳回記錄集的原因:
AFX_DAO_PRIMARY_INFO (預設) 名稱, 輸入
AFX_DAO_SECONDARY_INFO主要資訊加上:日期建立、上次更新日期、傳回記錄、可更新
AFX_DAO_ALL_INFO主要和次要資訊加上:SQL、Connect、ODBCTimeout
lpszName
字串,包含資料庫中定義的查詢名稱,以依名稱查閱。
備註
提供兩個版本的函式,以便您可以依資料庫的 QueryDefs 集合中的索引或查詢名稱來選取查詢。
如需 querydefinfo 中傳回之資訊的描述,請參閱 CDaoQueryDefInfo 結構。 此結構具有成員,這些成員會對應至 dwInfoOptions 描述中所列的信息專案。 如果您要求一個層級的資訊,您也會取得任何先前層級的資訊。
CDaoDatabase::GetQueryTimeout
呼叫這個成員函式,以擷取目前允許的秒數,然後再逾時聯機資料庫的後續作業。
short GetQueryTimeout();
傳回值
短整數,包含以秒為單位的逾時值。
備註
作業可能會因為網路存取問題、查詢處理時間過長等而逾時。 設定生效時,會影響與這個 CDaoDatabase
對象相關聯之任何記錄集上所有開啟、新增、更新和刪除作業。 您可以呼叫 SetQueryTimeout 來變更目前的逾時設定。 開啟之後變更記錄集的查詢逾時值並不會變更記錄集的值。 例如,後續 的Move 作業不會使用新的值。 初始化資料庫引擎時,會一開始設定預設值。
查詢逾時的預設值取自 Windows 登錄。 如果沒有登錄設定,預設值為 60 秒。 並非所有資料庫都支援設定查詢逾時值的能力。 如果您設定查詢逾時值為 0,則不會發生逾時;與資料庫的通訊可能會停止回應。 此行為在開發期間可能很有用。 如果呼叫失敗,MFC 會擲回 CDaoException 類型的 例外狀況。
如需相關信息,請參閱 DAO 說明中的
CDaoDatabase::GetRecordsAffected
呼叫這個成員函式,以判斷受 Execute 成員函式最近呼叫影響的記錄數目。
long GetRecordsAffected();
傳回值
包含受影響記錄數目的長整數。
備註
傳回的值包含使用 執行的 Execute
動作查詢所刪除、更新或插入的記錄數目。 當串聯更新或刪除生效時,傳回的計數不會反映相關數據表中的變更。
如需相關信息,請參閱 DAO 說明中的「RecordsAffected 屬性」主題。
CDaoDatabase::GetRelationCount
呼叫這個成員函式,以取得資料庫中數據表之間定義的關聯數目。
short GetRelationCount();
傳回值
資料庫中數據表之間定義的關聯數目。
備註
GetRelationCount
如果您需要迴圈查看資料庫 Relations 集合中所有已定義的關聯性,會很有用。 若要取得集合中指定關聯性的相關信息,請參閱 GetRelationInfo。
為了說明關聯的概念,請考慮供應商數據表和 Products 數據表,其中可能有一對多關聯性。 在此關聯性中,一個供應商可以提供一個以上的產品。 其他關係是一對一和多對多。
CDaoDatabase::GetRelationInfo
呼叫這個成員函式,以取得資料庫 Relations 集合中指定關聯性的相關信息。
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
要依索引查閱的資料庫 Relations 集合中關聯物件的索引。
relinfo
傳回所要求資訊的 CDaoRelationInfo 對象的參考。
dwInfoOptions
指定要擷取關聯之相關信息的選項。 此處列出可用的選項,以及導致函式傳回關聯性的原因:
AFX_DAO_PRIMARY_INFO (預設) 名稱、數據表、外表
AFX_DAO_SECONDARY_INFO屬性、欄位資訊
欄位資訊是 CDaoRelationFieldInfo 物件,其中包含關聯相關主要數據表中的欄位。
lpszName
字串,包含關聯對象的名稱,以依名稱查閱。
備註
此函式的兩個版本會依索引或名稱提供存取權。 如需 relinfo 中傳回之資訊的描述,請參閱 CDaoRelationInfo 結構。 此結構具有成員,這些成員會對應至 dwInfoOptions 描述中所列的信息專案。 如果您在一個層級要求資訊,您也會在任何先前層級取得資訊。
注意
如果您將 relation 物件的屬性設定為啟動串聯作業 (dbRelationUpdateCascades
或 dbRelationDeleteCascades
),Microsoft Jet 資料庫引擎會在對相關主鍵數據表進行變更時自動更新或刪除一個或多個其他數據表中的記錄。 例如,假設您在 Customers 數據表與 Orders 數據表之間建立串聯刪除關聯性。 當您從 Customers 資料表中刪除記錄時,也會刪除與該客戶相關的 Orders 資料表中的記錄。 此外,如果您在 Orders 資料表與其他資料表之間建立串聯刪除關聯性,當您從 Customers 數據表刪除記錄時,會自動刪除這些數據表中的記錄。
CDaoDatabase::GetTableDefCount
呼叫這個成員函式,以擷取資料庫中定義的數據表數目。
short GetTableDefCount();
傳回值
資料庫中定義的 tabledefs 數目。
備註
GetTableDefCount
如果您需要在資料庫的 TableDefs 集合中循環處理所有 tabledefs,會很有用。 若要取得集合中指定數據表的相關信息,請參閱 GetTableDefInfo。
CDaoDatabase::GetTableDefInfo
呼叫這個成員函式,以取得資料庫中所定義之數據表的各種資訊。
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
要依索引查閱的資料庫 TableDefs 集合中 tabledef 物件的索引。
tabledefinfo
傳回所要求資訊的 CDaoTableDefInfo 對象的參考。
dwInfoOptions
指定要擷取之數據表相關信息的選項。 此處列出可用的選項,以及導致函式傳回關聯性的原因:
AFX_DAO_PRIMARY_INFO (預設) 名稱、可更新、屬性
AFX_DAO_SECONDARY_INFO主要資訊加上:日期建立、上次更新日期、源數據表名稱、連線
AFX_DAO_ALL_INFO主要和次要資訊加上:驗證規則、驗證文字、記錄計數
lpszName
tabledef 對象的名稱,以依名稱查閱。
備註
提供兩個版本的函式,以便您可以依資料庫的 TableDefs 集合中的索引或數據表的名稱來選取資料表。
如需 tabledefinfo 中傳回之資訊的描述,請參閱 CDaoTableDefInfo 結構。 此結構具有成員,這些成員會對應至 dwInfoOptions 描述中所列的信息專案。 如果您在一個層級要求資訊,您也會取得任何先前層級的資訊。
注意
[AFX_DAO_ALL_INFO] 選項會提供可能緩慢取得的資訊。 在此情況下,如果有許多記錄,計算數據表中的記錄可能會非常耗時。
CDaoDatabase::GetVersion
呼叫此成員函式,以判斷Microsoft Jet 資料庫檔案的版本。
CString GetVersion();
傳回值
備註
傳回的值代表格式為 「major.minor」 的版本號碼;例如,“3.0”。 產品版本號碼(例如 3.0)包含版本號碼 (3)、句號和版本號碼 (0)。 迄今為止的版本是 1.0、1.1、2.0 和 3.0。
如需相關信息,請參閱 DAO 說明中的「版本屬性」主題。
CDaoDatabase::IsOpen
呼叫這個成員函式,以判斷物件目前是否 CDaoDatabase
在資料庫上開啟。
BOOL IsOpen() const;
傳回值
如果物件目前開啟,則為 CDaoDatabase
非零,否則為 0。
備註
CDaoDatabase::m_pDAODatabase
包含物件基礎 CDaoDatabase
之 DAO 資料庫物件的 OLE 介面指標。
備註
如果您需要直接存取 DAO 介面,請使用此指標。
如需直接呼叫 DAO 的資訊,請參閱 技術附註 54。
CDaoDatabase::m_pWorkspace
包含包含資料庫物件的 CDaoWorkspace 物件的指標。
備註
如果您需要直接存取工作區,請使用此指標。 例如,若要取得工作區 Databases 集合中其他資料庫物件的指標。
CDaoDatabase::Open
您必須呼叫這個成員函式,以初始化代表現有資料庫的新建構 CDaoDatabase
物件。
virtual void Open(
LPCTSTR lpszName,
BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE,
LPCTSTR lpszConnect = _T(""));
參數
lpszName
字串表示式,這是現有 Microsoft Jet 的名稱。MDB) 資料庫檔案。 如果檔名具有擴展名,則為必要專案。 如果您的網路支援統一命名慣例 (UNC),您也可以指定網路路徑,例如 “\\MYSERVER\\MYSHARE\\MYDIR\\MYDB。MDB”。 (字串常值需要雙反斜杠,因為 “\” 是逸出字元C++。
使用 lpszName 時,適用一些考慮。 如果是:
參考已由另一位用戶開啟供獨佔存取的資料庫,MFC 會擲回 CDaoException 類型的 例外狀況。 設陷該例外狀況,讓使用者知道資料庫無法使用。
這是空字串 (“”) 且 lpszConnect 為 “ODBC;”,會顯示列出所有已註冊 ODBC 數據源名稱的對話框,讓使用者可以選取資料庫。 您應該避免直接連線到 ODBC 數據源;請改用附加數據表。
否則不會參考現有的資料庫或有效的 ODBC 數據源名稱,MFC 會擲回 類型的例外狀況
CDaoException
。
注意
如需 DAO 錯誤碼的詳細資訊,請參閱 DAOERR。H 檔案。 如需相關信息,請參閱 DAO 說明中的「可截獲的數據存取錯誤」主題。
bExclusive
布爾值,如果資料庫要針對獨佔 (非共用) 存取開啟,則為TRUE,如果資料庫要開啟以供共用存取,則為 FALSE。 如果您省略此自變數,則會開啟資料庫以供共用存取。
bReadOnly
布爾值,如果資料庫要針對唯讀存取開啟,則為TRUE;如果要開啟資料庫供讀取/寫入存取,則為 FALSE。 如果您省略此自變數,則會開啟資料庫進行讀取/寫入存取。 所有相依記錄集都會繼承此屬性。
lpszConnect
用來開啟資料庫的字串表達式。 此字串構成 ODBC 連接自變數。 您必須提供獨佔和唯讀自變數,才能提供來源字串。 如果資料庫是 Microsoft Jet 資料庫 (.MDB,這個字串是空的(“)。 默認值的語法 -- _T(“”)—提供 Unicode 和應用程式的 ANSI 組建可移植性。
備註
Open
將資料庫與基礎 DAO 對象產生關聯。 在初始化之前,您無法使用資料庫對象來建構 recordset、tabledef 或 querydef 物件。 Open
將資料庫物件附加至相關聯工作區的 Databases 集合。
使用參數,如下所示:
如果您要開啟Microsoft Jet (.MDB) 資料庫,使用 lpszName 參數並傳遞 lpszConnect 參數的空字串,或傳遞格式為 “;如果資料庫受到密碼保護,則為 PWD=password”僅限 MDB 資料庫)。
如果您要開啟 ODBC 數據源,請在 lpszConnect 中傳遞有效的 ODBC 連接字串,並在 lpszName 中傳遞空字串。
如需相關信息,請參閱 DAO 說明中的
注意
若要在存取外部資料庫,包括 ISAM 資料庫和 ODBC 數據源時獲得更好的效能,建議您將外部資料庫數據表附加至 Microsoft Jet 引擎資料庫 (.MDB)而不是直接連接到數據源。
例如,如果 DBMS 主機無法使用,連線可能會嘗試逾時。 如果連線嘗試失敗, Open
則會擲回 CDaoException 類型的 例外狀況。
其餘備註僅適用於 ODBC 資料庫:
如果資料庫是 ODBC 資料庫,而且呼叫 Open
中的參數未包含足夠的資訊來建立連線,ODBC 驅動程式會開啟對話方塊,以從使用者取得必要的資訊。 當您呼叫 Open
時,會私下儲存您的 連接字串 lpszConnect,並透過呼叫 GetConnect 成員函式來取得。
如果您想要的話,您可以在呼叫 Open
以取得使用者的資訊之前開啟自己的對話框,例如密碼,然後將該資訊新增至您傳遞給 Open
的 連接字串。 或者,您可能想要儲存您傳遞的 連接字串(也許在 Windows 登錄中),以便在下次應用程式在物件上CDaoDatabase
呼叫Open
時重複使用它。
您也可以將 連接字串 用於多個層級的登入授權,或CDaoDatabase
傳達其他資料庫特定資訊。
CDaoDatabase::SetQueryTimeout
呼叫這個成員函式,覆寫預設的秒數,以允許在連接資料庫上的後續作業逾時之前。
void SetQueryTimeout(short nSeconds);
參數
nSeconds
查詢嘗試逾時前所允許的秒數。
備註
作業可能會因為網路存取問題、查詢處理時間過多等而逾時。 SetQueryTimeout
如果您要變更查詢逾時值,請在開啟記錄集之前或呼叫記錄集的 AddNew、Update 或 Delete 成員函式之前呼叫 。 此設定會影響與這個CDaoDatabase
對象相關聯之所有記錄集的後續 Open、AddNew
、 Update
和 Delete
呼叫。 開啟之後變更記錄集的查詢逾時值並不會變更記錄集的值。 例如,後續 的Move 作業不會使用新的值。
查詢逾時的預設值為 60 秒。 並非所有資料庫都支援設定查詢逾時值的能力。 如果您設定查詢逾時值為 0,則不會發生逾時;與資料庫的通訊可能會停止回應。 此行為在開發期間可能很有用。
如需相關信息,請參閱 DAO 說明中的
另請參閱
CObject 類別
階層架構圖表
CDaoWorkspace 類別
CDaoRecordset 類別
CDaoTableDef 類別
CDaoQueryDef 類別
CDatabase 類別
CDaoException 類別