共用方式為


CDaoDatabase 類別

表示使用資料存取物件 (DAO) 連接到 Access 資料庫。 DAO 可透過 Office 2013 支援。 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::Get連線 傳回用來將物件連接到 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 連接

使用 ODBC 資料來源的建議方式是將外部資料表附加至 Microsoft Jet (。MDB) 資料庫。

集合

每個資料庫都會維護自己的 tabledef、querydef、recordset 和 relation 物件集合。 類別 CDaoDatabase 提供用來操作這些物件的成員函式。

注意

物件會儲存在 DAO 中,而不是儲存在 MFC 資料庫物件中。 MFC 會提供 tabledef、querydef 和 recordset 物件的類別,但不適用於關聯物件。

繼承階層架構

CObject

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 運算子 ( | ) 來結合下列任一常數(前提是組合合理,例如,您不會結合 dbInconsistentdbConsistent ):

  • 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::Get連線

呼叫這個成員函式,擷取用來將物件連接到 CDaoDatabase ODBC 或 ISAM 資料庫的連接字串。

CString GetConnect();

傳回值

如果 已在 ODBC 資料來源上成功呼叫 Open ,則為連接字串,否則為空字串。 適用于 Microsoft Jet (.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、連線、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 描述 中所列的資訊專案。 如果您在一個層級要求資訊,您也會在任何先前層級取得資訊。

注意

如果您將關聯物件的屬性設定為啟動串聯作業( dbRelationUpdateCascadesdbRelationDeleteCascades ),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();

傳回值

CString ,指出與 物件相關聯的資料庫檔案版本。

備註

傳回的值代表格式為 「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 類型的 例外狀況 。 設陷該例外狀況,讓使用者知道資料庫無法使用。

  • 這是空字串 (「」) 且 lpsz連線 為 「ODBC;」,會顯示一個對話方塊,其中列出所有已註冊的 ODBC 資料來源名稱,讓使用者可以選取資料庫。 您應該避免直接連線到 ODBC 資料來源;請改用附加資料表。

  • 否則不會參考現有的資料庫或有效的 ODBC 資料來源名稱,MFC 會擲回 類型的例外狀況 CDaoException

注意

如需 DAO 錯誤碼的詳細資訊,請參閱 DAOERR。H 檔案。 如需相關資訊,請參閱 DAO 說明中的「可截獲的資料存取錯誤」主題。

bExclusive
布林值,如果資料庫要針對獨佔 (非共用) 存取開啟,則為 TRUE,如果資料庫要開啟以供共用存取,則為 FALSE。 如果您省略此引數,則會開啟資料庫以供共用存取。

bReadOnly
布林值,如果資料庫要針對唯讀存取開啟,則為 TRUE;如果要開啟資料庫供讀取/寫入存取,則為 FALSE。 如果您省略此引數,則會開啟資料庫進行讀取/寫入存取。 所有相依記錄集都會繼承此屬性。

lpsz連線
用來開啟資料庫的字串運算式。 此字串構成 ODBC 連接引數。 您必須提供獨佔和唯讀引數,才能提供來源字串。 如果資料庫是 Microsoft Jet 資料庫(。MDB,這個字串是空的(「)。 預設值的語法 - _T (「」) - 提供 Unicode 的可攜性,以及應用程式的 ANSI 組建。

備註

Open 將資料庫與基礎 DAO 物件產生關聯。 在初始化記錄集、tabledef 或 querydef 物件之前,您無法使用資料庫物件來建構記錄集、tabledef 或 querydef 物件。 Open 將資料庫物件附加至相關聯工作區的 Databases 集合。

使用參數,如下所示:

  • 如果您要開啟 Microsoft Jet (。MDB) 資料庫、使用 lpszName 參數,並傳遞 lpsz 的空字串 連線 參數或傳遞格式為 「;如果資料庫受到密碼保護,則為 PWD=password」。僅限 MDB 資料庫)。

  • 如果您要開啟 ODBC 資料來源,請在 lpsz 中傳遞有效的 ODBC 連接字串 連線 並在 lpszName 傳遞空字串。

如需相關資訊,請參閱 DAO 說明中的主題。

注意

若要在存取外部資料庫,包括 ISAM 資料庫和 ODBC 資料來源時獲得更好的效能,建議您將外部資料庫資料表附加至 Microsoft Jet 引擎資料庫 (.MDB)而不是直接連接到資料來源。

例如,如果 DBMS 主機無法使用,連線嘗試就會逾時。 如果連線嘗試失敗, Open 則會擲回 CDaoException 類型的 例外狀況

其餘備註僅適用于 ODBC 資料庫:

如果資料庫是 ODBC 資料庫,而且呼叫 Open 中的參數不包含足夠的資訊來建立連接,ODBC 驅動程式會開啟對話方塊,以從使用者取得必要的資訊。 當您呼叫 Open 時, 您的連接字串 lpsz連線 會私下儲存,而且可藉由呼叫 Get連線 成員函式 來取得。

如果您想要的話,您可以在呼叫 Open 以取得使用者的資訊之前開啟自己的對話方塊,例如密碼,然後將該資訊新增至您傳遞給 Open 的連接字串。 或者,您可能想要儲存您傳遞的連接字串(也許在 Windows 登錄中),以便在下次應用程式在 物件上 CDaoDatabase 呼叫 Open 時重複使用它。

您也可以針對多個層級的登入授權使用連接字串(每個層級用於不同 CDaoDatabase 物件),或傳達其他資料庫特定資訊。

CDaoDatabase::SetQueryTimeout

呼叫這個成員函式,覆寫預設的秒數,以允許在連接資料庫上的後續作業逾時之前。

void SetQueryTimeout(short nSeconds);

參數

nSeconds
查詢嘗試逾時前所允許的秒數。

備註

作業可能會因為網路存取問題、查詢處理時間過多等而逾時。 SetQueryTimeout如果您想要變更查詢逾時值,請在開啟記錄集之前或通話記錄集的 AddNew Update Delete 成員函式之前呼叫 。 此設定會影響與這個 CDaoDatabase 物件相關聯之所有記錄集的後續 Open AddNewUpdateDelete 呼叫。 開啟之後變更記錄集的查詢逾時值並不會變更記錄集的值。 例如,後續 的 Move 作業不會使用新的值。

查詢逾時的預設值為 60 秒。 並非所有資料庫都支援設定查詢逾時值的能力。 如果您設定查詢逾時值為 0,則不會發生逾時;與資料庫的通訊可能會停止回應。 此行為在開發期間可能很有用。

如需相關資訊,請參閱 DAO 說明中的主題。

另請參閱

CObject 類別
階層架構圖表
CDaoWorkspace 類別
CDaoRecordset 類別
CDaoTableDef 類別
CDaoQueryDef 類別
CDatabase 類別
CDaoException 類別