CDaoWorkspace 類別
從單一使用者的登入到登出,管理受密碼保護的具名資料庫工作階段。
注意
透過 Office 2013 支援資料存取物件 (DAO)。 DAO 3.6 是最終版本,且被視為過時。
語法
class CDaoWorkspace : public CObject
成員
公用建構函式
名稱 | 描述 |
---|---|
CDaoWorkspace::CDaoWorkspace | 建構工作區物件。 之後,呼叫 Create 或 Open 。 |
公用方法
名稱 | 描述 |
---|---|
CDaoWorkspace::Append | 將新建立的工作區附加至資料庫引擎的 Workspaces 集合。 |
CDaoWorkspace::BeginTrans | 開始新的交易,此交易會套用至工作區中開啟的所有資料庫。 |
CDaoWorkspace::Close | 關閉工作區及其包含的所有物件。 暫止的交易會回復。 |
CDaoWorkspace::CommitTrans | 完成目前的交易並儲存變更。 |
CDaoWorkspace::CompactDatabase | 壓縮資料庫(或重複專案)。 |
CDaoWorkspace::Create | 建立新的 DAO 工作區物件。 |
CDaoWorkspace::GetDatabaseCount | 傳回工作區 Databases 集合中的 DAO 資料庫物件數目。 |
CDaoWorkspace::GetDatabaseInfo | 傳回工作區的 Databases 集合中定義之指定 DAO 資料庫的相關信息。 |
CDaoWorkspace::GetIniPath | 傳回 Windows 登錄中 Jet 資料庫引擎初始化設定Microsoft的位置。 |
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 | 設定 Windows 登錄中 Jet 資料庫引擎初始化設定Microsoft的位置。 |
CDaoWorkspace::SetIsolateODBCTrans | 指定是否藉由強制多個與數據源連接,隔離涉及相同 ODBC 數據源的多個交易。 |
CDaoWorkspace::SetLoginTimeout | 設定用戶嘗試登入 ODBC 數據源時發生錯誤之前的秒數。 |
公用資料成員
名稱 | 描述 |
---|---|
CDaoWorkspace::m_pDAOWorkspace | 指向基礎 DAO 工作區物件。 |
備註
在大部分情況下,您不需要多個工作區,而且不需要建立明確的工作區物件;當您開啟資料庫和記錄集物件時,它們會使用 DAO 的預設工作區。 不過,如有需要,您可以建立更多工作區物件,一次執行多個會話。 每個工作區物件都可以在其自己的 Databases 集合中包含多個開啟的資料庫物件。 在 MFC 中,工作區主要是交易管理員,在相同的「交易空間」中指定一組開啟的資料庫。
注意
DAO 資料庫類別與以開放式資料庫連接性 (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 成員函式底下。 工作區物件不會以任何方式在資料庫引擎會話之間保存。 如果您的應用程式以靜態方式連結 MFC,則結束應用程式未初始化資料庫引擎。 如果您的應用程式以動態方式連結 MFC,則卸除 MFC DLL 時,資料庫引擎不會初始化。
在Open成員函式下,明確開啟預設工作區或開啟Workspaces集合中的現有工作區。
使用 Close 成員函式關閉工作區,以結束工作區工作區工作階段。 Close
關閉您尚未關閉的任何資料庫,並回復任何未認可的交易。
交易
DAO 會在工作區層級管理交易;因此,具有多個開啟資料庫之工作區上的交易會套用至所有資料庫。 例如,如果兩個資料庫有未認可的更新,而且您呼叫 CommitTrans,則會認可所有更新。 如果您想要將交易限制為單一資料庫,則需要個別的工作區物件。
隱含使用預設工作區
MFC 會在下列情況下隱含地使用 DAO 的預設工作區:
如果您建立新的
CDaoDatabase
物件,但未透過現有CDaoWorkspace
物件執行此動作,MFC 會為您建立暫存工作區物件,其對應至 DAO 的預設工作區。 如果您對多個資料庫執行此動作,所有資料庫物件都會與預設工作區相關聯。 您可以透過CDaoDatabase
資料成員存取資料庫的工作區。同樣地,如果您在未提供物件的指標
CDaoDatabase
的情況下建立CDaoRecordset
物件,MFC 會建立暫存資料庫物件,並依延伸模組建立暫存工作區物件。 您可以透過CDaoRecordset
數據成員存取記錄集的資料庫,並間接存取其工作區。
其他作業
也會提供其他資料庫作業,例如修復損毀的資料庫或壓縮資料庫。
如需直接呼叫 DAO 和 DAO 安全性的相關信息,請參閱 技術附注 54。
繼承階層架構
CDaoWorkspace
需求
標頭: afxdao.h
CDaoWorkspace::Append
呼叫 Create 之後呼叫此成員函式。
virtual void Append();
備註
Append
將新建立的工作區物件附加至資料庫引擎的 Workspaces 集合。 工作區不會在資料庫引擎會話之間保存;它們只會儲存在記憶體中,而不是儲存在磁碟上。 您不需要附加工作區;如果您未這麼做,您仍然可以使用它。
附加的工作區會保留在 Workspaces 集合中,處於作用中開啟狀態,直到您呼叫其 Close 成員函式為止。
如需相關信息,請參閱 DAO 說明中的
CDaoWorkspace::BeginTrans
呼叫此成員函式以起始交易。
void BeginTrans();
備註
呼叫 BeginTrans
之後,對數據或資料庫結構的更新會在認可交易時生效。 因為工作區會定義單一交易空間,因此交易會套用至工作區中的所有開啟資料庫。 有兩種方式可以完成交易:
呼叫 CommitTrans 成員函式來認可交易,並將變更儲存至數據源。
或呼叫 Rollback 成員函式來取消交易。
當交易擱置時關閉工作區對象或資料庫物件,則會回復所有暫止的交易。
如果您需要將某個 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 自變數中使用 dbEncrypt
或 dbDecrypt
,指定在壓縮資料庫時加密或解密資料庫。 如果您省略加密常數,或同時包含 dbDecrypt
和 dbEncrypt
, 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 說明中的「密碼屬性」主題。
備註
整體建立程式為:
建構 CDaoWorkspace 物件。
呼叫對象的
Create
成員函式,以建立基礎 DAO 工作區。 您必須指定工作區名稱。如果您想要將工作區新增至資料庫引擎的 Workspaces 集合,可以選擇性地呼叫 Append 。 您可以使用工作區,而不附加工作區。
Create
呼叫之後,工作區對象處於開啟狀態,可供使用。 您不會在 之後Create
呼叫 Open
。 如果工作區已存在於 Workspaces 集合中,則不會呼叫 Create
。 Create
如果尚未為您的應用程式初始化資料庫引擎,則會初始化資料庫引擎。
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
呼叫這個成員函式,以取得 Windows 登錄中 jet 資料庫引擎初始化設定Microsoft的位置。
static CString PASCAL GetIniPath();
傳回值
CString
,包含登錄位置。
備註
您可以使用位置來取得資料庫引擎設定的相關信息。 傳回的信息實際上是登錄子機碼的名稱。
如需相關信息,請參閱 DAO 說明中的
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 版建立的資料庫不需要呼叫 Idle
。 Idle
僅適用於以舊版建立的資料庫。
讀取鎖定通常會移除,而且只有在沒有其他動作(包括滑鼠移動)發生時,才會更新本機動態集類型記錄集物件中的數據。 如果您定期呼叫 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
成員函式只能在開啟工作區之後呼叫,但下列在資料庫引擎上運作的成員函式可在建構C++對象之後使用,但在呼叫 Open
之前提供:
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)。 密碼會區分大小寫。
備註
您設定的預設密碼會套用至您在呼叫后建立的新工作區。 當您建立後續工作區時,不需要在建立呼叫中指定密碼。
若要使用此成員函式:
CDaoWorkspace
建構 物件,但不呼叫Create
。SetDefaultPassword
呼叫 ,並視需要呼叫 SetDefaultUser。呼叫
Create
此工作區對象或後續物件,而不指定密碼。
根據預設,DefaultUser 屬性會設定為 “admin”,而 DefaultPassword 屬性會設定為空字串串 (“” )。
如需安全性的詳細資訊,請參閱 DAO 說明中的主題。 如需相關信息,請參閱 DAO 說明中的
CDaoWorkspace::SetDefaultUser
呼叫這個成員函式,以設定資料庫引擎在沒有特定使用者名稱的情況下建立工作區物件時所使用的預設用戶名稱。
static void PASCAL SetDefaultUser(LPCTSTR lpszDefaultUser);
參數
lpszDefaultUser
默認用戶名稱。 使用者名稱長度可以是 1 - 20 個字元,且包含字母字元, 輔色字元、數位、空格和符號,除了: "
(引號)、 /
(正斜線)、(反斜線)、 [ ]
\
(括號 :
)、(冒 |
號)、(管 <
線)、(小於 >
符號)、(大於 +
正負號)、(加 =
號)、(等號 ;
,
)、(逗號)、(問號 *
)、(星號)、前置空格和控制字元(ASCII 00 至 ASCII 31)。 如需相關信息,請參閱 DAO 說明中的「UserName 屬性」主題。
備註
您設定的預設使用者名稱會套用至您在呼叫後建立的新工作區。 當您建立後續工作區時,不需要在 [建立] 呼叫中指定用戶名稱。
若要使用此成員函式:
CDaoWorkspace
建構 物件,但不呼叫Create
。SetDefaultUser
呼叫 ,並視需要呼叫 SetDefaultPassword。呼叫
Create
此工作區對象或後續物件,而不指定用戶名稱。
根據預設,DefaultUser 屬性會設定為 “admin”,而 DefaultPassword 屬性會設定為空字串串 (“” )。
如需相關信息,請參閱 DAO 說明中的
CDaoWorkspace::SetIniPath
呼叫此成員函式,以指定 Microsoft Jet 資料庫引擎的 Windows 登錄設定位置。
static void PASCAL SetIniPath(LPCTSTR lpszRegistrySubKey);
參數
lpszRegistrySubkey
字串,包含 Windows 登錄子機碼的名稱,以取得可安裝 ISAM 資料庫所需的Microsoft Jet 資料庫引擎設定或參數的位置。
備註
只有在您需要指定特殊設定時,才呼叫 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
類