共用方式為


CDaoWorkspace 類別

從單一使用者的登入到登出,管理受密碼保護的具名資料庫工作階段。 DAO 可透過 Office 2013 支援。 DAO 3.6 是最終版本,而且被視為過時。

語法

class CDaoWorkspace : public CObject

成員

公用建構函式

名稱 描述
CDaoWorkspace::CDaoWorkspace 建構工作區物件。 之後,呼叫 CreateOpen

公用方法

名稱 描述
CDaoWorkspace::Append 將新建立的工作區附加至資料庫引擎的 Workspaces 集合。
CDaoWorkspace::BeginTrans 開始新的交易,此交易會套用至工作區中開啟的所有資料庫。
CDaoWorkspace::Close 關閉工作區及其包含的所有物件。 暫止的交易會回復。
CDaoWorkspace::CommitTrans 完成目前的交易並儲存變更。
CDaoWorkspace::CompactDatabase 壓縮資料庫(或重複專案)。
CDaoWorkspace::Create 建立新的 DAO 工作區物件。
CDaoWorkspace::GetDatabaseCount 傳回工作區 Databases 集合中的 DAO 資料庫物件數目。
CDaoWorkspace::GetDatabaseInfo 傳回工作區的 Databases 集合中定義之指定 DAO 資料庫的相關資訊。
CDaoWorkspace::GetIniPath 傳回 Microsoft Jet 資料庫引擎在 Windows 登錄中初始化設定的位置。
CDaoWorkspace::GetIsolateODBCTrans 傳回值,這個值表示牽涉到相同 ODBC 資料來源的多個交易是否透過對資料來源的強制多個連接來隔離。
CDaoWorkspace::GetLoginTimeout 傳回使用者嘗試登入 ODBC 資料庫時發生錯誤之前的秒數。
CDaoWorkspace::GetName 傳回工作區物件的使用者定義名稱。
CDaoWorkspace::GetUserName 傳回建立工作區時指定的使用者名稱。 這是工作區擁有者的名稱。
CDaoWorkspace::GetVersion 傳回字串,其中包含與工作區相關聯的資料庫引擎版本。
CDaoWorkspace::GetWorkspaceCount 傳回資料庫引擎 Workspaces 集合中的 DAO 工作區物件數目。
CDaoWorkspace::GetWorkspaceInfo 傳回資料庫引擎的 Workspaces 集合中定義之指定 DAO 工作區的相關資訊。
CDaoWorkspace::Idle 允許資料庫引擎執行背景工作。
CDaoWorkspace::IsOpen 如果工作區已開啟,則傳回非零。
CDaoWorkspace::Open 明確開啟與 DAO 預設工作區相關聯的工作區物件。
CDaoWorkspace::RepairDatabase 嘗試修復損毀的資料庫。
CDaoWorkspace::Rollback 結束目前的交易,而且不會儲存變更。
CDaoWorkspace::SetDefaultPassword 設定資料庫引擎在沒有特定密碼的情況下建立工作區物件時所使用的密碼。
CDaoWorkspace::SetDefaultUser 設定資料庫引擎在沒有特定使用者名稱的情況下建立工作區物件時所使用的使用者名稱。
CDaoWorkspace::SetIniPath 設定 Microsoft Jet 資料庫引擎在 Windows 登錄中初始化設定的位置。
CDaoWorkspace::SetIsolateODBCTrans 指定是否藉由強制多個與資料來源連接,隔離涉及相同 ODBC 資料來源的多個交易。
CDaoWorkspace::SetLoginTimeout 設定使用者嘗試登入 ODBC 資料來源時發生錯誤之前的秒數。

公用資料成員

名稱 描述
CDaoWorkspace::m_pDAOWorkspace 指向基礎 DAO 工作區物件。

備註

在大部分情況下,您不需要多個工作區,而且不需要建立明確的工作區物件;當您開啟資料庫和記錄集物件時,它們會使用 DAO 的預設工作區。 不過,如有需要,您可以建立其他工作區物件,一次執行多個會話。 每個工作區物件都可以在其自己的 Databases 集合中包含多個開啟的資料庫物件。 在 MFC 中,工作區主要是交易管理員,在相同的「交易空間」中指定一組開啟的資料庫。

注意

DAO 資料庫類別與以 Open Database 連線ivity (ODBC) 為基礎的 MFC 資料庫類別不同。 所有 DAO 資料庫類別名稱都有 「CDao」 前置詞。 一般而言,以 DAO 為基礎的 MFC 類別比以 ODBC 為基礎的 MFC 類別更有能力。 DAO 型類別會透過 Microsoft Jet 資料庫引擎存取資料,包括 ODBC 驅動程式。 它們也支援資料定義語言(DDL)作業,例如透過類別建立資料庫和新增資料表和欄位,而不需要直接呼叫 DAO。

功能

類別 CDaoWorkspace 提供下列專案:

  • 如有需要,請明確存取預設工作區,方法是初始化資料庫引擎。 您通常會藉由建立資料庫和記錄集物件,以隱含方式使用 DAO 的預設工作區。

  • 交易會套用至工作區中開啟之所有資料庫的交易空間。 您可以建立其他工作區來管理個別的交易空間。

  • 基礎 Microsoft Jet 資料庫引擎之許多屬性的介面(請參閱靜態成員函式)。 開啟或建立工作區,或在開啟或建立之前呼叫靜態成員函式,初始化資料庫引擎。

  • 存取資料庫引擎的 Workspaces 集合,其會儲存已附加至該集合的所有使用中工作區。 您也可以建立和使用工作區,而不將它們附加至集合。

安全性

MFC 不會在 DAO 中實作用於安全性控制的使用者和群組集合。 如果您需要 DAO 的這些層面,您必須透過直接呼叫 DAO 介面來自行進行程式設計。 如需詳細資訊,請參閱 技術附注 54

使用方式

您可以使用 類別 CDaoWorkspace 來:

  • 明確開啟預設工作區。

    您通常使用預設工作區是隱含的 , 當您開啟新的 CDaoDatabase CDaoRecordset 物件時。 但您可能需要明確地存取它,例如,若要存取資料庫引擎屬性或 Workspaces 集合。 請參閱下方的。

  • 建立新的工作區。 如果您想要將它們新增至 Workspaces 集合,請呼叫 Append

  • 在 Workspaces 集合中開啟現有的工作區。

建立尚未存在於 Workspaces 集合中的新工作區,描述于 Create 成員函式底下 。 工作區物件不會在 datababase 引擎會話之間以任何方式保存。 如果您的應用程式以靜態方式連結 MFC,則結束應用程式未初始化資料庫引擎。 如果您的應用程式以動態方式連結 MFC,則卸載 MFC DLL 時,資料庫引擎不會初始化。

在 Open 成員函式下 ,明確開啟預設工作區或開啟 Workspaces 集合中的現有工作區。

使用 Close 成員函式關閉工作區,以結束工作區 會話。 Close 會關閉您先前尚未關閉的任何資料庫,並回復任何未認可的交易。

交易

DAO 會在工作區層級管理交易;因此,具有多個開啟資料庫之工作區上的交易會套用至所有資料庫。 例如,如果兩個資料庫有未認可的更新,而且您呼叫 CommitTrans ,則會認可所有更新。 如果您想要將交易限制為單一資料庫,則需要個別的工作區物件。

隱含使用預設工作區

MFC 會在下列情況下隱含地使用 DAO 的預設工作區:

  • 如果您建立新的 CDaoDatabase 物件,但不會透過現有的 CDaoWorkspace 物件執行此動作,MFC 會為您建立暫存工作區物件,此物件會對應至 DAO 的預設工作區。 如果您對多個資料庫執行此動作,所有資料庫物件都會與預設工作區相關聯。 您可以透過 CDaoDatabase 資料成員存取資料庫的工作區。

  • 同樣地,如果您在未提供物件的指標 CDaoDatabase 的情況下建立 CDaoRecordset 物件,MFC 會建立暫存資料庫物件,並依延伸模組建立暫存工作區物件。 您可以透過 CDaoRecordset 資料成員存取記錄集的資料庫,並間接存取其工作區。

其他作業

也會提供其他資料庫作業,例如修復損毀的資料庫或壓縮資料庫。

如需直接呼叫 DAO 和 DAO 安全性的相關資訊,請參閱 技術附注 54

繼承階層架構

CObject

CDaoWorkspace

需求

標頭: afxdao.h

CDaoWorkspace::Append

呼叫 Create 之後呼叫 此成員函式。

virtual void Append();

備註

Append 將新建立的工作區物件附加至資料庫引擎的 Workspaces 集合。 工作區不會在資料庫引擎會話之間保存;它們只會儲存在記憶體中,而不是儲存在磁片上。 您不需要附加工作區;如果您未這麼做,您仍然可以使用它。

附加的工作區會保留在 Workspaces 集合中,處於作用中開啟狀態,直到您呼叫其 Close 成員函式為止。

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

CDaoWorkspace::BeginTrans

呼叫此成員函式以起始交易。

void BeginTrans();

備註

呼叫 BeginTrans 之後,對資料或資料庫結構的更新會在認可交易時生效。 因為工作區會定義單一交易空間,因此交易會套用至工作區中的所有開啟資料庫。 有兩種方式可以完成交易:

當交易擱置時關閉工作區物件或資料庫物件,則會回復所有暫止的交易。

如果您需要將某個 ODBC 資料來源上的交易與另一個 ODBC 資料來源上的交易隔離,請參閱 SetIsolateODBCTrans 成員函式。

CDaoWorkspace::CDaoWorkspace

建構 CDaoWorkspace 物件。

CDaoWorkspace();

備註

建構 C++ 物件之後,您有兩個選項:

  • 呼叫物件的 Open 成員函式以開啟預設工作區,或開啟 Workspaces 集合中的現有物件。

  • 或呼叫物件的 Create 成員函式來建立新的 DAO 工作區物件。 這會明確啟動新的工作區會話,您可以透過 CDaoWorkspace 物件來參考該會話。 呼叫 Create 之後,如果您想要將工作區新增至資料庫引擎的 Workspaces 集合,您可以呼叫 Append

如需何時需要明確建立CDaoWorkspace物件的相關資訊,請參閱 CDaoWorkspace 的類別總覽。 通常,當您開啟 CDaoDatabase 物件而不指定工作區,或當您開啟 CDaoRecordset 物件而不指定資料庫物件時,通常會使用隱含建立的工作區。 以這種方式建立的 MFC DAO 物件會使用 DAO 的預設工作區,此工作區會建立一次並重複使用。

若要釋放工作區及其自主物件,請呼叫工作區物件的 Close 成員函式。

CDaoWorkspace::Close

呼叫此成員函式以關閉工作區物件。

virtual void Close();

備註

關閉開啟的工作區物件會釋放基礎 DAO 物件,如果工作區是 Workspaces 集合的成員,則會從集合中移除它。 呼叫 Close 是良好的程式設計做法。

警告

關閉工作區物件會關閉工作區中的任何開啟資料庫。 如此一來,任何記錄集也會在資料庫內開啟,而且會復原任何擱置的編輯或更新。 如需相關資訊,請參閱 CDaoDatabase::Close、 CDaoRecordset::Close CDaoTableDef::Close CDaoQueryDef::Close 成員函式。

工作區物件不是永久性的;它們只有在參考存在時才會存在。 這表示資料庫引擎會話結束時,工作區及其 Databases 集合不會保存。 您必須再次開啟工作區和資料庫,以重新建立下一個會話的會話。

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

CDaoWorkspace::CommitTrans

呼叫此成員函式來認可交易 — 將一組編輯和更新儲存至工作區中的一或多個資料庫。

void CommitTrans();

備註

交易是由資料庫資料或其結構的一系列變更所組成,從呼叫 BeginTrans 開始。 當您完成交易時,請認可交易,或使用 Rollback 將其回復(取消變更)。 根據預設,若沒有交易,就會立即認可記錄的更新。 呼叫 BeginTrans 會導致更新的承諾延遲,直到您呼叫 CommitTrans 為止。

警告

在一個工作區中,交易一律會全域到工作區,而且不限於一個資料庫或記錄集。 如果您在工作區交易內的多個資料庫或記錄集上執行作業,請 CommitTrans 認可所有擱置的更新,並 Rollback 還原這些資料庫和記錄集上的所有作業。

當您關閉具有暫止交易的資料庫或工作區時,交易都會回復。

注意

這不是兩階段認可機制。 如果一個更新無法認可,其他更新仍會認可。

CDaoWorkspace::CompactDatabase

呼叫此成員函式以壓縮指定的 Microsoft Jet (。MDB) 資料庫。

static void PASCAL CompactDatabase(
    LPCTSTR lpszSrcName,
    LPCTSTR lpszDestName,
    LPCTSTR lpszLocale = dbLangGeneral,
    int nOptions = 0);

static void PASCAL CompactDatabase(
    LPCTSTR lpszSrcName,
    LPCTSTR lpszDestName,
    LPCTSTR lpszLocale,
    int nOptions,
    LPCTSTR lpszPassword);

參數

lpszSrcName
現有已關閉之資料庫的名稱。 它可以是完整路徑和檔案名,例如 「C:\\MYDB。MDB」。 如果檔案名具有副檔名,您必須指定它。 如果您的網路支援統一命名慣例 (UNC),您也可以指定網路路徑,例如 「\\MYSERVER\\MYSHARE\\MYDIR\\MYDB。MDB」。 (路徑字串中需要雙反斜線,因為 「\」 是 C++ 逸出字元。

lpszDestName
您要建立之壓縮資料庫的完整路徑。 您也可以使用 lpszSrcName 指定網路路徑。 您無法使用 lpszDestName 引數來指定與 lpszSrcName 相同的資料庫檔案。

lpszPassword
密碼,當您想要壓縮受密碼保護的資料庫時使用。 請注意,如果您使用採用密碼的 CompactDatabase 版本,則必須提供所有參數。 此外,因為這是 connect 參數,因此需要特殊格式,如下所示:;P WD= lpszPassword 。 例如:;P WD=「Happy」。 (需要前置分號。

lpszLocale
字串運算式,用來指定建立 lpszDestName 的定序順序。 如果您藉由接受 預設值 dbLangGeneral 來省略此引數(如下所示),新資料庫的地區設定會與舊資料庫的地區設定相同。 可能的值包括:

  • dbLangGeneral 英文、德文、法文、葡萄牙文、義大利文和現代西班牙文

  • dbLangArabic 阿拉伯文

  • dbLangCyrillic 俄語

  • dbLangCzech 捷克文

  • dbLangDutch 荷蘭文

  • dbLangGreek 希臘文

  • dbLangHebrew 希伯來文

  • dbLangHungarian 匈牙利文

  • dbLangIcelandic 冰島文

  • dbLangNordic 北歐語言 (僅限 Microsoft Jet 資料庫引擎 1.0 版)

  • dbLangNorwdan 挪威文和丹麥文

  • dbLangPolish 波蘭文

  • dbLangSpanish 傳統西班牙文

  • dbLangSwedfin 瑞典文和芬蘭文

  • dbLangTurkish 土耳其文

nOptions
指出目標資料庫的 一或多個選項 lpszDestName 。 如果您藉由接受預設值來省略此引數, 則 lpszDestName 會有與 lpszSrcName 相同的加密和相同版本 。 您可以使用位 OR 運算子,將 或 dbDecrypt 選項與其中一個版本選項結合 dbEncrypt 。 指定資料庫格式而非資料庫引擎版本的可能值為:

  • dbEncrypt 壓縮時加密資料庫。

  • dbDecrypt 壓縮時解密資料庫。

  • dbVersion10 建立在壓縮時使用 Microsoft Jet 資料庫引擎 1.0 版的資料庫。

  • dbVersion11 建立在壓縮時使用 Microsoft Jet 資料庫引擎 1.1 版的資料庫。

  • dbVersion20 建立在壓縮時使用 Microsoft Jet 資料庫引擎 2.0 版的資料庫。

  • dbVersion30 建立在壓縮時使用 Microsoft Jet 資料庫引擎 3.0 版的資料庫。

您可以在 options 引數中使用 dbEncryptdbDecrypt ,指定在壓縮資料庫時加密或解密資料庫。 如果您省略加密常數,或同時包含 dbDecryptdbEncrypt 則 lpszDestName 將具有與 lpszSrcName 相同的加密。 您可以使用 options 引數中的其中一個版本常數來指定壓縮資料庫的資料格式版本。 這個常數只會影響 lpszDestName 的資料格式 版本。 您只能指定一個版本常數。 如果您省略版本常數, lpszDestName 的版本會與 lpszSrcName 相同。 您只能將 lpszDestName 壓縮 成與 lpszSrcName 相同或更新的版本

警告

如果未加密資料庫,即使您實作使用者/密碼安全性,也可以直接讀取構成資料庫的二進位磁片檔案。

備註

當您變更資料庫中的資料時,資料庫檔案可能會變得分散,並使用比必要更多的磁碟空間。 您應該定期壓縮資料庫,以重組資料庫檔案。 壓縮的資料庫通常較小。 您也可以選擇在複製和壓縮資料庫時,變更定序順序、加密或資料格式的版本。

警告

成員 CompactDatabase 函式無法正確將完整的 Microsoft Access 資料庫從一個版本轉換成另一個版本。 只會轉換資料格式。 不會轉換 Microsoft Access 定義的物件,例如表單和報表。 不過,資料已正確轉換。

提示

您也可以使用 CompactDatabase 來複製資料庫檔案。

如需壓縮資料庫的詳細資訊,請參閱 DAO 說明中的主題。

CDaoWorkspace::Create

呼叫此成員函式以建立新的 DAO 工作區物件,並將它與 MFC CDaoWorkspace 物件產生關聯。

virtual void Create(
    LPCTSTR lpszName,
    LPCTSTR lpszUserName,
    LPCTSTR lpszPassword);

參數

lpszName
最多 14 個字元的字串,可唯一命名新的工作區物件。 您必須提供名稱。 如需相關資訊,請參閱 DAO 說明中的「名稱屬性」主題。

lpszUserName
工作區擁有者的使用者名稱。 如需需求,請參閱 SetDefaultUser 成員函式的 lpszDefaultUser 參數。 如需相關資訊,請參閱 DAO 說明中的「UserName 屬性」主題。

lpszPassword
新工作區物件的密碼。 密碼長度最多可達 14 個字元,而且可以包含 ASCII 0 以外的任何字元(null)。 密碼會區分大小寫。 如需相關資訊,請參閱 DAO 說明中的「密碼屬性」主題。

備註

整體建立程式為:

  1. 建構 CDaoWorkspace 物件。

  2. 呼叫物件的 Create 成員函式,以建立基礎 DAO 工作區。 您必須指定工作區名稱。

  3. 如果您想要將工作區新增至資料庫引擎的 Workspaces 集合,可以選擇性地呼叫 Append 。 您可以使用工作區,而不附加工作區。

Create呼叫之後,工作區物件處於開啟狀態,可供使用。 您不會在 之後 Create 呼叫 Open 。 如果工作區已存在於 Workspaces 集合中,您就不會呼叫 CreateCreate 如果尚未為您的應用程式初始化資料庫引擎,則初始化資料庫引擎。

CDaoWorkspace::GetDatabaseCount

呼叫此成員函式,以擷取工作區的 Databases 集合中的 DAO 資料庫物件數目, 也就是工作區中開啟的資料庫數目。

short GetDatabaseCount();

傳回值

工作區中開啟的資料庫數目。

備註

GetDatabaseCount 如果您需要在工作區的 Databases 集合中迴圈所有已定義的資料庫,會很有用。 若要取得集合中指定資料庫的相關資訊,請參閱 GetDatabaseInfo 。 一般用法是呼叫 GetDatabaseCount 開啟的資料庫數目,然後使用該號碼做為循環索引,以重複呼叫 GetDatabaseInfo

CDaoWorkspace::GetDatabaseInfo

呼叫這個成員函式,以取得工作區中開啟之資料庫的各種資訊。

void GetDatabaseInfo(
    int nIndex,
    CDaoDatabaseInfo& dbinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetDatabaseInfo(
    LPCTSTR lpszName,
    CDaoDatabaseInfo& dbinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

參數

nIndex
工作區 Databases 集合中資料庫物件的以零起始的索引,可依索引查閱。

dbinfo
傳回所要求資訊的 CDaoDatabaseInfo 物件的參考

dwInfoOptions
指定要擷取之資料庫相關資訊的選項。 可用的選項會列在這裡,以及導致函式傳回的原因:

  • AFX_DAO_PRIMARY_INFO (預設) 名稱、可更新、交易

  • AFX_DAO_SECONDARY_INFO主要資訊加上:版本、定序順序、查詢逾時

  • AFX_DAO_ALL_INFO主要和次要資訊加上:連線

lpszName
要依名稱查閱的資料庫物件名稱。 名稱是最多 14 個字元的字串,可唯一命名新的工作區物件。

備註

函式的一個版本可讓您依索引查閱資料庫。 另一個版本可讓您依名稱查閱資料庫。

如需 dbinfo 傳回之資訊的描述,請參閱 CDaoDatabaseInfo 結構。 此結構具有成員,這些成員會對應至 dwInfoOptions 描述 中所列的資訊專案。 當您在一個層級要求資訊時,您也會取得任何先前層級的資訊。

CDaoWorkspace::GetIniPath

呼叫這個成員函式,以取得 Microsoft Jet 資料庫引擎在 Windows 登錄中初始化設定的位置。

static CString PASCAL GetIniPath();

傳回值

包含 登錄位置的 CString

備註

您可以使用位置來取得資料庫引擎設定的相關資訊。 傳回的資訊實際上是登錄子機碼的名稱。

如需相關資訊,請參閱 DAO 說明中的和<自訂適用于資料存取的 Windows 登錄設定>主題。

CDaoWorkspace::GetIsolateODBCTrans

呼叫這個成員函式,以取得工作區之 DAO IsolateODBCTrans 屬性的目前值。

BOOL GetIsolateODBCTrans();

傳回值

如果 ODBC 交易隔離,則為非零;否則為 0。

備註

在某些情況下,您可能需要在相同的 ODBC 資料庫上有多個同時擱置的交易。 若要這樣做,您必須為每個交易開啟個別的工作區。 請記住,雖然每個工作區都可以有自己的 ODBC 連線至資料庫,但這會降低系統效能。 由於通常不需要交易隔離,因此預設會共用來自相同使用者所開啟之多個工作區物件的 ODBC 連線。

某些 ODBC 伺服器,例如 Microsoft SQL Server,不允許在單一連線上同時交易。 如果您需要一次針對這類資料庫擱置一個以上的交易,請在開啟該異動時,在每個工作區上將 IsolateODBCTrans 屬性設定為 TRUE。 這會針對每個工作區強制執行個別的 ODBC 連線。

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

CDaoWorkspace::GetLoginTimeout

呼叫此成員函式,以取得工作區之 DAO LoginTimeout 屬性的目前值。

static short PASCAL GetLoginTimeout();

傳回值

當您嘗試登入 ODBC 資料庫時,發生錯誤之前的秒數。

備註

這個值表示當您嘗試登入 ODBC 資料庫時發生錯誤之前的秒數。 預設的 LoginTimeout 設定為 20 秒。 當 LoginTimeout 設定為 0 時,不會發生逾時,且與資料來源的通訊可能會停止回應。

當您嘗試登入 ODBC 資料庫時,例如 Microsoft SQL Server,連線可能會因為網路錯誤或伺服器未執行而失敗。 您可以指定資料庫引擎在產生錯誤之前等候的時間,而不是等候預設 20 秒進行連線。 登入伺服器會隱含地做為數個不同事件的一部分,例如在外部伺服器資料庫上執行查詢。

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

CDaoWorkspace::GetName

呼叫這個成員函式,以取得物件基礎之 CDaoWorkspace DAO 工作區物件的使用者定義名稱。

CString GetName();

傳回值

CString ,其中包含 DAO 工作區物件的使用者定義名稱。

備註

此名稱適用于依名稱存取資料庫引擎的 Workspaces 集合中的 DAO 工作區物件。

如需相關資訊,請參閱 DAO 說明中的「名稱屬性」主題。

CDaoWorkspace::GetUserName

呼叫這個成員函式以取得工作區擁有者的名稱。

CString GetUserName();

傳回值

CString ,表示工作區物件的擁有者。

備註

若要取得或設定工作區擁有者的許可權,請直接呼叫 DAO 以檢查 Permissions 屬性設定;這會決定使用者擁有哪些許可權。 若要使用許可權,您需要 SYSTEM。MDA 檔案。

如需直接呼叫 DAO 的資訊,請參閱 技術附注 54 。 如需相關資訊,請參閱 DAO 說明中的「UserName 屬性」主題。

CDaoWorkspace::GetVersion

呼叫此成員函式,以判斷使用中的 Microsoft Jet 資料庫引擎版本。

static CString PASCAL GetVersion();

傳回值

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

備註

傳回的值代表格式為 「major.minor」 的版本號碼;例如,「3.0」。 產品版本號碼(例如 3.0)包含版本號碼 (3)、句號和版本號碼 (0)。

如需相關資訊,請參閱 DAO 說明中的「版本屬性」主題。

CDaoWorkspace::GetWorkspaceCount

呼叫這個成員函式,以擷取資料庫引擎 Workspaces 集合中的 DAO 工作區物件數目。

short GetWorkspaceCount();

傳回值

Workspaces 集合中開啟的工作區數目。

備註

此計數不包含未附加至集合的任何開啟工作區。 GetWorkspaceCount 如果您需要迴圈查看 Workspaces 集合中所有已定義的工作區,會很有用。 若要取得集合中指定工作區的相關資訊,請參閱 GetWorkspaceInfo 。 一般用法是呼叫 GetWorkspaceCount 開啟工作區的數目,然後使用該號碼做為重複呼叫 GetWorkspaceInfo 的循環索引。

CDaoWorkspace::GetWorkspaceInfo

呼叫此成員函式,以取得會話中開啟之工作區的各種資訊。

void GetWorkspaceInfo(
    int nIndex,
    CDaoWorkspaceInfo& wkspcinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetWorkspaceInfo(
    LPCTSTR lpszName,
    CDaoWorkspaceInfo& wkspcinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

參數

nIndex
Workspaces 集合中資料庫物件的以零起始的索引,可依索引查閱。

wkspcinfo
傳回所要求資訊的 CDaoWorkspaceInfo 物件的參考

dwInfoOptions
指定要擷取之工作區相關資訊的選項。 可用的選項會列在這裡,以及導致函式傳回的原因:

  • AFX_DAO_PRIMARY_INFO (預設) 名稱

  • AFX_DAO_SECONDARY_INFO主要資訊加上:使用者名稱

  • AFX_DAO_ALL_INFO主要和次要資訊加上:隔離 ODBCTrans

lpszName
要依名稱查閱的工作區物件名稱。 名稱是最多 14 個字元的字串,可唯一命名新的工作區物件。

備註

如需 wkspcinfo 中 傳回之資訊的描述,請參閱 CDaoWorkspaceInfo 結構。 此結構具有成員,這些成員會對應至 dwInfoOptions 描述 中所列的資訊專案。 當您在一個層級要求資訊時,您也會取得先前層級的資訊。

CDaoWorkspace::Idle

呼叫 Idle 以提供資料庫引擎的機會,以執行背景工作,這些工作可能因為處理密集而可能不是最新狀態。

static void PASCAL Idle(int nAction = dbFreeLocks);

參數

nAction
閒置處理期間要採取的動作。 目前唯一有效的動作是 dbFreeLocks

備註

這通常是在多使用者、多工的環境中,其中沒有足夠的背景處理時間讓記錄集中的所有記錄保持在最新狀態。

注意

使用 Microsoft Jet 資料庫引擎 3.0 版建立的資料庫不需要呼叫 IdleIdle僅適用于以舊版建立的資料庫。

讀取鎖定通常會移除,而且只有在沒有其他動作(包括滑鼠移動)發生時,才會更新本機動態集類型記錄集物件中的資料。 如果您定期呼叫 Idle ,您可以釋放不必要的讀取鎖定,讓資料庫引擎有時間趕上背景處理工作。 將 dbFreeLocks 常數指定為引數會延遲處理,直到釋放所有讀取鎖定為止。

除非應用程式的多個實例正在執行,否則單一使用者環境中不需要此成員函式。 成員 Idle 函式可能會增加多使用者環境中的效能,因為它會強制資料庫引擎將資料排清到磁片,釋放記憶體上的鎖定。 您也可以讓作業成為交易的一部分來釋放讀取鎖定。

如需相關資訊,請參閱 DAO 說明中的「閒置方法」主題。

CDaoWorkspace::IsOpen

呼叫這個成員函式來判斷物件是否 CDaoWorkspace 開啟,也就是說,MFC 物件是否已由呼叫 Open 或呼叫 Create 初始化。

BOOL IsOpen() const;

傳回值

如果工作區物件已開啟,則為非零;否則為 0。

備註

您可以呼叫處於開啟狀態之工作區的任何成員函式。

CDaoWorkspace::m_pDAOWorkspace

基礎 DAO 工作區物件的指標。

備註

如果您需要直接存取基礎 DAO 物件,請使用此資料成員。 您可以透過這個指標呼叫 DAO 物件的介面。

如需直接存取 DAO 物件的相關資訊,請參閱 Technical Note 54

CDaoWorkspace::Open

明確開啟與 DAO 預設工作區相關聯的工作區物件。

virtual void Open(LPCTSTR lpszName = NULL);

參數

lpszName
要開啟的 DAO 工作區物件名稱 - 最多 14 個字元的字串,可唯一命名工作區。 接受預設值 Null 以明確開啟預設工作區。 如需命名需求,請參閱 Create lpszName 參數。 如需相關資訊,請參閱 DAO 說明中的「名稱屬性」主題。

備註

CDaoWorkspace 構 物件之後,請呼叫這個成員函式來執行下列其中一項動作:

  • 明確開啟預設工作區。 傳遞 lpszName Null。

  • 依名稱開啟現有的 CDaoWorkspace 物件 Workspaces 集合成員。 傳遞現有工作區物件的有效名稱。

Open 將工作區物件置於開啟狀態,如果尚未為您的應用程式初始化,也會初始化資料庫引擎。

雖然許多 CDaoWorkspace 成員函式只能在開啟工作區之後呼叫,但在呼叫 Open 之前,可以在建構 C++ 物件之後,于資料庫引擎上運作的下列成員函式可供使用:

CDaoWorkspace::RepairDatabase

如果您需要嘗試修復存取 Microsoft Jet 資料庫引擎的損毀資料庫,請呼叫此成員函式。

static void PASCAL RepairDatabase(LPCTSTR lpszName);

參數

lpszName
現有 Microsoft Jet 引擎資料庫檔案的路徑和檔案名。 如果您省略路徑,則只會搜尋目前的目錄。 如果您的系統支援統一命名慣例 (UNC),您也可以指定網路路徑,例如:「\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB。MDB」。 (路徑字串中需要雙反斜線,因為 「\」 是 C++ 逸出字元。

備註

您必須先關閉 lpszName 指定的資料庫,才能修復資料庫。 在多使用者環境中,其他使用者在修復時無法 開啟 lpszName 。 如果 lpszName 未關閉或無法供獨佔使用,就會發生錯誤。

此成員函式會嘗試修復因未完成寫入作業而標示為可能損毀的資料庫。 如果使用 Microsoft Jet 資料庫引擎的應用程式因為電源中斷或電腦硬體問題而意外關閉,就會發生此問題。 如果您完成作業並呼叫 Close 成員函式,或以一般方式結束應用程式,資料庫將不會標示為可能損毀。

注意

修復資料庫之後,使用 CompactDatabase 成員函式來 重組檔案及復原磁碟空間也是一個好主意。

如需修復資料庫的詳細資訊,請參閱 DAO 說明中的主題。

CDaoWorkspace::Rollback

呼叫此成員函式以結束目前的交易,並將工作區中的所有資料庫還原到其條件,然後再開始交易。

void Rollback();

備註

警告

在一個工作區物件中,交易一律是工作區的全域,而且不限於一個資料庫或記錄集。 如果您在工作區交易內的多個資料庫或記錄集上執行作業, Rollback 則會在所有資料庫和記錄集上還原所有作業。

如果您關閉工作區物件而不儲存或回復任何擱置的交易,則交易會自動回復。 如果您呼叫 CommitTrans 或 Rollback 未先呼叫 BeginTrans ,就會發生錯誤。

注意

當您開始交易時,資料庫引擎會將其作業記錄在工作站上 TEMP 環境變數所指定的目錄中的檔案中。 如果交易記錄檔耗盡 TEMP 磁片磁碟機上的可用儲存體,資料庫引擎將會導致 MFC 擲回 CDaoException (DAO 錯誤 2004)。 此時,如果您呼叫 CommitTrans ,則會認可不確定的作業數目,但剩餘未完成的作業會遺失,且作業必須重新開機。 呼叫 Rollback 會釋放交易記錄,並回復交易中的所有作業。

CDaoWorkspace::SetDefaultPassword

呼叫此成員函式,以設定資料庫引擎在沒有特定密碼的情況下建立工作區物件時所使用的預設密碼。

static void PASCAL SetDefaultPassword(LPCTSTR lpszPassword);

參數

lpszPassword
預設密碼。 密碼長度最多可達 14 個字元,而且可以包含 ASCII 0 以外的任何字元(null)。 密碼會區分大小寫。

備註

您設定的預設密碼會套用至您在呼叫後建立的新工作區。 當您建立後續工作區時,您不需要在建立 呼叫中 指定密碼。

若要使用此成員函式:

  1. CDaoWorkspace建構 物件,但不呼叫 Create

  2. SetDefaultPassword呼叫 ,並視需要 呼叫 SetDefaultUser

  3. 呼叫 Create 此工作區物件或後續物件,而不指定密碼。

根據預設,DefaultUser 屬性會設定為 「admin」,而 DefaultPassword 屬性會設定為空字串 (「」 )。

如需安全性的詳細資訊,請參閱 DAO 說明中的主題。 如需相關資訊,請參閱 DAO 說明中的主題。

CDaoWorkspace::SetDefaultUser

呼叫這個成員函式,以設定資料庫引擎在沒有特定使用者名稱的情況下建立工作區物件時所使用的預設使用者名稱。

static void PASCAL SetDefaultUser(LPCTSTR lpszDefaultUser);

參數

lpszDefaultUser
預設使用者名稱。 使用者名稱長度可以是 1 - 20 個字元,且包含字母字元, 輔色字元、數位、空格和符號,除了: " (引號)、 / (正斜線)、(反斜線)、 \[ ] (括弧 : )、(冒 | 號)、(管 < 線)、(小於 > 符號)、(大於 + 正負號)、(加 = 號)、(等號 ;, )、(逗號)、(問號 * )、(星號)、前置空格和控制字元(ASCII 00 至 ASCII 31)。 如需相關資訊,請參閱 DAO 說明中的「UserName 屬性」主題。

備註

您設定的預設使用者名稱會套用至您在呼叫後建立的新工作區。 當您建立後續工作區時,不需要在 [建立 ] 呼叫中 指定使用者名稱。

若要使用此成員函式:

  1. CDaoWorkspace建構 物件,但不呼叫 Create

  2. SetDefaultUser呼叫 ,並視需要 呼叫 SetDefaultPassword

  3. 呼叫 Create 此工作區物件或後續物件,而不指定使用者名稱。

根據預設,DefaultUser 屬性會設定為 「admin」,而 DefaultPassword 屬性會設定為空字串 (「」 )。

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

CDaoWorkspace::SetIniPath

呼叫這個成員函式,以指定 Microsoft Jet 資料庫引擎的 Windows 登錄設定位置。

static void PASCAL SetIniPath(LPCTSTR lpszRegistrySubKey);

參數

lpszRegistrySubkey
字串,包含 Microsoft Jet 資料庫引擎設定位置的 Windows 登錄子機碼名稱,或可安裝 ISAM 資料庫所需的參數。

備註

只有在您需要指定特殊設定時,才呼叫 SetIniPath 。 如需詳細資訊,請參閱 DAO 說明中的主題。

注意

在應用程式安裝期間呼叫 SetIniPath ,而不是在應用程式執行時呼叫。 SetIniPath 開啟任何工作區、資料庫或記錄集之前,必須先呼叫 ;否則,MFC 會擲回例外狀況。

您可以使用此機制來設定資料庫引擎與使用者提供的登錄設定。 這個屬性的範圍僅限於您的應用程式,而且在重新開機應用程式的情況下無法變更。

CDaoWorkspace::SetIsolateODBCTrans

呼叫此成員函式來設定工作區之 DAO IsolateODBCTrans 屬性的值。

void SetIsolateODBCTrans(BOOL bIsolateODBCTrans);

參數

bIsolateODBCTrans
如果您想要開始隔離 ODBC 交易,請傳遞 TRUE。 如果您想要停止隔離 ODBC 交易,請傳遞 FALSE。

備註

在某些情況下,您可能需要在相同的 ODBC 資料庫上有多個同時擱置的交易。 若要這樣做,您必須為每個交易開啟個別的工作區。 雖然每個工作區都可以有自己的 ODBC 連線至資料庫,但這會降低系統效能。 由於通常不需要交易隔離,因此預設會共用來自相同使用者所開啟之多個工作區物件的 ODBC 連線。

某些 ODBC 伺服器,例如 Microsoft SQL Server,不允許在單一連線上同時交易。 如果您需要一次針對這類資料庫擱置一個以上的交易,請在開啟該異動時,在每個工作區上將 IsolateODBCTrans 屬性設定為 TRUE。 這會針對每個工作區強制執行個別的 ODBC 連線。

CDaoWorkspace::SetLoginTimeout

呼叫這個成員函式,以設定工作區的 DAO LoginTimeout 屬性值。

static void PASCAL SetLoginTimeout(short nSeconds);

參數

nSeconds
當您嘗試登入 ODBC 資料庫時,發生錯誤之前的秒數。

備註

這個值表示當您嘗試登入 ODBC 資料庫時發生錯誤之前的秒數。 預設的 LoginTimeout 設定為 20 秒。 當 LoginTimeout 設定為 0 時,不會發生逾時,且與資料來源的通訊可能會停止回應。

當您嘗試登入 ODBC 資料庫時,例如 Microsoft SQL Server,連線可能會因為網路錯誤或伺服器未執行而失敗。 您可以指定資料庫引擎在產生錯誤之前等候的時間,而不是等候預設 20 秒進行連線。 登入伺服器會隱含地做為數個不同事件的一部分,例如在外部伺服器資料庫上執行查詢。 逾時值是由 LoginTimeout 屬性的目前設定所決定。

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

另請參閱

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