共用方式為


CRecordset::Open

藉由擷取資料表或執行資料錄集所代表的查詢來開啟資料錄集。

virtual BOOL Open( 
   UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, 
   LPCTSTR lpszSQL = NULL, 
   DWORD dwOptions = none  
);

參數

  • nOpenType
    接受預設值, AFX_DB_USE_DEFAULT_TYPE或使用從 enum OpenType的下列其中一個值:

    • 使用雙向捲動的CRecordset::dynaset A 資料錄集。 成員資格和排序資料錄所決定,當開啟資料錄集時,不過,其他使用者所做的變更至資料值可以看見下列擷取作業。 也稱為動態集是索引鍵集驅動資料錄集。

    • 使用雙向捲動的CRecordset::snapshot A 靜態資料錄集。 在開啟時,成員資格和排序資料錄已決定的資料錄集;,當資料錄被擷取時,資料值決定。 其他使用者所做的變更不可見,直到資料錄集關閉再重新開啟。

    • 使用雙向捲動的CRecordset::dynamic A 資料錄集。 其他使用者所做的變更會使用成員資格,順序和資料值可以看見下列擷取作業。 請注意許多 ODBC 驅動程式不支援這種資料錄集。

    • 只有向前捲動的CRecordset::forwardOnly 是唯讀的資料錄集。

      如需 CRecordset,預設值為 CRecordset::snapshot。 預設值機制可讓 Visual C++ 精靈與 CRecordset ODBC 和 DAO CDaoRecordset互動,有不同的預設值。

    如需這些資料錄集類型的詳細資訊,請參閱本文 資料錄集 (ODBC)。 如需相關資訊,請參閱 Microsoft 知識庫文件<使用區塊和可捲動游標 Windows SDK>。

    警告

    如果所要求的型別不支援,架構會擲回例外狀況。

  • lpszSQL
    包含下列其中一個字串的指標:

    • NULL 指標。

    • 資料表的名稱。

    • SELECT SQL 陳述式 (選擇性地使用 SQL WHEREORDER BY 子句)。

    • 指定預先定義查詢 (預存程序) 的名稱 呼叫 陳述式。 請特別小心不要插入在大括號和 呼叫 關鍵字之間的空白字元。

    如需這個字串的詳細資訊,請參閱表以及有關 ClassWizard 角色的討論在註解中。

    注意事項注意事項

    資料行的順序在結果集的必須符合 RFX 的命令或在您的 DoFieldExchange 或函式的 DoBulkFieldExchange Bulk RFX 函式的覆寫。

  • dwOptions
    可以指定值的組合的位元遮罩如下所列。 其中某些互斥 (Mutually Exclusive)。 預設值是 none

    • CRecordset::none 未設定的選項。 這個參數值是互斥 (Mutually Exclusive) 與其他值。 根據預設,資料錄集的可更新 編輯刪除 並允許附加 AddNew的新資料錄。 Updatability 取決於資料來源中以及在 nOpenType 選取您指定。 大量加入的無法進行最佳化。 大量資料列擷取不會實作。 刪除的資料錄將在資料錄巡覽時略過。 書籤無法使用。 自動變更欄位檢查中實作。

    • CRecordset::appendOnly 不允許 編輯刪除 在資料錄集。 只允許 AddNew 。 這個選項與互斥 CRecordset::readOnly

    • CRecordset::readOnly 開啟資料錄集為唯讀。 這個選項與互斥 CRecordset::appendOnly

    • 使用CRecordset::optimizeBulkAdd 備製 SQL 陳述式的最佳化一次加入大量資料錄。 只有在您不是使用 ODBC API 函式 SQLSetPos 更新資料錄集,會套用。 第一次更新判斷哪些欄位標記為已變更。 這個選項與互斥 CRecordset::useMultiRowFetch

    • CRecordset::useMultiRowFetch 實作大量資料列擷取允許多行擷取單一擷取作業。 這是一種進階功能來改善效能,不過,大量資料錄欄位交換 ClassWizard 不受支援。 這個選項與互斥 CRecordset::optimizeBulkAdd。 請注意,如果您指定 CRecordset::useMultiRowFetch,然後這個選項 CRecordset::noDirtyFieldCheck 會自動開啟 (雙重緩衝則不可用);在順向資料錄集,這個選項 CRecordset::useExtendedFetch 會自動開啟。 如需大量資料列擷取的詳細資訊,請參閱本文 資料錄集:擷取大量資料錄 (ODBC)

    • CRecordset::skipDeletedRecords 略過所有已刪除的資料錄,當巡覽資料錄集時。 這會降低在某些相對擷取的效能。 這個選項不適用於順向資料錄集。 如果您只使用 nRows 參數的 移動 設為 0 和 CRecordset::skipDeletedRecords 選取集合, 移動 會判斷提示。 請注意 CRecordset::skipDeletedRecords 類似 驅動程式包裝,也就是說,刪除的資料列從資料錄集移除。 不過,因此,如果您的驅動程式包裝資料錄,則它會略過您只要刪除的記錄而言,,當開啟資料錄集時,不會略過其他使用者刪除資料錄。 CRecordset::skipDeletedRecords 會略過其他使用者刪除資料列。

    • CRecordset::useBookmarks May "在資料錄集為書籤,則為,如果支援。 書籤慢的資料,但是會改善資料巡覽的效能。 在順向資料錄集的無效。 如需詳細資訊,請參閱本文 資料錄集:書籤和絕對位置 (ODBC)

    • CRecordset::noDirtyFieldCheck 關閉自動變更欄位檢查 (雙重緩衝)。 這會改善效能,不過,您必須手動標示欄位標記為已變更呼叫 SetFieldDirtySetFieldNull 成員函式。請注意在類別 CRecordset 的雙重緩衝類似於類別中 CDaoRecordset的雙重緩衝。 不過,在 CRecordset,就無法啟用個別欄位的雙重緩衝,您可讓它所有欄位的或停用之所有欄位的。 請注意,如果您指定選項 CRecordset::useMultiRowFetch,然後 CRecordset::noDirtyFieldCheck 會自動開啟,不過, SetFieldDirtySetFieldNull 在實作大量資料列擷取的資料錄集不能使用。

    • CRecordset::executeDirect 未使用準備的 SQL 陳述式。 為了提高效能,因此,如果 Requery 成員函式永遠不會呼叫,指定選項。

    • 而不是 SQLFetchCRecordset::useExtendedFetch 實作 SQLExtendedFetch 。 這在實作擷取在順向資料錄集的大量資料而設計。 如果您在順向資料錄集指定選項,則 CRecordset::useMultiRowFetchCRecordset::useExtendedFetch 會自動開啟。

    • CRecordset::userAllocMultiRowBuffers 使用者會配置資料的儲存緩衝區。 如果您想要將儲存,請使用 CRecordset::useMultiRowFetch 一起使用這個選項;否則,架構會自動將必要的儲存體。 如需詳細資訊,請參閱本文 資料錄集:擷取大量資料錄 (ODBC)。 請注意, CRecordset::userAllocMultiRowBuffers 指定的,而不指定 CRecordset::useMultiRowFetch 造成失敗的判斷提示。

傳回值

如果不是零,則成功開啟 CRecordset 物件;則為 0,如果 CDatabase::Open (如果呼叫) 會傳回 0。

備註

您必須呼叫此成員函式來執行資料錄集定義的查詢。 在呼叫 開啟之前,您必須在建構資料錄集物件。

資料來源的資料錄集的連接取決於您在呼叫之前 開啟建構資料錄集。 如果您傳遞至未連接至資料來源的資料錄集建構函式的 CDatabase 物件,這個成員函式使用 GetDefaultConnect 嘗試開啟資料庫物件。 如果您傳遞 NULL 至資料錄集建構函式,建構您的 CDatabase 物件和 開啟 嘗試連接的資料庫物件。 如需在關閉資料錄集和連接的詳細資料。這些變更的情況下,請參閱 關閉

注意事項注意事項

至資料來源的存取是透過 CRecordset 物件一定會是共用的。不同於 CDaoRecordset 類別,您不能使用 CRecordset 物件開啟以獨佔存取的資料來源。

當您呼叫時, 開啟查詢,通常 SELECT SQL 陳述式,選項會根據標準的記錄顯示在下表中。

lpszSQL 參數的值

判斷選取的資料錄

範例

NULL

GetDefaultSQL傳回的字串。

 

SQL 資料表名稱

資料表清單中的所有資料行。 DoFieldExchangeDoBulkFieldExchange的。

"Customer"

預先定義查詢 (預存程序名稱)

資料行定義查詢時傳回。

"{call OverDueAccts}"

SELECT 資料行清單 FROM 資料表清單。

從指定的資料表特定資料行。

"SELECT CustId, CustName FROM

Customer"

警告

請特別小心在 SQL 字串不會插入額外的空白字元。例如,在中,如果您將在大括號和 呼叫 關鍵字之間的空白字元, MFC 會誤解的 SQL 字串,因為資料表名稱並將其加入 SELECT 陳述式內,會導致擲回例外狀況。同樣地,因此,如果您的預先定義查詢使用輸出參數,請不要插入在大括號之間的空白字元和「?」符號。最後,您無法插入空白字元在大括弧之前在 呼叫 陳述式或在 SELECT 關鍵字之前。 SELECT 陳述式。

通常是 NULL 程序傳遞至 開啟;在這種情況下, 開啟 呼叫 GetDefaultSQL。 如果您正在使用衍生的 CRecordset 類別,讓您在 GetDefualtSQL ClassWizard 指定資料表名稱。 您可以在 lpszSQL 參數中指定其他資訊。

您所傳遞, 開啟 建構查詢的最後的 SQL 字串 (可能是 SQL 字串 WHERE ,並 ORDER BY 子句附加至 lpszSQL 字串您傳遞) 來執行查詢。 您可以藉由呼叫 GetSQL 檢查建構的字串在呼叫 開啟之後。 如需資料錄集運作的其他詳細資料建構 SQL 陳述式並選取資料錄,請參閱本文 資料錄集:資料錄集選取資料錄的方式 (ODBC)

您的資料錄集類別的欄位資料成員繫結至選取的資料行。 如果有任何傳回的資料錄,第一筆資料錄會變成目前的資料錄。

如果您想要將資料錄集選項,例如篩選或排序,請指定這些,在建構資料錄集物件之後,但是,在您呼叫之前 開啟。 如果您想要重新整理資料錄集的資料錄,資料錄集已經開啟後,請呼叫 重新查詢

如需詳細資訊,包括其他範例,請參閱 Microsoft 知識庫文件 資料錄集 (ODBC)資料錄集:資料錄集選取資料錄的方式 (ODBC)資料錄集:建立和關閉資料錄集 (ODBC)

例外狀況

這個方法會擲回型別 CDBException* 和 **CMemoryException***的例外狀況。

範例

開啟 呼叫的程式碼範例會示範不同的表單。

// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived 
// objects

// Open rs using the default SQL statement, implement bookmarks, and turn 
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks | 
   CRecordset::noDirtyFieldCheck);

// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));

// Accept all defaults
rsDefault.Open();

需求

Header: afxdb.h

請參閱

參考

CRecordset 類別

階層架構圖

CRecordset::CRecordset

CRecordset::Close

CRecordset::GetDefaultSQL

CRecordset::GetSQL

CRecordset::m_strFilter

CRecordset::m_strSort

CRecordset::Requery