共用方式為


CDaoRecordset 類別

表示選取自資料來源的資料錄集。

注意

透過 Office 2013 支援資料存取物件 (DAO)。 DAO 3.6 是最終版本,而且已經過時。

語法

class CDaoRecordset : public CObject

成員

公用建構函式

名稱 描述
CDaoRecordset::CDaoRecordset 建構 CDaoRecordset 物件。

公用方法

名稱 描述
CDaoRecordset::AddNew 準備新增記錄。 呼叫 Update 以完成新增。
CDaoRecordset::CanAppend 如果可以透過 AddNew 成員函式將新記錄新增至記錄集,則傳回非零。
CDaoRecordset::CanBookmark 如果記錄集支援書籤,則傳回非零。
CDaoRecordset::CancelUpdate 因編輯或 AddNew 作業而取消任何擱置的更新
CDaoRecordset::CanRestart 如果 可以呼叫 Requery 再次執行記錄集的查詢,則傳回非零。
CDaoRecordset::CanScroll 如果您可以捲動記錄,則傳回非零。
CDaoRecordset::CanTransact 如果數據源支援交易,則傳回非零。
CDaoRecordset::CanUpdate 如果記錄集可以更新,則傳回非零值(您可以新增、更新或刪除記錄)。
CDaoRecordset::Close 關閉記錄集。
CDaoRecordset::D elete 從記錄集刪除當前記錄。 您必須在刪除之後明確地捲動至另一筆記錄。
CDaoRecordset::DoFieldExchange 呼叫 以在記錄集的欄位數據成員與數據源上的對應記錄之間交換數據(雙向)。 實作 DAO 記錄欄位交換 (DFX)。
CDaoRecordset::Edit 準備變更目前的記錄。 呼叫 Update 以完成編輯。
CDaoRecordset::FillCache 針對包含 ODBC 數據來源之數據的記錄集物件,填滿本機快取的所有或部分。
CDaoRecordset::Find 在符合指定準則的動態集類型記錄集中,找出特定字串的第一個、下一個、上一個或最後一個位置,並讓該記錄成為當前記錄。
CDaoRecordset::FindFirst 找出符合指定準則的動態集類型或快照類型記錄集中的第一筆記錄,並將該記錄設為當前記錄。
CDaoRecordset::FindLast 找出符合指定準則的動態集類型或快照集類型記錄集中的最後一筆記錄,並將該記錄設為當前記錄。
CDaoRecordset::FindNext 找出符合指定準則的動態集類型或快照集類型記錄集中的下一筆記錄,並將該記錄設為當前記錄。
CDaoRecordset::FindPrev 找出符合指定準則的動態集類型或快照集類型記錄集中的上一筆記錄,並將該記錄設為當前記錄。
CDaoRecordset::GetAbsolutePosition 傳回 recordset 物件目前記錄的記錄編號。
CDaoRecordset::GetBookmark 傳回值,表示記錄上的書籤。
CDaoRecordset::GetCacheSize 傳回值,指定動態集類型記錄集中的記錄數目,其中包含要從 ODBC 數據源本機快取的數據。
CDaoRecordset::GetCacheStart 傳回值,指定要快取之記錄集中第一筆記錄的書籤。
CDaoRecordset::GetCurrentIndex CString 回 ,其中包含索引、數據表類型 CDaoRecordset上最近使用之索引的名稱。
CDaoRecordset::GetDateCreated 傳回建立物件基礎基表的 CDaoRecordset 日期和時間
CDaoRecordset::GetDateLastUpdated 傳回對物件基礎 CDaoRecordset 基表設計所做的最近變更的日期和時間。
CDaoRecordset::GetDefaultDBName 傳回預設數據源的名稱。
CDaoRecordset::GetDefaultSQL 呼叫 以取得要執行的預設 SQL 字串。
CDaoRecordset::GetEditMode 傳回值,這個值表示目前記錄的編輯狀態。
CDaoRecordset::GetFieldCount 傳回值,表示記錄集中的欄位數目。
CDaoRecordset::GetFieldInfo 傳回記錄集中欄位的特定類型資訊。
CDaoRecordset::GetFieldValue 傳回記錄集中欄位的值。
CDaoRecordset::GetIndexCount 擷取記錄集基礎數據表中的索引數目。
CDaoRecordset::GetIndexInfo 傳回索引的各種資訊。
CDaoRecordset::GetLastModifiedBookmark 用來判斷最近新增或更新的記錄。
CDaoRecordset::GetLockingMode 傳回值,這個值表示編輯期間作用中的鎖定類型。
CDaoRecordset::GetName CString 回 ,其中包含記錄集的名稱。
CDaoRecordset::GetParamValue 擷取儲存在基礎 DAOParameter 物件中之指定參數的目前值。
CDaoRecordset::GetPercentPosition 傳回目前記錄的位置,做為記錄總數的百分比。
CDaoRecordset::GetRecordCount 傳回在 recordset 物件中存取的記錄數目。
CDaoRecordset::GetSQL 取得用來選取記錄集記錄的 SQL 字串。
CDaoRecordset::GetType 呼叫 以判斷記錄集的類型:數據表類型、動態集類型或快照集類型。
CDaoRecordset::GetValidationRule CString 回 ,其中包含值,該值會在輸入欄位時驗證數據。
CDaoRecordset::GetValidationText 擷取不符合驗證規則時所顯示的文字。
CDaoRecordset::IsBOF 如果記錄集位於第一筆記錄之前,則傳回非零。 沒有目前的記錄。
CDaoRecordset::IsDeleted 如果記錄集位於已刪除的記錄上,則傳回非零。
CDaoRecordset::IsEOF 如果記錄集位於最後一筆記錄之後,則傳回非零。 沒有目前的記錄。
CDaoRecordset::IsFieldDirty 如果當前記錄中的指定欄位已變更,則傳回非零。
CDaoRecordset::IsFieldNull 如果目前記錄中的指定欄位為 Null,則傳回非零值(沒有值)。
CDaoRecordset::IsFieldNullable 如果目前記錄中指定的欄位可以設定為 Null,則傳回非零值。
CDaoRecordset::IsOpen 如果 先前已呼叫 Open ,則傳回非零。
CDaoRecordset::Move 將記錄集放置在任一方向上從目前記錄指定的記錄數目。
CDaoRecordset::MoveFirst 將當前記錄放在記錄集中的第一筆記錄上。
CDaoRecordset::MoveLast 將當前記錄放在記錄集中的最後一筆記錄上。
CDaoRecordset::MoveNext 將當前記錄放在記錄集中的下一筆記錄上。
CDaoRecordset::MovePrev 將當前記錄放在記錄集中的上一筆記錄上。
CDaoRecordset::Open 從數據表、動態集或快照集建立新的記錄集。
CDaoRecordset::Requery 再次執行記錄集的查詢,以重新整理選取的記錄。
CDaoRecordset::Seek 找出索引數據表類型 recordset 物件中的記錄,該物件符合目前索引的指定準則,並使該記錄成為當前記錄。
CDaoRecordset::SetAbsolutePosition 設定 recordset 物件目前記錄的記錄編號。
CDaoRecordset::SetBookmark 將記錄集放在包含指定書籤的記錄上。
CDaoRecordset::SetCacheSize 設定值,指定動態集類型記錄集中的記錄數目,其中包含要從ODBC數據源本機快取的數據。
CDaoRecordset::SetCacheStart 設定值,指定要快取之記錄集中第一筆記錄的書籤。
CDaoRecordset::SetCurrentIndex 呼叫 以在數據表類型記錄集上設定索引。
CDaoRecordset::SetFieldDirty 將當前記錄中的指定欄位標示為已變更。
CDaoRecordset::SetFieldNull 將目前記錄中指定欄位的值設定為 Null(沒有值)。
CDaoRecordset::SetFieldValue 設定記錄集中欄位的值。
CDaoRecordset::SetFieldValueNull 將記錄集中的域值設定為 Null。 (沒有值)。
CDaoRecordset::SetLockingMode 設定值,這個值表示在編輯期間要生效的鎖定類型。
CDaoRecordset::SetParamValue 設定儲存在基礎 DAOParameter 物件中的指定參數目前值
CDaoRecordset::SetParamValueNull 將指定參數的目前值設定為 Null(沒有值)。
CDaoRecordset::SetPercentPosition 將當前記錄的位置設定為對應至記錄集中記錄總數百分比的位置。
CDaoRecordset::Update AddNew 由將新的或編輯的數據儲存在數據源上,以完成 或 Edit 作業。

公用資料成員

名稱 描述
CDaoRecordset::m_bCheckCacheForDirtyFields 包含旗標,指出欄位是否自動標示為已變更。
CDaoRecordset::m_nFields 包含記錄集類別中的欄位資料成員數目,以及數據源中記錄集所選取的數據行數目。
CDaoRecordset::m_nParams 包含記錄集類別中的參數數據成員數目—記錄集查詢所傳遞的參數數目
CDaoRecordset::m_pDAORecordset 記錄集物件基礎之 DAO 介面的指標。
CDaoRecordset::m_pDatabase 這個結果集的源資料庫。 包含 CDaoDatabase 物件的指標
CDaoRecordset::m_strFilter 包含用來建構 SQL WHERE 語句的字串。
CDaoRecordset::m_strSort 包含用來建構 SQL ORDER BY 語句的字串。

備註

稱為「記錄集」 CDaoRecordset 的物件有下列三種形式:

  • 數據表類型記錄集代表基表,可用來檢查、新增、變更或刪除單一資料庫數據表的記錄。

  • Dynaset 類型記錄集是可更新記錄的查詢結果。 這些記錄集是一組記錄,可用來檢查、新增、變更或刪除基礎資料庫數據表或數據表中的記錄。 動態集類型記錄集可以包含資料庫中一或多個數據表的欄位。

  • 快照類型記錄集是一組記錄的靜態複本,可用來尋找數據或產生報表。 這些記錄集可以包含資料庫中一或多個數據表的欄位,但無法更新。

每一種記錄集形式都代表一組在開啟記錄集時固定的記錄。 當您捲動至數據表類型記錄集或動態集類型記錄集中的記錄時,它會反映記錄集開啟之後對記錄所做的變更,不論是由其他使用者或應用程式中的其他記錄集。 (無法更新快照類型記錄集。您可以直接使用 CDaoRecordset ,或從 CDaoRecordset衍生應用程式特定的記錄集類別。 接著,您可以:

  • 捲動記錄。

  • 使用 Seek 設定索引並快速尋找記錄(僅限數據表類型記錄集)。

  • 根據字串比較來尋找記錄:“<”、“=”、“<=>”、“=”或 “>” (dynaset-type 和 snapshot-type recordsets)。

  • 更新記錄並指定鎖定模式(快照類型記錄集除外)。

  • 篩選記錄集以限制它從數據源上可用的記錄選取的記錄。

  • 排序記錄集。

  • 將記錄集參數化,以在運行時間之前不知道的資訊來自定義其選取範圍。

類別 CDaoRecordset 提供類似於類別 CRecordset的介面。 主要差異在於類別 CDaoRecordset 會透過以 OLE 為基礎的數據存取物件 (DAO) 來存取數據。 類別 CRecordset 會透過 Open Database Connectivity (ODBC) 和該 DBMS 的 ODBC 驅動程式來存取 DBMS。

注意

DAO 資料庫類別與以開放式資料庫連接性 (ODBC) 為基礎的 MFC 資料庫類別不同。 所有 DAO 資料庫類別名稱都有 「CDao」 前置詞。 您仍然可以使用 DAO 類別存取 ODBC 數據源;DAO 類別通常會提供優越的功能,因為它們專屬於 Microsoft Jet 資料庫引擎。

您可以直接使用 CDaoRecordset 或從 CDaoRecordset衍生類別。 若要在任一情況下使用記錄集類別,請開啟資料庫並建構 recordset 物件,並將建構函式傳遞至物件的 CDaoDatabase 指標。 您也可以建構 CDaoRecordset 物件,並讓 MFC 為您建立暫存 CDaoDatabase 物件。 然後呼叫記錄集的 Open 成員函式,指定對象是資料表類型記錄集、動態集類型記錄集或快照類型記錄集。 呼叫 Open 會從資料庫選取數據,並擷取第一筆記錄。

使用對象的成員函式和數據成員,捲動記錄並操作記錄。 可用的作業取決於對像是數據表類型記錄集、動態集類型記錄集或快照集類型記錄集,以及它是可更新還是只讀的,這取決於資料庫或開放式資料庫連線能力 (ODBC) 數據源的功能。 若要重新整理自呼叫之後 Open 可能已變更或新增的 記錄,請呼叫物件的 Requery 成員函式。 呼叫對象的 Close 成員函式,並在完成此函式時終結物件。

CDaoRecordset使用 DAO 記錄欄位交換 (DFX) 支援透過類型安全C++或CDaoRecordsetCDaoRecordset衍生類別的成員讀取和更新記錄欄位。 您也可以在資料庫中實作數據行的動態系結,而不使用使用 GetFieldValue 和 SetFieldValue 的 DFX 機制。

如需相關信息,請參閱 DAO 說明中的「Recordset 物件」主題。

繼承階層架構

CObject

CDaoRecordset

需求

標頭: afxdao.h

CDaoRecordset::AddNew

呼叫這個成員函式,將新記錄新增至數據表類型或動態集類型記錄集。

virtual void AddNew();

備註

記錄的欄位一開始為 Null。 (在資料庫術語中,Null 表示「沒有值」,而且與C++中的 NULL 不同。若要完成作業,您必須呼叫 Update 成員函式。 Update 儲存您對資料源的變更。

警告

如果您編輯記錄,然後捲動至另一筆記錄而不呼叫 Update,則您的變更會遺失而不發出警告。

如果您藉由呼叫 AddNew 將記錄新增至動態集類型記錄集,記錄就會顯示在記錄集中,並包含在基礎數據表中,讓任何新 CDaoRecordset 物件可見該記錄。

新記錄的位置取決於記錄集的類型:

  • 在動態集類型記錄集中,不保證插入新記錄。 基於效能和並行的原因,Microsoft Jet 3.0 變更此行為。 如果您的目標是將新加入的記錄設為當前記錄,請取得上次修改記錄的書籤,並移至該書籤:
rs.SetBookmark(rs.GetLastModifiedBookmark());
  • 在已指定索引的數據表類型記錄集中,記錄會以排序順序在適當的位置傳回。 如果未指定任何索引,則會在記錄集結尾傳回新的記錄。

使用 AddNew 前的記錄會維持目前狀態。 如果您想要讓新記錄成為目前的記錄,而且記錄集支援書籤,請將 SetBookmark 呼叫為基礎 DAO 記錄集物件的 LastModified 屬性設定所識別的書籤。 這樣做有助於判斷新增記錄中計數器 (自動遞增) 欄位的值。 如需詳細資訊,請參閱 GetLastModifiedBookmark

如果資料庫支援交易,您可以進行 AddNew 交易的呼叫部分。 如需交易的詳細資訊,請參閱 CDaoWorkspace 類別。 您應該先呼叫 CDaoWorkspace::BeginTrans ,再呼叫 AddNew

呼叫成員函式尚未呼叫的記錄集Open是非法AddNew的。 CDaoException如果您呼叫AddNew無法附加的記錄集,則會擲回 。 您可以呼叫 CanAppend 來判斷記錄集是否可更新。

架構會標示已變更的欄位數據成員,以確保它們會由 DAO 記錄欄位交換 (DFX) 機制寫入資料源上的記錄。 變更欄位的值通常會自動設定欄位,因此您很少需要自行呼叫 SetFieldDirty ,但有時候您可能想要確保數據行會明確更新或插入,而不論欄位數據成員中的值為何。 DFX 機制也會使用 PSEUDO NULL。 如需詳細資訊,請參閱 CDaoFieldExchange::m_nOperation

如果未使用雙緩衝機制,則變更欄位的值不會自動將字段設定為已變更。 在此情況下,必須明確設定欄位已變更。 m_bCheckCacheForDirtyFields中包含的旗標會控制此自動欄位檢查。

注意

如果記錄是雙緩衝處理(也就是啟用自動字段檢查),則呼叫 CancelUpdate 會將成員變數還原到他們之前或Edit呼叫過AddNew的值。

如需相關信息,請參閱 DAO 說明中的「AddNew 方法」、「CancelUpdate 方法」、「LastModified 屬性」和「EditMode 屬性」主題。

CDaoRecordset::CanAppend

呼叫這個成員函式,以判斷先前開啟的記錄集是否允許您呼叫 AddNew 成員函式來新增記錄。

BOOL CanAppend() const;

傳回值

如果記錄集允許新增記錄,則為非零;否則為 0。 CanAppend 如果您以唯讀模式開啟記錄集,則會傳回 0。

備註

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

CDaoRecordset::CanBookmark

呼叫這個成員函式,以判斷先前開啟的記錄集是否允許您使用書籤個別標記記錄。

BOOL CanBookmark();

傳回值

如果記錄集支援書籤,則為非零,否則為 0。

備註

如果您使用記錄集完全以 Microsoft Jet 資料庫引擎數據表為基礎,則除了標示為正向卷動記錄集的快照類型記錄集之外,還可以使用書籤。 其他資料庫產品(外部 ODBC 數據源)可能不支援書籤。

如需相關信息,請參閱 DAO 說明中的「可書籤屬性」主題。

CDaoRecordset::CancelUpdate

成員CancelUpdate函式會因為 EditAddNew 作業而取消任何擱置的更新。

virtual void CancelUpdate();

備註

例如,如果應用程式呼叫 EditAddNew 成員函式,但尚未呼叫 UpdateCancelUpdate則會取消呼叫 或 AddNew 之後Edit所做的任何變更。

注意

如果記錄是雙緩衝處理(也就是啟用自動字段檢查),則呼叫 CancelUpdate 會將成員變數還原到他們之前或Edit呼叫過AddNew的值。

Edit如果沒有 或 AddNew 作業擱置,CancelUpdate會導致 MFC 擲回例外狀況。 呼叫 GetEditMode 成員函式,以判斷是否有可以取消的暫止作業。

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

CDaoRecordset::CanRestart

呼叫這個成員函式,藉由呼叫 Requery 成員函式,判斷記錄集是否允許重新啟動其查詢(重新整理其記錄)。

BOOL CanRestart();

傳回值

如果 Requery 可以再次呼叫 來執行記錄集的查詢,則為非零,否則為0。

備註

資料表型態記錄集不支援 Requery

如果Requery不支援,請呼叫 Close,然後呼叫 [開啟] 以重新整理數據。 您可以在參數值變更之後呼叫 Requery 來更新 recordset 物件的基礎參數查詢。

如需相關信息,請參閱 DAO 說明中的「可重新啟動屬性」主題。

CDaoRecordset::CanScroll

呼叫這個成員函式,以判斷記錄集是否允許卷動。

BOOL CanScroll() const;

傳回值

如果您可以捲動記錄,則為非零,否則為 0。

備註

如果您使用呼叫 OpendbForwardOnly,則記錄集只能向前捲動。

如需相關信息,請參閱 DAO 說明中的<使用 DAO 定位當前記錄指標>主題。

CDaoRecordset::CanTransact

呼叫這個成員函式,以判斷記錄集是否允許交易。

BOOL CanTransact();

傳回值

如果基礎數據源支援交易,則為非零,否則為 0。

備註

如需相關信息,請參閱 DAO 說明中的「交易屬性」主題。

CDaoRecordset::CanUpdate

呼叫此成員函式,以判斷是否可以更新記錄集。

BOOL CanUpdate() const;

傳回值

如果記錄集可以更新(新增、更新和刪除記錄),則為非零,否則為 0。

備註

如果基礎數據源是唯讀的,或是當您針對記錄集呼叫 Open 時為 nOptions 指定dbReadOnly,則記錄集可能是只讀的。

如需相關信息,請參閱 DAO 說明中的「AddNew 方法」、「編輯方法」、「刪除方法」、「Update 方法」和「可更新的屬性」主題。

CDaoRecordset::CDaoRecordset

建構 CDaoRecordset 物件。

CDaoRecordset(CDaoDatabase* pDatabase = NULL);

參數

pDatabase
包含 CDaoDatabase 物件的指標或 NULL 值。 如果不是 NULL,而且 CDaoDatabase 尚未呼叫對象的 Open 成員函式來將它連接到數據源,則記錄集會嘗試在自己的 Open 呼叫期間為您開啟它。 如果您傳遞NULL, CDaoDatabase 則會使用從 衍生記錄集類別 CDaoRecordset時所指定的數據源資訊,為您建構並連接物件。

備註

您可以直接使用 CDaoRecordset ,或從 CDaoRecordset衍生應用程式特定的類別。 您可以使用 ClassWizard 來衍生您的記錄集類別。

注意

如果您衍生類別 CDaoRecordset ,則衍生類別必須提供自己的建構函式。 在衍生類別的建構函式中,呼叫 建構函式 ,並將適當的參數傳遞至該建構 CDaoRecordset::CDaoRecordset函式。

將 NULL 傳遞至您的記錄集建構函式,以 CDaoDatabase 自動為您建構並連接 物件。 這是一個實用的快捷方式,不需要您在建構記錄集之前建構及連接 CDaoDatabase 物件。 CDaoDatabase如果物件未開啟,也會為您建立使用預設工作區的 CDaoWorkspace 物件。 如需詳細資訊,請參閱 CDaoDatabase::CDaoDatabase

CDaoRecordset::Close

CDaoRecordset關閉物件會將它從相關聯資料庫中開啟的記錄集集合中移除。

virtual void Close();

備註

因為 Close 不會終結 CDaoRecordset 物件,因此您可以在相同的數據源或不同的數據源上呼叫 Open 來重複使用物件。

所有暫止 的 AddNewEdit 語句都會取消,而且所有暫止的交易都會回復。 如果您想要保留擱置的新增或編輯,請在呼叫每個記錄集之前Close呼叫 Update

您可以在呼叫 之後再次呼叫 Open Close。 這可讓您重複使用 recordset 物件。 更好的替代方案是盡可能呼叫 Requery

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

CDaoRecordset::D elete

呼叫這個成員函式,以刪除開啟的動態集類型或數據表類型 recordset 物件中的當前記錄。

virtual void Delete();

備註

成功刪除之後,記錄集的欄位數據成員會設定為 Null 值,而且您必須明確呼叫其中一個記錄集導覽成員函式(Move、SeekSetBookmark 等等),才能離開已刪除的記錄。 當您從記錄集刪除記錄時,在呼叫 Delete記錄集之前,記錄集中必須有當前記錄,否則 MFC 會擲回例外狀況。

Delete 會移除目前的記錄,並使它無法存取。 雖然您無法編輯或使用已刪除的記錄,但它仍會保持最新狀態。 不過,一旦您移至另一筆記錄,就無法再次將已刪除的記錄重新設為目前的記錄。

警告

記錄集必須可更新,而且當您呼叫 Delete時,記錄集中必須有有效的當前記錄。 例如,如果您刪除記錄,但不要在再次呼叫 Delete 之前捲動到新記錄, Delete 則會 擲回 CDaoException

如果您使用交易並呼叫 CDaoWorkspace::Rollback 成員函式,則可以取消刪除記錄。 如果基表是串聯刪除關聯性中的主要數據表,刪除目前的記錄也可能刪除外部數據表中的一或多個記錄。 如需詳細資訊,請參閱 DAO 說明中的定義「串聯刪除」。

與和Edit不同AddNew,對的呼叫Delete不會接著呼叫 Update

如需相關信息,請參閱 DAO 說明中的「AddNew 方法」、「編輯方法」、「刪除方法」、「Update 方法」和「可更新的屬性」主題。

CDaoRecordset::DoFieldExchange

架構會呼叫這個成員函式,以在記錄集物件的欄位數據成員與數據源上目前記錄的對應數據行之間自動交換數據。

virtual void DoFieldExchange(CDaoFieldExchange* pFX);

參數

pFX
包含物件的指標 CDaoFieldExchange 。 架構已設定此物件,以指定欄位交換作業的內容。

備註

它也會將參數數據成員系結至記錄集選取範圍之 SQL 語句字串中的參數佔位元。 欄位數據的交換,稱為 DAO 記錄欄位交換(DFX),可雙向運作:從 recordset 物件的欄位資料成員到數據源上的記錄欄位,以及從數據源上的記錄到 recordset 物件。 如果您要動態系結資料列,則不需要實 DoFieldExchange作 。

您通常必須針對衍生記錄集類別實 DoFieldExchange 作的唯一動作,就是使用 ClassWizard 建立類別,並指定字段數據成員的名稱和數據類型。 您也可以將程式代碼新增至 ClassWizard 寫入的內容,以指定參數數據成員。 如果要動態系結所有欄位,除非您指定參數數據成員,否則此函式為非使用中。

當您使用 ClassWizard 宣告衍生的記錄集類別時,精靈會為您撰寫 的覆寫 DoFieldExchange ,其類似下列範例:

void CCustSet::DoFieldExchange(CDaoFieldExchange *pFX)
{
   pFX->SetFieldType(CDaoFieldExchange::param);
   DFX_Text(pFX, _T("Param"), m_strParam);
   pFX->SetFieldType(CDaoFieldExchange::outputColumn);
   DFX_Short(pFX, _T("EmployeeID"), m_EmployeeID);
   DFX_Text(pFX, _T("LastName"), m_LastName);
   DFX_Short(pFX, _T("Age"), m_Age);
   DFX_DateTime(pFX, _T("hire_date"), m_hire_date);
   DFX_DateTime(pFX, _T("termination_date"), m_termination_date);

   CDaoRecordset::DoFieldExchange(pFX);
}

CDaoRecordset::Edit

呼叫這個成員函式,以允許變更目前的記錄。

virtual void Edit();

備註

呼叫 Edit 成員函式之後,對當前記錄欄位所做的變更會複製到複製緩衝區。 對記錄進行所需的變更之後,請呼叫 Update 以儲存變更。 Edit 會儲存記錄集數據成員的值。 如果您呼叫 Edit、進行變更,然後再呼叫 Edit 一次,記錄的值就會還原到第一次 Edit 呼叫之前的值。

警告

如果您編輯記錄,然後執行任何移至另一筆記錄的作業,而不先呼叫 Update,您的變更就會遺失,而不會發出警告。 此外,如果您關閉記錄集或父資料庫,則會捨棄已編輯的記錄,而不會發出警告。

在某些情況下,您可能會想要藉由將數據行設為 Null 來更新資料行(不包含任何數據)。 若要這樣做,請使用TRUE的參數呼叫 SetFieldNull 以標示字段 Null;這也會導致數據行更新。 如果您想要將欄位寫入數據源,即使其值尚未變更,請使用TRUE的參數呼叫 SetFieldDirty 。 即使欄位具有 Null 值,也是如此。

架構會標示已變更的欄位數據成員,以確保它們會由 DAO 記錄欄位交換 (DFX) 機制寫入資料源上的記錄。 變更欄位的值通常會自動設定欄位,因此您很少需要自行呼叫 SetFieldDirty ,但有時候您可能想要確保數據行會明確更新或插入,而不論欄位數據成員中的值為何。 DFX 機制也會使用 PSEUDO NULL。 如需詳細資訊,請參閱 CDaoFieldExchange::m_nOperation

如果未使用雙緩衝機制,則變更欄位的值不會自動將字段設定為已變更。 在此情況下,必須明確設定欄位已變更。 m_bCheckCacheForDirtyFields中包含的旗標會控制此自動欄位檢查。

當記錄集物件在多用戶環境中以悲觀方式鎖定時,記錄會從使用到 Edit 更新完成的時間保持鎖定。 如果記錄集處於開放式鎖定狀態,則會鎖定記錄,並與在資料庫中更新之前預先編輯的記錄進行比較。 如果您呼叫 Edit之後記錄已變更,則 Update 作業會失敗,且 MFC 會擲回例外狀況。 您可以使用 變更鎖定模式 SetLockingMode

注意

開放式鎖定一律用於外部資料庫格式,例如 ODBC 和可安裝的ISAM。

呼叫 之後 Edit,目前的記錄會維持目前狀態。 若要呼叫 Edit,必須有目前的記錄。 如果沒有當前記錄,或者記錄集未參考開啟的數據表類型或動態集類型 recordset 物件,就會發生例外狀況。 呼叫 Edit 會導致 CDaoException 在下列情況下擲回 :

  • 沒有目前的記錄。

  • 資料庫或記錄集是唯讀的。

  • 記錄中沒有任何欄位可更新。

  • 資料庫或記錄集已開啟供其他用戶獨佔使用。

  • 另一位用戶已鎖定包含您記錄的頁面。

如果數據源支援交易,您可以進行 Edit 交易的呼叫部分。 您應該在 CDaoWorkspace::BeginTrans 呼叫 Edit 記錄集之前呼叫 ,並在記錄集開啟之後呼叫 。 呼叫CDaoWorkspace::CommitTrans不是用來完成作業的Edit替代Update呼叫。 如需交易的詳細資訊,請參閱 類別 CDaoWorkspace

如需相關信息,請參閱 DAO 說明中的「AddNew 方法」、「編輯方法」、「刪除方法」、「Update 方法」和「可更新的屬性」主題。

CDaoRecordset::FillCache

呼叫這個成員函式,從記錄集快取指定的記錄數目。

void FillCache(
    long* pSize = NULL,
    COleVariant* pBookmark = NULL);

參數

pSize
指定要填入快取的數據列數目。 如果您省略此參數,該值是由基礎 DAO 物件的 CacheSize 屬性設定所決定。

pBookmark
指定 書籤的 COleVariant 。 快取會從這個書籤所指示的記錄開始填入。 如果您省略此參數,快取會從基礎 DAO 物件的 CacheStart 屬性所指示的記錄開始填入。

備註

快取可改善從遠端伺服器擷取或擷取數據的應用程式效能。 快取是本機記憶體中的空間,會保留最近從伺服器擷取的數據,假設應用程式執行時可能會再次要求數據。 要求數據時,Microsoft Jet 資料庫引擎會先檢查快取的數據,而不是從伺服器擷取數據,這需要更多時間。 在非 ODBC 數據源上使用資料快取不會影響,因為數據不會儲存在快取中。

您不需在擷取記錄時等候快取填滿記錄,而是隨時呼叫成員函式來明確填入快取 FillCache 。 這是填滿快取的較快速方式,因為 FillCache 會一次擷取數筆記錄,而不是一次擷取一筆記錄。 例如,當每個已篩選的記錄顯示時,您可以讓應用程式呼叫 FillCache 來擷取下一個屏幕記錄。

使用 recordset 物件存取的任何 ODBC 資料庫都可以有本機快取。 若要建立快取,請從遠端數據源開啟 recordset 對象,然後呼叫 SetCacheSize 記錄集的 和 SetCacheStart 成員函式。 如果 lSizelBookmark 建立部分或完全超出 和 SetCacheStartSetCacheSize指定範圍的範圍,則會忽略此範圍以外的記錄集部分,而且不會載入快取中。 如果 FillCache 要求超過保留在遠端數據源中的記錄,則只會擷取剩餘的記錄,而且不會擲回任何例外狀況。

從快取擷取的記錄不會反映其他用戶同時對源數據所做的變更。

FillCache 只會擷取尚未快取的記錄。 若要強制更新所有快取的數據,請使用 lSize 參數等於 0 呼叫成員函式,再呼叫 SetCacheSize lSize 參數等於您原本要求的快取大小,然後呼叫 。 FillCacheSetCacheSize

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

CDaoRecordset::Find

呼叫此成員函式,以使用比較運算符在動態集或快照類型記錄集中尋找特定字串。

virtual BOOL Find(
    long lFindType,
    LPCTSTR lpszFilter);

參數

lFindType
值,表示所需的尋找作業類型。 可能的值是:

  • AFX_DAO_NEXT尋找相符字串的下一個位置。

  • AFX_DAO_PREV尋找相符字串的上一個位置。

  • AFX_DAO_FIRST尋找相符字串的第一個位置。

  • AFX_DAO_LAST尋找相符字串的最後一個位置。

lpszFilter
字串表示式(例如 SQL 語句中的 WHERE 子句,不含 WHERE 一字)用來尋找記錄。 例如:

rs.Find(AFX_DAO_FIRST, _T("EmployeeID = 7"));
rs.Find(AFX_DAO_NEXT, _T("LastName = 'Jones'"));

傳回值

如果找到相符的記錄,則為非零,否則為 0。

備註

您可以找到字串的第一個、下一個、上一個或最後一個實例。 Find 是虛擬函式,因此您可以覆寫它並新增您自己的實作。 FindFirstFindLastFindNextFindPrev 成員函式會呼叫Find成員函式,因此您可以使用 Find 來控制所有 Find 作業的行為。

若要在數據表類型記錄集中尋找記錄,請呼叫 Seek 成員函式。

提示

您擁有的記錄集越小,越有效 Find 。 一般而言,特別是 ODBC 數據,最好建立只擷取所需記錄的新查詢。

如需相關信息,請參閱 DAO 說明中的「FindFirst、FindLast、FindNext、FindPrevious 方法」主題。

CDaoRecordset::FindFirst

呼叫這個成員函式,以尋找符合指定條件的第一筆記錄。

BOOL FindFirst(LPCTSTR lpszFilter);

參數

lpszFilter
字串表示式(例如 SQL 語句中的 WHERE 子句,不含 WHERE 一字)用來尋找記錄。

傳回值

如果找到相符的記錄,則為非零,否則為 0。

備註

成員 FindFirst 函式會從記錄集的開頭開始搜尋,並搜尋到記錄集的結尾。

如果您想要在搜尋中包含所有記錄(不只是符合特定條件的記錄),請使用其中一個Move作業從記錄移至記錄。 若要在數據表類型記錄集中尋找記錄,請呼叫 Seek 成員函式。

如果找不到符合準則的記錄,則目前的記錄指標未確定,並 FindFirst 傳回零。 如果記錄集包含多個符合準則的記錄, FindFirst 請找出第一個出現專案、 FindNext 找出下一個出現專案等等。

警告

如果您編輯目前的記錄,請務必先呼叫 Update 成員函式來儲存變更,再移至另一筆記錄。 如果您移至另一筆記錄而不更新,則變更會遺失,而不會發出警告。

成員函 Find 式會從位置和下表中指定的方向搜尋:

尋找作業 開始 搜尋方向
FindFirst 記錄集的開頭 記錄集結尾
FindLast 記錄集結尾 記錄集的開頭
FindNext 當前記錄 記錄集結尾
FindPrevious 當前記錄 記錄集的開頭

注意

當您呼叫 FindLast時,如果尚未完成,Microsoft Jet 資料庫引擎會在開始搜尋之前完整填入您的記錄集。 第一次搜尋可能需要比後續搜尋更長的時間。

使用其中一個 Find 作業與呼叫 MoveFirstMoveNext不同,不過,這隻會讓第一筆或下一筆記錄成為目前的記錄,而不需要指定條件。 您可以使用Move作業遵循尋找作業。

使用 Find 作業時,請記住下列事項:

  • 如果 Find 傳回非零,則不會定義目前的記錄。 在此情況下,您必須將當前記錄指標定位回有效的記錄。

  • 您無法搭配正向捲動快照集類型記錄集使用 Find 作業。

  • 當您搜尋包含日期的字段時,您應該使用美國日期格式 (month-day-year),即使您未使用美國版的 Microsoft Jet 資料庫引擎;否則,可能找不到相符的記錄。

  • 使用 ODBC 資料庫和大型動態集時,您可能會發現使用 Find 作業的速度很慢,尤其是在使用大型記錄集時。 您可以搭配自定義 ORDERBYWHERE 子句、參數查詢或 CDaoQuerydef 擷取特定索引記錄的物件,來改善效能。

如需相關信息,請參閱 DAO 說明中的「FindFirst、FindLast、FindNext、FindPrevious 方法」主題。

CDaoRecordset::FindLast

呼叫這個成員函式,以尋找符合指定條件的最後一筆記錄。

BOOL FindLast(LPCTSTR lpszFilter);

參數

lpszFilter
字串表示式(例如 SQL 語句中的 WHERE 子句,不含 WHERE 一字)用來尋找記錄。

傳回值

如果找到相符的記錄,則為非零,否則為 0。

備註

成員 FindLast 函式會在記錄集結尾開始搜尋,並向後搜尋記錄集的開頭。

如果您想要在搜尋中包含所有記錄(不只是符合特定條件的記錄),請使用其中一個Move作業從記錄移至記錄。 若要在數據表類型記錄集中尋找記錄,請呼叫 Seek 成員函式。

如果找不到符合準則的記錄,則目前的記錄指標未確定,並 FindLast 傳回零。 如果記錄集包含一筆以上符合準則的記錄, FindFirst 請找出第一個發生次數、 FindNext 找出第一次發生之後的下一個出現專案,依此等。

警告

如果您編輯目前的記錄,請務必先呼叫 Update 成員函式來儲存變更,再移至另一筆記錄。 如果您移至另一筆記錄而不更新,則變更會遺失,而不會發出警告。

使用其中一個 Find 作業與呼叫 MoveFirstMoveNext不同,不過,這隻會讓第一筆或下一筆記錄成為目前的記錄,而不需要指定條件。 您可以使用Move作業遵循尋找作業。

使用 Find 作業時,請記住下列事項:

  • 如果 Find 傳回非零,則不會定義目前的記錄。 在此情況下,您必須將當前記錄指標定位回有效的記錄。

  • 您無法搭配正向捲動快照集類型記錄集使用 Find 作業。

  • 當您搜尋包含日期的字段時,您應該使用美國日期格式 (month-day-year),即使您未使用美國版的 Microsoft Jet 資料庫引擎;否則,可能找不到相符的記錄。

  • 使用 ODBC 資料庫和大型動態集時,您可能會發現使用 Find 作業的速度很慢,尤其是在使用大型記錄集時。 您可以搭配自定義 ORDERBYWHERE 子句、參數查詢或 CDaoQuerydef 擷取特定索引記錄的物件,來改善效能。

如需相關信息,請參閱 DAO 說明中的「FindFirst、FindLast、FindNext、FindPrevious 方法」主題。

CDaoRecordset::FindNext

呼叫這個成員函式,以尋找符合指定條件的下一筆記錄。

BOOL FindNext(LPCTSTR lpszFilter);

參數

lpszFilter
字串表示式(例如 SQL 語句中的 WHERE 子句,不含 WHERE 一字)用來尋找記錄。

傳回值

如果找到相符的記錄,則為非零,否則為 0。

備註

成員 FindNext 函式會在當前記錄開始搜尋,並搜尋到記錄集的結尾。

如果您想要在搜尋中包含所有記錄(不只是符合特定條件的記錄),請使用其中一個Move作業從記錄移至記錄。 若要在數據表類型記錄集中尋找記錄,請呼叫 Seek 成員函式。

如果找不到符合準則的記錄,則目前的記錄指標未確定,並 FindNext 傳回零。 如果記錄集包含多個符合準則的記錄, FindFirst 請找出第一個出現專案、 FindNext 找出下一個出現專案等等。

警告

如果您編輯目前的記錄,請務必先呼叫 Update 成員函式來儲存變更,再移至另一筆記錄。 如果您移至另一筆記錄而不更新,則變更會遺失,而不會發出警告。

使用其中一個 Find 作業與呼叫 MoveFirstMoveNext不同,不過,這隻會讓第一筆或下一筆記錄成為目前的記錄,而不需要指定條件。 您可以使用Move作業遵循尋找作業。

使用 Find 作業時,請記住下列事項:

  • 如果 Find 傳回非零,則不會定義目前的記錄。 在此情況下,您必須將當前記錄指標定位回有效的記錄。

  • 您無法搭配正向捲動快照集類型記錄集使用 Find 作業。

  • 當您搜尋包含日期的字段時,您應該使用美國日期格式 (month-day-year),即使您未使用美國版的 Microsoft Jet 資料庫引擎;否則,可能找不到相符的記錄。

  • 使用 ODBC 資料庫和大型動態集時,您可能會發現使用 Find 作業的速度很慢,尤其是在使用大型記錄集時。 您可以搭配自定義 ORDERBYWHERE 子句、參數查詢或 CDaoQuerydef 擷取特定索引記錄的物件,來改善效能。

如需相關信息,請參閱 DAO 說明中的「FindFirst、FindLast、FindNext、FindPrevious 方法」主題。

CDaoRecordset::FindPrev

呼叫這個成員函式,以尋找符合指定條件的前一筆記錄。

BOOL FindPrev(LPCTSTR lpszFilter);

參數

lpszFilter
字串表示式(例如 SQL 語句中的 WHERE 子句,不含 WHERE 一字)用來尋找記錄。

傳回值

如果找到相符的記錄,則為非零,否則為 0。

備註

成員 FindPrev 函式會從目前記錄開始搜尋,並向後搜尋記錄集的開頭。

如果您想要在搜尋中包含所有記錄(不只是符合特定條件的記錄),請使用其中一個Move作業從記錄移至記錄。 若要在數據表類型記錄集中尋找記錄,請呼叫 Seek 成員函式。

如果找不到符合準則的記錄,則目前的記錄指標未確定,並 FindPrev 傳回零。 如果記錄集包含多個符合準則的記錄, FindFirst 請找出第一個出現專案、 FindNext 找出下一個出現專案等等。

警告

如果您編輯目前的記錄,請務必先呼叫 Update 成員函式來儲存變更,再移至另一筆記錄。 如果您移至另一筆記錄而不更新,則變更會遺失,而不會發出警告。

使用其中一個 Find 作業與呼叫 MoveFirstMoveNext不同,不過,這隻會讓第一筆或下一筆記錄成為目前的記錄,而不需要指定條件。 您可以使用Move作業遵循尋找作業。

使用 Find 作業時,請記住下列事項:

  • 如果 Find 傳回非零,則不會定義目前的記錄。 在此情況下,您必須將當前記錄指標定位回有效的記錄。

  • 您無法搭配正向捲動快照集類型記錄集使用 Find 作業。

  • 當您搜尋包含日期的字段時,您應該使用美國日期格式 (month-day-year),即使您未使用美國版的 Microsoft Jet 資料庫引擎;否則,可能找不到相符的記錄。

  • 使用 ODBC 資料庫和大型動態集時,您可能會發現使用 Find 作業的速度很慢,尤其是在使用大型記錄集時。 您可以搭配自定義 ORDERBYWHERE 子句、參數查詢或 CDaoQuerydef 擷取特定索引記錄的物件,來改善效能。

如需相關信息,請參閱 DAO 說明中的「FindFirst、FindLast、FindNext、FindPrevious 方法」主題。

CDaoRecordset::GetAbsolutePosition

傳回 recordset 物件目前記錄的記錄編號。

long GetAbsolutePosition();

傳回值

從 0 到記錄集中記錄數目的整數。 對應至記錄集中目前記錄的序數位置。

備註

基礎 DAO 物件的 AbsolutePosition 屬性值是以零起始;設定為 0 是指記錄集中的第一筆記錄。 您可以呼叫 GetRecordCount 來判斷記錄集中填入的記錄數目。 呼叫 GetRecordCount 可能需要一些時間,因為它必須存取所有記錄來判斷計數。

如果沒有當前記錄,就像記錄集中沒有記錄時一樣, 會傳回 1。 如果刪除當前記錄,則不會定義 AbsolutePosition 屬性值,而且如果參考了,MFC 就會擲回例外狀況。 對於動態集類型記錄集,新記錄會新增至序列結尾。

注意

這個屬性不是用來做為代理記錄編號。 書籤仍然是保留和傳回指定位置的建議方式,也是將當前記錄放置在所有類型的記錄集物件的唯一方法。 特別是,在刪除指定記錄之前記錄的位置會變更。 如果再次重新建立記錄集,則不保證指定的記錄會有相同的絕對位置,因為記錄集中的個別記錄順序不保證,除非它是使用 ORDERBY 子句以 SQL 語句建立的。

注意

此成員函式僅適用於動態集類型和快照類型記錄集。

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

CDaoRecordset::GetBookmark

呼叫這個成員函式,以取得特定記錄中的書籤值。

COleVariant GetBookmark();

傳回值

傳回值,表示目前記錄上的書籤。

備註

建立或開啟記錄集物件時,如果每個記錄支持記錄,則其每個記錄都已經有唯一的書籤。 呼叫 CanBookmark 以判斷記錄集是否支援書籤。

您可以將書籤的值指派給 COleVariant 物件,以儲存目前記錄的書籤。 若要在移至不同的記錄之後快速傳回此紀錄,請使用對應至該COleVariant物件值的參數呼叫 SetBookmark

注意

呼叫 Requery 會變更 DAO 書籤。

如需相關信息,請參閱 DAO 說明中的「書籤屬性」主題。

CDaoRecordset::GetCacheSize

呼叫這個成員函式以取得快取的記錄數目。

long GetCacheSize();

傳回值

值,指定動態集類型記錄集中的記錄數目,其中包含要從 ODBC 數據源本機快取的數據。

備註

數據快取可改善應用程式透過動態集類型記錄集物件從遠端伺服器擷取資料的效能。 快取是本機記憶體中的空間,會保存最近從伺服器擷取的數據,以防應用程式執行時再次要求數據。 要求數據時,Microsoft Jet 資料庫引擎會先檢查快取要求的數據,而不是從伺服器擷取它,這需要更多時間。 不是來自 ODBC 數據源的數據不會儲存在快取中。

任何 ODBC 數據源,例如附加數據表,都可以有本機快取。

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

CDaoRecordset::GetCacheStart

呼叫這個成員函式,以取得要快取之記錄集中第一筆記錄的書籤值。

COleVariant GetCacheStart();

傳回值

COleVariant,指定要快取之記錄集中第一筆記錄的書籤。

備註

Microsoft Jet 資料庫引擎會從快取要求快取範圍內的記錄,並要求伺服器快取範圍以外的記錄。

注意

從快取擷取的記錄不會反映其他用戶同時對源數據所做的變更。

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

CDaoRecordset::GetCurrentIndex

呼叫這個成員函式,以判斷目前在索引數據表類型 CDaoRecordset 物件中使用的索引。

CString GetCurrentIndex();

傳回值

CString,包含目前與數據表類型記錄集搭配使用的索引名稱。 如果未設定任何索引,則傳回空字串。

備註

此索引是排序數據表類型記錄集中記錄的基礎,而且由 Seek 成員函式用來尋找記錄。

CDaoRecordset物件可以有多個索引,但一次只能使用一個索引(雖然 CDaoTableDef 物件可能已定義數個索引)。

如需相關信息,請參閱 DAO 說明中的「索引物件」主題和定義「目前索引」。

CDaoRecordset::GetDateCreated

呼叫這個成員函式,以擷取建立基表的日期和時間。

COleDateTime GetDateCreated();

傳回值

COleDateTime 物件,其中包含建立基表的日期和時間。

備註

日期和時間設定衍生自建立基表的計算機。

如需相關信息,請參閱 DAO 說明中的「DateCreated、LastUpdated 屬性」主題。

CDaoRecordset::GetDateLastUpdated

呼叫這個成員函式來擷取上次更新架構的日期和時間。

COleDateTime GetDateLastUpdated();

傳回值

COleDateTime 物件,其中包含上次更新基表結構 (schema) 的日期和時間。

備註

日期和時間設定衍生自上次更新基表結構(架構)的計算機。

如需相關信息,請參閱 DAO 說明中的「DateCreated、LastUpdated 屬性」主題。

CDaoRecordset::GetDefaultDBName

呼叫這個成員函式,以判斷此記錄集的資料庫名稱。

virtual CString GetDefaultDBName();

傳回值

CString,其中包含衍生此記錄集的資料庫路徑和名稱。

備註

如果建立的記錄集沒有 CDaoDatabase 的指標,則記錄集會使用此路徑來開啟預設資料庫。 根據預設,此函式會傳回空字串。 當 ClassWizard 從 CDaoRecordset衍生新的記錄集時,它會為您建立此函式。

下列範例說明字串中使用雙反斜杠 (\\) ,因為必須正確解譯字串。

CString CCustSet::GetDefaultDBName()
{
   return _T("c:\\mydir\\datasrc.mdb");
}

CDaoRecordset::GetDefaultSQL

架構會呼叫這個成員函式,以取得記錄集所依據的預設 SQL 語句。

virtual CString GetDefaultSQL();

傳回值

CString,包含預設 SQL 語句。

備註

這可能是數據表名稱或 SQL SELECT 語句。

您可以使用 ClassWizard 宣告您的記錄集類別,併為您執行此工作,間接定義預設 SQL 語句。

如果您將 Null SQL 字串傳遞至 Open,則會呼叫此函式來判斷記錄集的數據表名稱或 SQL。

CDaoRecordset::GetEditMode

呼叫這個成員函式來判斷編輯的狀態,這是下列其中一個值:

short GetEditMode();

傳回值

傳回值,這個值表示目前記錄的編輯狀態。

備註

Description
dbEditNone 沒有任何編輯作業正在進行中。
dbEditInProgress Edit 已通話 。
dbEditAdd AddNew 已通話 。

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

CDaoRecordset::GetFieldCount

呼叫這個成員函式,以擷取記錄集中定義的欄位數目。

short GetFieldCount();

傳回值

記錄集中的欄位數目。

備註

如需相關信息,請參閱 DAO 說明中的「Count 屬性」主題。

CDaoRecordset::GetFieldInfo

呼叫這個成員函式,以取得記錄集中欄位的相關信息。

void GetFieldInfo(
    int nIndex,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetFieldInfo(
    LPCTSTR lpszName,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

參數

nIndex
記錄集 Fields 集合中預先定義欄位的以零起始的索引,可依索引查閱。

fieldinfo
CDaoFieldInfo 結構的參考

dwInfoOptions
指定要擷取之記錄集相關信息的選項。 可用的選項會列在這裡,以及導致函式傳回的原因。 為了獲得最佳效能,請只擷取您需要的信息層級:

  • AFX_DAO_PRIMARY_INFO (預設值)名稱、類型、大小、屬性

  • AFX_DAO_SECONDARY_INFO 主要資訊加上:序數位置、必要、允許零長度、定序順序、外部名稱、來源欄位、源數據表

  • AFX_DAO_ALL_INFO 主要和次要資訊,加上:預設值、驗證規則、驗證文字

lpszName
欄位的名稱。

備註

函式的一個版本可讓您依索引查閱欄位。 另一個版本可讓您依名稱查閱欄位。

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

如需相關信息,請參閱 DAO 說明中的「屬性屬性」主題。

CDaoRecordset::GetFieldValue

呼叫這個成員函式以擷取記錄集中的數據。

virtual void GetFieldValue(
    LPCTSTR lpszName,
    COleVariant& varValue);

virtual void GetFieldValue(
    int nIndex,
    COleVariant& varValue);

virtual COleVariant GetFieldValue(LPCTSTR lpszName);
virtual COleVariant GetFieldValue(int nIndex);

參數

lpszName
包含功能變數名稱之字串的指標。

varValue
將儲存欄位值的物件參考 COleVariant

nIndex
記錄集 Fields 集合中字段以零起始的索引,可依索引查閱。

傳回值

傳回值的兩個版本 GetFieldValue 會傳回 包含字段值的 COleVariant 物件。

備註

您可以依名稱或序數位置查閱欄位。

注意

呼叫這個成員函式的其中一個版本會採用 COleVariant 對象參考做為參數,而不是呼叫傳回 COleVariant 物件的版本更有效率。 此函式的后一個版本會保留為回溯相容性。

使用 GetFieldValueSetFieldValue 在運行時間動態系結字段,而不是使用 DoFieldExchange 機制以靜態方式系結數據行。

GetFieldValueDoFieldExchange和機制可以結合以改善效能。 例如,使用 GetFieldValue 來擷取只需要隨選的值,並將該呼叫指派給介面中的 [更多資訊] 按鈕。

如需相關信息,請參閱 DAO 說明中的“Field Object” 和 “Value Property” 主題。

CDaoRecordset::GetIndexCount

呼叫這個成員函式,以判斷數據表類型記錄集上可用的索引數目。

short GetIndexCount();

傳回值

數據表類型記錄集中的索引數目。

備註

GetIndexCount 對於迴圈查看記錄集中的所有索引很有用。 針對該目的,請搭配 GetIndexInfo使用 GetIndexCount 。 如果您在動態集類型或快照類型記錄集上呼叫這個成員函式,MFC 會擲回例外狀況。

如需相關信息,請參閱 DAO 說明中的「屬性屬性」主題。

CDaoRecordset::GetIndexInfo

呼叫這個成員函式,以取得記錄集基礎基表中所定義之索引的各種資訊。

void GetIndexInfo(
    int nIndex,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetIndexInfo(
    LPCTSTR lpszName,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

參數

nIndex
數據表 Indexes 集合中以零起始的索引,可依數值位置查閱。

indexinfo
CDaoIndexInfo 結構的參考

dwInfoOptions
指定要擷取之索引相關信息的選項。 可用的選項會列在這裡,以及導致函式傳回的原因。 為了獲得最佳效能,請只擷取您需要的信息層級:

  • AFX_DAO_PRIMARY_INFO (預設值)名稱、欄位資訊、欄位

  • AFX_DAO_SECONDARY_INFO 主要資訊加上:主要、唯一、叢集、IgnoreNulls、必要、外部

  • AFX_DAO_ALL_INFO 主要和次要資訊,加上:相異計數

lpszName
索引物件名稱的指標,以依名稱查閱。

備註

函式的其中一個版本可讓您依其在集合中的位置來查閱索引。 另一個版本可讓您依名稱查閱索引。

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

如需相關信息,請參閱 DAO 說明中的「屬性屬性」主題。

CDaoRecordset::GetLastModifiedBookmark

呼叫此成員函式,以擷取最近新增或更新記錄的書籤。

COleVariant GetLastModifiedBookmark();

傳回值

COleVariant,其中包含表示最近新增或變更記錄的書籤。

備註

建立或開啟記錄集物件時,如果每個記錄支持記錄,則其每個記錄都已經有唯一的書籤。 呼叫 GetBookmark 以判斷記錄集是否支援書籤。 如果記錄集不支援書籤, CDaoException 則會擲回 。

當您新增記錄時,它會出現在記錄集的結尾,而且不是當前記錄。 若要讓新記錄成為目前記錄,請呼叫 GetLastModifiedBookmark ,然後呼叫 SetBookmark 以返回新加入的記錄。

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

CDaoRecordset::GetLockingMode

呼叫這個成員函式,以判斷記錄集有效鎖定的類型。

BOOL GetLockingMode();

傳回值

如果鎖定類型為悲觀,則為非零,否則為 0 表示開放式記錄鎖定。

備註

當悲觀鎖定生效時,只要呼叫 Edit 成員函式,就會鎖定包含您編輯之記錄的數據頁。 當您呼叫 UpdateClose 成員函式或任何移動或尋找作業時,頁面會解除鎖定。

當開放式鎖定生效時,包含記錄的數據頁只會在以成員函式更新 Update 記錄時鎖定。

使用 ODBC 數據源時,鎖定模式一律為開放式。

如需相關信息,請參閱 DAO 說明中的和主題。

CDaoRecordset::GetName

呼叫這個成員函式以擷取記錄集的名稱。

CString GetName();

傳回值

CString,包含記錄集的名稱。

備註

記錄集的名稱必須以字母開頭,且最多可以包含 40 個字元。 它可以包含數位和底線字元,但不能包含標點符號或空格。

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

CDaoRecordset::GetParamValue

呼叫這個成員函式,以擷取儲存在基礎 DAOParameter 物件中之指定參數的目前值。

virtual COleVariant GetParamValue(int nIndex);
virtual COleVariant GetParamValue(LPCTSTR lpszName);

參數

nIndex
參數在基礎 DAOParameter 物件中的數值位置。

lpszName
您想要其值的參數名稱。

傳回值

COleVariant 類別的物件,其中包含參數的值。

備註

您可以依名稱或其集合中的數值位置來存取參數。

如需相關信息,請參閱 DAO 說明中的「參數物件」主題。

CDaoRecordset::GetPercentPosition

使用動態集類型或快照類型記錄集時,如果您在完整填入記錄集之前呼叫 GetPercentPosition ,移動量會相對於呼叫 GetRecordCount 所指出的存取記錄數目。

float GetPercentPosition();

傳回值

介於 0 到 100 之間的數位,這個數位會根據記錄集中記錄集中記錄的百分比,指出記錄集物件中目前記錄的近似位置。

備註

您可以呼叫 MoveLast 以完成所有記錄集的母體擴展,以移至最後一筆記錄,但這可能需要很長的時間。

您可以呼叫 GetPercentPosition 這三種類型的記錄集物件,包括不含索引的數據表。 不過,您無法在順向捲動快照集或從外部資料庫的傳遞查詢開啟的記錄集上呼叫 GetPercentPosition 。 如果沒有目前的記錄,或目前記錄已刪除, CDaoException 則會擲回 。

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

CDaoRecordset::GetRecordCount

呼叫此成員函式,以找出已存取記錄集中的記錄數目。

long GetRecordCount();

傳回值

傳回在 recordset 物件中存取的記錄數目。

備註

GetRecordCount 在存取所有記錄之前,不會指出動態集類型或快照集類型記錄集中包含的記錄數目。 此成員函式呼叫可能需要大量的時間才能完成。

存取最後一筆記錄之後,傳回值會指出記錄集中未刪除的記錄總數。 若要強制存取最後一筆記錄,請呼叫 MoveLast 記錄集的 或 FindLast 成員函式。 您也可以使用 SQL 計數來判斷查詢將傳回的大約記錄數目。

當應用程式刪除動態集類型記錄集中的記錄時,傳回值會 GetRecordCount 減少。 不過,除非目前記錄定位到已刪除的記錄,否則其他使用者刪除的記錄不會反映 GetRecordCount 。 如果您執行會影響記錄計數並後續回復交易的交易, GetRecordCount 則不會反映剩餘記錄的實際數目。

快照類型記錄集的值 GetRecordCount 不會受到基礎表中的變更影響。

數據表類型記錄集的 值 GetRecordCount 會反映數據表中的大約記錄數目,而且會在加入和刪除數據表記錄時立即受到影響。

沒有記錄的記錄集會傳回值 0。 使用附加數據表或 ODBC 資料庫時, GetRecordCount 一律會傳回 - 1。 Requery在記錄集上呼叫成員函式會重設 的值GetRecordCount,就像重新執行查詢一樣。

如需相關信息,請參閱 DAO 說明中的主題“RecordCount 屬性”。

CDaoRecordset::GetSQL

呼叫這個成員函式,以取得 SQL 語句,該語句用於在開啟記錄集時選取記錄集的記錄。

CString GetSQL() const;

傳回值

CString,其中包含 SQL 語句。

備註

這通常是 SQL SELECT 語句。

GetSQL傳回的字串通常不同於您可能傳遞至 lpszSQL 參數記錄集至 Open 成員函式的任何字串。 這是因為記錄集會根據您傳遞至 Open的內容、使用 ClassWizard 指定的專案,以及您在m_strFilterm_strSort數據成員中指定的專案,來建構完整的 SQL 語句。

注意

只有在呼叫 之後,才呼叫 Open這個成員函式。

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

CDaoRecordset::GetType

開啟記錄集之後呼叫這個成員函式,以判斷記錄集物件的類型。

short GetType();

傳回值

下列其中一個值,指出記錄集的類型:

  • dbOpenTable 數據表類型記錄集

  • dbOpenDynaset Dynaset 類型記錄集

  • dbOpenSnapshot 快照類型記錄集

備註

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

CDaoRecordset::GetValidationRule

呼叫此成員函式,以判斷用來驗證數據的規則。

CString GetValidationRule();

傳回值

CString物件,包含值,這個值會在記錄中變更或加入至數據表時驗證記錄中的數據。

備註

此規則是以文字為基礎,而且會在每次基礎表變更時套用。 如果數據不合法,MFC 會擲回例外狀況。 傳回的錯誤訊息是基礎欄位物件的 ValidationText 屬性文字,如果指定,或基礎字段物件的 ValidationRule 屬性所指定的表達式文字。 您可以呼叫 GetValidationText 來取得錯誤訊息的文字。

例如,記錄中需要月份日期的字段可能會有驗證規則,例如「DAY BETWEEN 1 到 31」。

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

CDaoRecordset::GetValidationText

呼叫這個成員函式,以擷取基礎字段物件的 ValidationText 屬性文字。

CString GetValidationText();

傳回值

CString物件,包含如果欄位的值不符合基礎欄位物件的驗證規則,則會顯示之訊息的文字。

備註

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

CDaoRecordset::IsBOF

從記錄卷動到記錄之前,請先呼叫這個成員函式,以瞭解您是否在記錄集的第一筆記錄之前離開。

BOOL IsBOF() const;

傳回值

如果記錄集未包含任何記錄,或在第一筆記錄之前向後捲動,則為非零;否則為 0。

備註

您也可以與 IsEOF 一起呼叫IsBOF,以判斷記錄集是否包含任何記錄或空白。 在您呼叫 Open之後,如果記錄集不包含任何記錄, IsBOF 則傳回非零。 當您開啟至少有一筆記錄的記錄集時,第一筆記錄是當前記錄,並 IsBOF 傳回 0。

如果第一筆記錄是當前記錄,而您呼叫 MovePrevIsBOF 則後續會傳回非零。 如果 IsBOF 傳回非零,而且您呼叫 MovePrev,則會擲回例外狀況。 如果 IsBOF 傳回非零,則目前的記錄未定義,而且任何需要當前記錄的動作都會導致例外狀況。

特定方法對 IsBOFIsEOF 設定的影響:

  • 在內部呼叫 Open* 會藉由呼叫 MoveFirst,在記錄集中建立第一筆記錄。 因此,呼叫 Open 空的記錄集會導致 IsBOFIsEOF 傳回非零。 (如需失敗 MoveFirstMoveLast 呼叫的行為,請參閱下表。

  • 成功找出記錄的所有Move作業都會造成 IsBOFIsEOF 傳回0。

  • AddNew呼叫後面Update接著成功插入新記錄的呼叫會導致IsBOF傳回 0,但前提是IsEOF已經不是零。 的狀態 IsEOF 一律會保持不變。 如Microsoft Jet 資料庫引擎所定義,空記錄集的目前記錄指標位於檔案結尾,因此任何新記錄會在當前記錄之後插入。

  • 任何Delete呼叫,即使它從記錄集移除唯一的剩餘記錄,也不會變更 或IsEOF的值IsBOF

下表顯示允許使用不同組合的 IsBOF/ IsEOFMove作業。

州/省 MoveFirst、MoveLast MovePrev,

移動 < 0
移動 0 MoveNext,

移動 > 0
IsBOF=nonzero,

IsEOF=0
允許 例外狀況 例外狀況 允許
IsBOF=0,

IsEOF=nonzero
允許 允許 例外狀況 例外狀況
兩個非零 例外狀況 例外狀況 例外狀況 例外狀況
這兩個 0 允許 允許 允許 允許

允許移動作業並不表示作業會成功找到記錄。 它只會指出允許嘗試執行指定的Move作業,而且不會產生例外狀況。 和 IsEOF 成員函式的值IsBOF可能會因為嘗試移動而變更。

下表顯示找不到 和 IsEOF 設定之IsBOF記錄的Move作業效果。

Operations IsBOF IsEOF
MoveFirst, MoveLast
Move 0 沒有變更 沒有變更
MovePrevMove< 0 沒有變化
MoveNextMove> 0 沒有變化

如需相關信息,請參閱 DAO 說明中的「BOF、EOF 屬性」主題。

CDaoRecordset::IsDeleted

呼叫這個成員函式,以判斷目前的記錄是否已刪除。

BOOL IsDeleted() const;

傳回值

如果記錄集位於已刪除的記錄上,則為非零;否則為 0。

備註

如果您捲動至記錄並 IsDeleted 傳回 TRUE(非零),則必須先捲動至另一筆記錄,才能執行任何其他記錄集作業。

注意

您不需要檢查快照集或資料表類型記錄集中記錄的已刪除狀態。 因為無法從快照集刪除記錄,因此不需要呼叫 IsDeleted。 對於數據表類型記錄集,已刪除的記錄實際上會從記錄集中移除。 一旦刪除記錄之後,您、其他使用者或在另一個記錄集中,就無法捲動回該記錄。 因此,不需要呼叫 IsDeleted

當您從動態集刪除記錄時,該記錄會從記錄集中移除,而且您無法捲動回該記錄。 不過,如果動態集中的記錄是由另一位使用者或以相同數據表為基礎的另一個記錄集中刪除,當您稍後捲動至該記錄時, IsDeleted 會傳回 TRUE。

如需相關信息,請參閱 DAO 說明中的「刪除方法」、「LastModified 屬性」和「EditMode 屬性」主題。

CDaoRecordset::IsEOF

當您從記錄卷動至記錄時呼叫這個成員函式,以瞭解您是否已超出記錄集的最後一筆記錄。

BOOL IsEOF() const;

傳回值

如果記錄集未包含任何記錄,或已捲動超過最後一筆記錄,則為非零;否則為 0。

備註

您也可以呼叫 IsEOF 來判斷記錄集是否包含任何記錄或空白。 在您呼叫 Open之後,如果記錄集不包含任何記錄, IsEOF 則傳回非零。 當您開啟至少有一筆記錄的記錄集時,第一筆記錄是當前記錄,並 IsEOF 傳回 0。

如果您呼叫 MoveNext時,最後一筆記錄是當前記錄, IsEOF 則後續會傳回非零。 如果 IsEOF 傳回非零,而且您呼叫 MoveNext,則會擲回例外狀況。 如果 IsEOF 傳回非零,則目前的記錄未定義,而且任何需要當前記錄的動作都會導致例外狀況。

特定方法對 IsBOFIsEOF 設定的影響:

  • 在內部呼叫 Open 會藉由呼叫 MoveFirst,在記錄集中建立第一筆記錄。 因此,呼叫 Open 空的記錄集會導致 IsBOFIsEOF 傳回非零。 (如需失敗 MoveFirst 呼叫的行為,請參閱下表。

  • 成功找出記錄的所有Move作業都會造成 IsBOFIsEOF 傳回0。

  • AddNew呼叫後面Update接著成功插入新記錄的呼叫會導致IsBOF傳回 0,但前提是IsEOF已經不是零。 的狀態 IsEOF 一律會保持不變。 如Microsoft Jet 資料庫引擎所定義,空記錄集的目前記錄指標位於檔案結尾,因此任何新記錄會在當前記錄之後插入。

  • 任何Delete呼叫,即使它從記錄集移除唯一的剩餘記錄,也不會變更 或IsEOF的值IsBOF

下表顯示允許使用不同組合的 IsBOF/ IsEOFMove作業。

州/省 MoveFirst、MoveLast MovePrev,

移動 < 0
移動 0 MoveNext,

移動 > 0
IsBOF=nonzero,

IsEOF=0
允許 例外狀況 例外狀況 允許
IsBOF=0,

IsEOF=nonzero
允許 允許 例外狀況 例外狀況
兩個非零 例外狀況 例外狀況 例外狀況 例外狀況
這兩個 0 允許 允許 允許 允許

允許移動作業並不表示作業會成功找到記錄。 它只會指出允許嘗試執行指定的Move作業,而且不會產生例外狀況。 和 IsEOF 成員函式的值IsBOF可能會因為嘗試Move而變更。

下表顯示找不到 和 IsEOF 設定之IsBOF記錄的Move作業效果。

Operations IsBOF IsEOF
MoveFirst, MoveLast
Move 0 沒有變更 沒有變更
MovePrevMove< 0 沒有變化
MoveNextMove> 0 沒有變化

如需相關信息,請參閱 DAO 說明中的「BOF、EOF 屬性」主題。

CDaoRecordset::IsFieldDirty

呼叫這個成員函式,以判斷動態集的指定字段數據成員是否已標示為「已變更」。

BOOL IsFieldDirty(void* pv);

參數

光伏
您要檢查其狀態的欄位數據成員指標,或 NULL,以判斷是否有任何欄位已變更。

傳回值

如果指定的欄位數據成員標示為已變更,則為非零;否則為 0。

備註

當對 成員CDaoRecordset函式的呼叫Update更新目前記錄時,所有髒字段數據成員中的數據都會傳送至數據源上的記錄(在呼叫 EditAddNew之後)。 透過這項知識,您可以採取進一步步驟,例如將欄位數據成員取消卷動以標示數據行,使其不會寫入數據源。

IsFieldDirty 是透過實作 DoFieldExchange

CDaoRecordset::IsFieldNull

呼叫這個成員函式,以判斷記錄集的指定字段數據成員是否已標示為 Null。

BOOL IsFieldNull(void* pv);

參數

光伏
您要檢查其狀態的欄位數據成員指標,或 NULL,以判斷任何欄位是否為 Null。

傳回值

如果指定的欄位數據成員標示為 Null,則為非零;否則為 0。

備註

(在資料庫術語中,Null 表示「沒有值」,而且與C++中的 NULL 不同。如果字段數據成員標示為 Null,則會解譯為沒有值之目前記錄的數據行。

注意

在某些情況下,使用 IsFieldNull 可能會沒有效率,如下列程式代碼範例所示:

COleVariant varValue;
void *pField = &(rs.m_Age);
int nField = 2;

// this code is inefficient because data
// must be retrieved for both IsFieldNull
// and GetFieldValue
if (!rs.IsFieldNull(pField))
   rs.GetFieldValue(nField, varValue);

// this code is more efficient
rs.GetFieldValue(nField, varValue);
if (varValue.vt == VT_NULL)
   varValue.Attach(varNewVal); // do something

注意

如果您使用動態記錄系結,而不衍生自 CDaoRecordset,請務必使用 VT_NULL,如範例所示。

CDaoRecordset::IsFieldNullable

呼叫這個成員函式,以判斷指定的欄位數據成員是否為 「可為 Null」(可以設定為 Null 值;C++ NULL 與 Null 不同,這在資料庫術語中表示「沒有值」。

BOOL IsFieldNullable(void* pv);

參數

光伏
您要檢查其狀態的欄位數據成員指標,或 NULL,以判斷任何欄位是否為 Null。

傳回值

如果指定的欄位數據成員可以設為 Null,則為非零;否則為 0。

備註

不能為 Null 的欄位必須有值。 如果您在新增或更新記錄時嘗試將這類字段設定為 Null,數據源會拒絕新增或更新,而且 Update 會擲回例外狀況。 當您呼叫 Update時,而不是呼叫 SetFieldNull時,就會發生例外狀況。

CDaoRecordset::IsOpen

呼叫這個成員函式,以判斷記錄集是否開啟。

BOOL IsOpen() const;

傳回值

如果先前已呼叫 recordset 物件的 OpenRequery 成員函式且記錄集尚未關閉,則為非零;否則為 0。

備註

CDaoRecordset::m_bCheckCacheForDirtyFields

包含旗標,指出快取的字段是否自動標示為髒(已變更)和 Null。

備註

旗標預設為TRUE。 此數據成員中的設定會控制整個雙緩衝機制。 如果您將旗標設定為 TRUE,您可以使用 DFX 機制,在字段間關閉快取。 如果您將旗標設定為 FALSE,則必須呼叫 SetFieldDirtySetFieldNull 自己。

在呼叫 Open之前設定此數據成員。 此機制主要是為了方便使用。 效能可能會變慢,因為欄位在進行變更時會進行雙重緩衝處理。

CDaoRecordset::m_nFields

包含記錄集類別中的欄位資料成員數目,以及數據源中記錄集所選取的數據行數目。

備註

記錄集類別的建構函式必須以正確的靜態系結字段數目初始化 m_nFields 。 當您使用它來宣告記錄集類別時,ClassWizard 會為您撰寫此初始化。 您也可以手動撰寫。

架構會使用此數位來管理字段數據成員與數據源上目前記錄的對應數據行之間的互動。

注意

這個數字必須對應至 使用 參數CDaoFieldExchange::outputColumn呼叫 SetFieldType 之後所DoFieldExchange註冊的輸出數據行數目。

您可以透過 CDaoRecordset::GetFieldValueCDaoRecordset::SetFieldValue動態系結資料行。 如果您這樣做,則不需要遞增 中的 m_nFields 計數,以反映成員 DoFieldExchange 函式中的 DFX 函數調用數目。

CDaoRecordset::m_nParams

包含記錄集類別中的參數資料成員數目, 這是使用記錄集查詢傳遞的參數數目。

備註

如果您的記錄集類別有任何參數數據成員,類別的建構函式必須以正確的數位初始化 m_nParamsm_nParams的值預設為 0。 如果您新增參數數據成員,您必須手動新增類別建構函式中的初始化,以反映參數數目(這至少必須和m_strFilter或m_strSort字串中的 '' 佔位元數目一樣大)。

架構會在參數化記錄集的查詢時使用此數位。

注意

這個數字必須對應至 使用 參數CFieldExchange::param呼叫 SetFieldType 之後所DoFieldExchange註冊的「參數」數目。

如需相關信息,請參閱 DAO 說明中的「參數物件」主題。

CDaoRecordset::m_pDAORecordset

包含物件基礎 CDaoRecordset 之 DAO 記錄集物件的 OLE 介面指標。

備註

如果您需要直接存取 DAO 介面,請使用此指標。

如需相關信息,請參閱 DAO 說明中的「Recordset 物件」主題。

CDaoRecordset::m_pDatabase

包含物件指標, CDaoDatabase 記錄集透過該對象連接到數據源。

備註

此變數會以兩種方式設定。 一般而言,當您建構 recordset 物件時,會將指標傳遞至已經開啟 CDaoDatabase 的物件。 如果您改為傳遞 NULL, CDaoRecordset 請為您建立 CDaoDatabase 物件並加以開啟。 在這兩種情況下, CDaoRecordset 會將指標儲存在此變數中。

通常您不需要直接使用儲存在 中的 m_pDatabase指標。 不過,如果您將自己的延伸模組寫入 , CDaoRecordset您可能需要使用指標。 例如,如果您擲回自己的 CDaoException指標,您可能需要指標。

如需相關信息,請參閱 DAO 說明中的「資料庫物件」主題。

CDaoRecordset::m_strFilter

包含字串,用來建構 SQL 語句的 WHERE 子句。

備註

它不包含用來篩選記錄集的保留字 WHERE 。 此資料成員的使用不適用於資料表類型記錄集。 使用指標開啟記錄集CDaoQueryDef時,使用 m_strFilter 沒有作用。

當您篩選包含日期的欄位時,請使用美國日期格式 (month-day-year),即使您未使用美國版的 Microsoft Jet 資料庫引擎;否則,數據可能無法如預期般進行篩選。

如需相關信息,請參閱 DAO 說明中的「篩選屬性」主題。

CDaoRecordset::m_strSort

包含字串,其中包含不含 ORDERBY 保留字之 SQL 語句的 ORDERBY 子句。

備註

您可以在動態集和快照類型記錄集物件上排序。

您無法排序資料表類型的記錄集物件。 若要判斷數據表類型記錄集的排序順序,請呼叫 SetCurrentIndex

使用 指標開啟記錄集時,m_strSort 的使用 CDaoQueryDef 沒有作用。

如需相關信息,請參閱 DAO 說明中的「排序屬性」主題。

CDaoRecordset::Move

呼叫此成員函式,以將記錄集 lRows 記錄置於當前記錄的位置。

virtual void Move(long lRows);

參數

lRows
向前或向後移動的記錄數目。 正值向前移動,朝記錄集結尾。 負值向後移動,朝開頭移動。

備註

您可以向前或向後移動。 Move( 1 ) 等於 MoveNext,且 Move( -1 ) 相當於 MovePrev

警告

如果記錄集沒有記錄,則呼叫任何 Move 函式會擲回例外狀況。 一般而言,請在Move作業之前呼叫 IsBOFIsEOF ,以判斷記錄集是否有任何記錄。 呼叫 OpenRequery之後,請呼叫 IsBOFIsEOF

注意

如果您已捲動至記錄集的開頭或結尾( IsBOFIsEOF 傳回非零),則呼叫 MoveCDaoException擲回 。

注意

如果您在目前記錄更新或新增時呼叫任何 Move 函式,更新就會遺失,而不會發出警告。

當您在正向捲動快照集上呼叫 Move 時, lRows 參數必須是正整數且不允許書籤,因此您只能向前移動。

若要讓當前記錄集中的第一筆、最後一筆、下一筆或上一筆記錄呼叫 MoveFirstMoveLastMoveNext、 或 MovePrev 成員函式。

如需相關信息,請參閱 DAO 說明中的「Move 方法」和「MoveFirst、MoveLast、MoveNext、MovePrevious 方法」主題。

CDaoRecordset::MoveFirst

呼叫這個成員函式,使記錄集中的第一筆記錄(如果有的話)成為當前記錄。

void MoveFirst();

備註

開啟記錄集之後,您不需要立即呼叫 MoveFirst 。 當時,第一筆記錄(如果有的話)會自動是當前記錄。

警告

如果記錄集沒有記錄,則呼叫任何 Move 函式會擲回例外狀況。 一般而言,請在Move作業之前呼叫 IsBOFIsEOF ,以判斷記錄集是否有任何記錄。 呼叫 OpenRequery之後,請呼叫 IsBOFIsEOF

注意

如果您在目前記錄更新或新增時呼叫任何 Move 函式,更新就會遺失,而不會發出警告。

使用 函 Move 式,在不套用條件的情況下,從記錄移至記錄。 使用 [尋找] 作業,在符合特定條件的動態集類型或快照類型 recordset 物件中尋找記錄。 若要在資料表類型 recordset 物件中尋找記錄,請呼叫 Seek

如果記錄集參照數據表類型的記錄集,移動會遵循數據表的目前索引。 您可以使用基礎 DAO 物件的 Index 屬性來設定目前的索引。 如果您未設定目前的索引,則傳回記錄的順序為未定義。

如果您根據 SQL 查詢或 querydef 呼叫 MoveLast 記錄集物件,則查詢會強制完成,而且記錄集物件會完全填入。

您無法使用正向捲動快照來呼叫 MoveFirstMovePrev 成員函式。

若要將目前記錄在 recordset 物件中的位置往前或向後移動特定數目的記錄,請呼叫 Move

如需相關信息,請參閱 DAO 說明中的「Move 方法」和「MoveFirst、MoveLast、MoveNext、MovePrevious 方法」主題。

CDaoRecordset::MoveLast

呼叫這個成員函式,使記錄集中的最後一筆記錄(如果有的話)成為當前記錄。

void MoveLast();

備註

警告

如果記錄集沒有記錄,則呼叫任何 Move 函式會擲回例外狀況。 一般而言,請在Move作業之前呼叫 IsBOFIsEOF ,以判斷記錄集是否有任何記錄。 呼叫 OpenRequery之後,請呼叫 IsBOFIsEOF

注意

如果您在目前記錄更新或新增時呼叫任何 Move 函式,更新就會遺失,而不會發出警告。

使用 函 Move 式,在不套用條件的情況下,從記錄移至記錄。 使用 [尋找] 作業,在符合特定條件的動態集類型或快照類型 recordset 物件中尋找記錄。 若要在資料表類型 recordset 物件中尋找記錄,請呼叫 Seek

如果記錄集參照數據表類型的記錄集,移動會遵循數據表的目前索引。 您可以使用基礎 DAO 物件的 Index 屬性來設定目前的索引。 如果您未設定目前的索引,則傳回記錄的順序為未定義。

如果您根據 SQL 查詢或 querydef 呼叫 MoveLast 記錄集物件,則查詢會強制完成,而且記錄集物件會完全填入。

若要將目前記錄在 recordset 物件中的位置往前或向後移動特定數目的記錄,請呼叫 Move

如需相關信息,請參閱 DAO 說明中的「Move 方法」和「MoveFirst、MoveLast、MoveNext、MovePrevious 方法」主題。

CDaoRecordset::MoveNext

呼叫這個成員函式,使記錄集中的下一筆記錄成為當前記錄。

void MoveNext();

備註

建議您在嘗試移至上一筆記錄之前呼叫 IsBOF 。 呼叫 MovePrev 會擲 CDaoException 回 if IsBOF 傳回非零值,指出您已在第一筆記錄之前捲動,或是記錄集未選取任何記錄。

警告

如果記錄集沒有記錄,則呼叫任何 Move 函式會擲回例外狀況。 一般而言,請在Move作業之前呼叫 IsBOFIsEOF ,以判斷記錄集是否有任何記錄。 呼叫 OpenRequery之後,請呼叫 IsBOFIsEOF

注意

如果您在目前記錄更新或新增時呼叫任何 Move 函式,更新就會遺失,而不會發出警告。

使用 函 Move 式,在不套用條件的情況下,從記錄移至記錄。 使用 [尋找] 作業,在符合特定條件的動態集類型或快照類型 recordset 物件中尋找記錄。 若要在資料表類型 recordset 物件中尋找記錄,請呼叫 Seek

如果記錄集參照數據表類型的記錄集,移動會遵循數據表的目前索引。 您可以使用基礎 DAO 物件的 Index 屬性來設定目前的索引。 如果您未設定目前的索引,則傳回記錄的順序為未定義。

若要將目前記錄在 recordset 物件中的位置往前或向後移動特定數目的記錄,請呼叫 Move

如需相關信息,請參閱 DAO 說明中的「Move 方法」和「MoveFirst、MoveLast、MoveNext、MovePrevious 方法」主題。

CDaoRecordset::MovePrev

呼叫這個成員函式,使記錄集中的上一筆記錄成為當前記錄。

void MovePrev();

備註

建議您在嘗試移至上一筆記錄之前呼叫 IsBOF 。 呼叫 MovePrev 會擲 CDaoException 回 if IsBOF 傳回非零值,指出您已在第一筆記錄之前捲動,或是記錄集未選取任何記錄。

警告

如果記錄集沒有記錄,則呼叫任何 Move 函式會擲回例外狀況。 一般而言,請在Move作業之前呼叫 IsBOFIsEOF ,以判斷記錄集是否有任何記錄。 呼叫 OpenRequery之後,請呼叫 IsBOFIsEOF

注意

如果您在目前記錄更新或新增時呼叫任何 Move 函式,更新就會遺失,而不會發出警告。

使用 函 Move 式,在不套用條件的情況下,從記錄移至記錄。 使用 [尋找] 作業,在符合特定條件的動態集類型或快照類型 recordset 物件中尋找記錄。 若要在資料表類型 recordset 物件中尋找記錄,請呼叫 Seek

如果記錄集參照數據表類型的記錄集,移動會遵循數據表的目前索引。 您可以使用基礎 DAO 物件的 Index 屬性來設定目前的索引。 如果您未設定目前的索引,則傳回記錄的順序為未定義。

您無法使用正向捲動快照來呼叫 MoveFirstMovePrev 成員函式。

若要將目前記錄在 recordset 物件中的位置往前或向後移動特定數目的記錄,請呼叫 Move

如需相關信息,請參閱 DAO 說明中的「Move 方法」和「MoveFirst、MoveLast、MoveNext、MovePrevious 方法」主題。

CDaoRecordset::Open

您必須呼叫這個成員函式,才能擷取記錄集的記錄。

virtual void Open(
    int nOpenType = AFX_DAO_USE_DEFAULT_TYPE,
    LPCTSTR lpszSQL = NULL,
    int nOptions = 0);

virtual void Open(
    CDaoTableDef* pTableDef,
    int nOpenType = dbOpenTable,
    int nOptions = 0);

virtual void Open(
    CDaoQueryDef* pQueryDef,
    int nOpenType = dbOpenDynaset,
    int nOptions = 0);

參數

nOpenType
下列其中一個值:

  • dbOpenDynaset 具有雙向卷動的動態集類型記錄集。 這是預設值。

  • dbOpenTable 具有雙向卷動的數據表類型記錄集。

  • dbOpenSnapshot 具有雙向捲動的快照類型記錄集。

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

  • NULL 指標。

  • 一或多個 tabledefs 和/或 querydefs 的名稱(逗號分隔)。

  • SQL SELECT 語句(選擇性地使用 SQL WHEREORDERBY 子句)。

  • 傳遞查詢。

nOptions
下面所列的一或多個選項。 預設值為 0。 可能值如下所示:

  • dbAppendOnly 您只能附加新記錄(僅限動態集類型記錄集)。 此選項表示只能附加記錄。 MFC ODBC 資料庫類別具有僅附加選項,允許擷取和附加記錄。

  • dbForwardOnly 記錄集是向前捲動快照集。

  • dbSeeChanges 如果其他使用者正在變更您要編輯的數據,則產生例外狀況。

  • dbDenyWrite 其他用戶無法修改或新增記錄。

  • dbDenyRead 其他使用者無法檢視記錄(僅限數據表類型記錄集)。

  • dbReadOnly 您只能檢視記錄;其他使用者可以修改它們。

  • dbInconsistent 允許不一致的更新(僅限動態集類型記錄集)。

  • dbConsistent 只允許一致的更新(僅限動態集類型記錄集)。

注意

常數 dbConsistentdbInconsistent 互斥。 您可以在指定的 實例 Open中使用一個或另一個,但不能同時使用兩者。

pTableDef
CDaoTableDef 物件的指標。 此版本僅適用於資料表類型記錄集。 使用此選項時, CDaoDatabase 不會使用用來建構 CDaoRecordset 的指標,而是使用 tabledef 所在的資料庫。

pQueryDef
CDaoQueryDef 物件的指標。 此版本僅適用於動態集類型和快照類型記錄集。 使用此選項時, CDaoDatabase 不會使用用來建構 CDaoRecordset 的指標,而是使用 querydef 所在的資料庫。

備註

呼叫 Open之前,您必須建構 recordset 物件。 有數種方式可以執行這項作業:

  • 當您建構 recordset 物件時,將指標傳遞至 CDaoDatabase 已經開啟的物件。

  • 當您建構記錄集物件時,將指標傳遞至 CDaoDatabase 未開啟的物件。 記錄集會開啟 CDaoDatabase 物件,但不會在 recordset 物件關閉時關閉它。

  • 當您建構記錄集物件時,請傳遞NULL指標。 recordset 物件會呼叫 GetDefaultDBName 以取得 access Microsoft 的名稱。要開啟的 MDB 檔案。 然後,記錄集會開啟 CDaoDatabase 物件,只要記錄集開啟,它就會保持開啟狀態。 當您在記錄集上呼叫 Close 時, CDaoDatabase 物件也會關閉。

    注意

    當記錄集開啟 CDaoDatabase 物件時,它會以非例外存取方式開啟數據源。

針對使用 lpszSQL 參數的 Open 版本,一旦記錄集開啟之後,您可以使用數種方式之一來擷取記錄。 第一個選項是在 中 DoFieldExchange具有 DFX 函式。 第二個選項是藉由呼叫成員函式來使用動態系 GetFieldValue 結。 這些選項可以個別或結合來實作。 如果結合它們,您必須在呼叫 Open時自行傳入 SQL 語句。

當您使用 傳入 物件的第二個版本OpenCDaoTableDef時,產生的數據行可供您透過 DoFieldExchange 和 DFX 機制系結,以及/或透過 GetFieldValue動態系結。

注意

您只能針對資料表型態記錄集使用 CDaoTableDef 物件來呼叫 Open

當您使用 第三版 Open 傳入 CDaoQueryDef 物件時,會執行該查詢,而產生的數據行可供您透過 DoFieldExchange 和 DFX 機制系結,以及/或透過 GetFieldValue動態系結。

注意

您只能針對動態集型態和快照型態記錄集使用 CDaoQueryDef 物件來呼叫 Open

針對使用 lpszSQL 參數的第一個版本Open,會根據下表所示的準則來選取記錄。

lpszSQL 參數的值 選取的記錄取決於 範例
NULL GetDefaultSQL傳回的字串。
一或多個 tabledefs 和/或 querydef 名稱的逗號分隔清單。 中表示的所有 DoFieldExchange數據行。 "Customer"
SELECT column-list FROM table-list 來自指定 tabledef(s) 和/或 querydef(s) 的指定數據行。 "SELECT CustId, CustName

FROM Customer"

一般程式是將 NULL 傳遞至 Open;在此情況下, Open 會呼叫 GetDefaultSQLClassWizard 在建立 CDaoRecordset衍生類別時所產生的可覆寫成員函式。 此值會提供您在 ClassWizard 中指定的 tabledef(s) 和/或 querydef name(s)。 您可以改為在 lpszSQL 參數中指定其他資訊。

無論您傳遞什麼,Open都會為查詢建構最終的 SQL 字串(字串可能有附加至您所傳遞之 lpszSQL 字串的 SQL WHEREORDERBY 子句),然後執行查詢。 您可以在呼叫 之後呼叫 GetSQL Open來檢查建構的字串。

記錄集類別的欄位數據成員會系結至所選取資料的數據行。 如果傳回任何記錄,則第一筆記錄會變成當前記錄。

如果您想要設定記錄集的選項,例如篩選或排序、設定m_strSortm_strFilter或建構記錄集物件之後,但在呼叫 Open之前。 如果您要在記錄集開啟之後重新整理記錄集中的記錄,請呼叫 Requery

如果您在動態集類型或快照集類型記錄集上呼叫 Open ,或數據源參考代表附加數據表的 SQL 語句或 tabledef,則無法 dbOpenTable 用於類型自變數;如果您這樣做,MFC 會擲回例外狀況。 若要判斷 tabledef 物件是否代表附加數據表,請建立 CDaoTableDef 物件並呼叫其 GetConnect 成員函式。

dbSeeChanges如果您想要在編輯或刪除同一筆記錄時,擷取計算機上其他使用者或另一個程式所做的變更,請使用旗標。 例如,如果兩個用戶開始編輯相同的記錄,第一個呼叫 Update 成員函式的使用者就會成功。 第二個使用者呼叫 時 UpdateCDaoException 會擲回 。 同樣地,如果第二位使用者嘗試呼叫 Delete 來刪除記錄,而且第一位使用者已經變更記錄, CDaoException 就會發生 。

一般而言,如果使用者在更新時取得這個 CDaoException 值,您的程式代碼應該重新整理字段的內容,並擷取新修改的值。 如果在刪除過程中發生例外狀況,您的程式代碼可能會向用戶顯示新的記錄數據,以及指出數據最近變更的訊息。 此時,您的程式代碼可以要求確認使用者仍想要刪除記錄。

提示

當您的應用程式透過從 ODBC 資料源開啟的記錄集進行單一傳遞時,請使用順向卷動選項 (dbForwardOnly) 來改善效能。

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

CDaoRecordset::Requery

呼叫此成員函式以重建(重新整理)記錄集。

virtual void Requery();

備註

如果傳回任何記錄,則第一筆記錄會變成當前記錄。

為了讓記錄集反映您或其他使用者對數據源進行的新增和刪除,您必須呼叫 Requery來重建記錄集。 如果記錄集是動態集,它會自動反映您或其他使用者對其現有記錄所做的更新(但不會新增)。 如果記錄集是快照集,您必須呼叫 Requery 以反映其他用戶的編輯,以及新增和刪除。

針對動態集或快照集,當您想要使用參數值重建記錄集時呼叫 Requery 。 設定新的篩選或排序方式,方法是在呼叫 Requery之前設定 m_strFilter m_strSort 和 。 在呼叫 Requery之前,先將新值指派給參數數據成員,以設定新的參數。

如果嘗試重建記錄集失敗,則會關閉記錄集。 呼叫 Requery之前,您可以藉由呼叫 CanRestart 成員函式來判斷是否可以重新查詢記錄集。 CanRestart 不保證 Requery 會成功。

警告

只有在您呼叫 之後才呼叫 Requery Open

注意

呼叫 Requery 變更 DAO 書籤。

如果呼叫 傳回 0,則無法在動態集類型或快照類型記錄集上呼叫RequeryCanRestart,也無法在數據表類型記錄集上使用。

如果您在呼叫 Requery之後同時IsBOFIsEOF回非零,則查詢不會傳回任何記錄,而且記錄集不會包含任何數據。

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

CDaoRecordset::Seek

呼叫這個成員函式,以找出索引數據表類型 recordset 物件中的記錄,該物件符合目前索引的指定準則,並將該記錄設為當前記錄。

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKey1,
    COleVariant* pKey2 = NULL,
    COleVariant* pKey3 = NULL);

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKeyArray,
    WORD nKeys);

參數

lpszComparison
下列其中一個字串表達式:“<”、“=”、“<=”、“>=”或 “>”。

pKey1
COleVariant 的指標,其值會對應至索引中的第一個字段。 必要。

pKey2
的指標 COleVariant ,其值會對應至索引中的第二個字段,如果有的話。 預設值為 NULL。

pKey3
的指標 COleVariant ,其值會對應至索引中的第三個字段,如果有的話。 預設值為 NULL。

pKeyArray
變體數位列的指標。 陣列大小會對應至索引中的欄位數目。

nKeys
對應至陣列大小的整數,這是索引中的欄位數目。

注意

on 不會在索引鍵中指定通配符。 通配符會導致 Seek 傳回沒有相符的記錄。

傳回值

如果找到相符的記錄,則為非零,否則為 0。

備註

使用的第二個 (array) 版本 Seek 來處理四個字段或更多欄位的索引。

Seek 可在數據表類型記錄集上啟用高效能索引搜尋。 在呼叫 之前,您必須先呼叫 SetCurrentIndex Seek來設定目前的索引。 如果索引識別非統一索引鍵欄位或欄位, Seek 請找出符合準則的第一筆記錄。 如果您未設定索引,則會擲回例外狀況。

如果您未建立 UNICODE 記錄集, COleVariant 則必須明確宣告物件 ANSI。 您可以使用 COleVariant::COleVariant(lpszSrc、vtSrc、vtSrc)形式的建構函式,將 vtSrc 設定為 VT_BSTRT (ANSI),或使用 COleVariant setStringlpszSrc,vtSrc 式設為 。VT_BSTRT

當您呼叫 Seek時,會傳遞一或多個索引鍵值和比較運算符 (“”、“<<=”、“=>”、“=” 或 “>” )。 Seek會搜尋指定的索引鍵字段,並找出符合 lpszComparisonpKey1指定準則的第一筆記錄。 找到之後,會 Seek 傳回非零,並讓該記錄成為目前的記錄。 如果 Seek 找不到相符專案, Seek 則傳回零,且目前記錄未定義。 直接使用 DAO 時,您必須明確檢查 NoMatch 屬性。

如果 lpszComparison 為 “=”、“=”>或 “>”, Seek 則從索引的開頭開始。 如果 lpszComparison 是 “<” 或 “<=”, Seek 請從索引結尾開始,並在結尾搜尋重複的索引專案。 在此情況下, Seek 會從索引結尾重複索引專案之間的任意項目開始。

當您使用 Seek時,不需要有當前記錄。

若要在符合特定條件的動態集類型或快照集類型記錄集中尋找記錄,請使用 Find 作業。 若要包含所有記錄,而不只是滿足特定條件的記錄,請使用移動作業從記錄移至記錄。

您無法在任何類型的附加資料表上呼叫 Seek ,因為附加數據表必須開啟為動態集類型或快照集類型的記錄集。 不過,如果您呼叫 CDaoDatabase::Open 直接開啟可安裝的ISAM資料庫,則可以在該資料庫中的數據表上呼叫 Seek ,不過效能可能很慢。

如需相關信息,請參閱 DAO 說明中的「搜尋方法」主題。

CDaoRecordset::SetAbsolutePosition

設定 recordset 物件目前記錄的相對記錄編號。

void SetAbsolutePosition(long lPosition);

參數

lPosition
對應至記錄集中目前記錄的序數位置。

備註

呼叫 SetAbsolutePosition 可讓您根據動態集類型或快照集類型記錄集中的序數位置,將當前記錄指標定位至特定記錄。 您也可以呼叫 GetAbsolutePosition 來判斷目前的記錄號碼。

注意

此成員函式僅適用於動態集類型和快照類型記錄集。

基礎 DAO 物件的 AbsolutePosition 屬性值是以零起始;設定為 0 是指記錄集中的第一筆記錄。 設定大於填入記錄數目的值會導致 MFC 擲回例外狀況。 您可以藉由呼叫 GetRecordCount 成員函式來判斷記錄集中填入的記錄數目。

如果刪除當前記錄,則不會定義 AbsolutePosition 屬性值,而且如果參考了,MFC 就會擲回例外狀況。 新記錄會新增至序列結尾。

注意

這個屬性不是用來做為代理記錄編號。 書籤仍然是保留和傳回指定位置的建議方式,而且是將目前記錄放置在支援書籤之所有記錄集物件類型的唯一方法。 特別是,在刪除指定記錄之前記錄的位置會變更。 如果再次重新建立記錄集,則不保證指定的記錄會有相同的絕對位置,因為記錄集中的個別記錄順序不保證,除非它是使用 ORDERBY 子句以 SQL 語句建立的。

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

CDaoRecordset::SetBookmark

呼叫這個成員函式,將記錄集放在包含指定書籤的記錄上。

void SetBookmark(COleVariant varBookmark);

參數

varBookmark
COleVariant 物件,其中包含特定記錄的書籤值。

備註

建立或開啟記錄集物件時,其每個記錄已經有唯一的書籤。 您可以呼叫 GetBookmark 並將值儲存至 COleVariant 物件,以擷取目前記錄的書籤。 您稍後可以使用已儲存的書籤值來呼叫 SetBookmark 該記錄。

注意

呼叫 Requery 會變更 DAO 書籤。

如果您未建立 UNICODE 記錄集, COleVariant 則必須明確宣告物件 ANSI。 您可以使用 COleVariant::COleVariant(lpszSrc、vtSrc、vtSrc)形式的建構函式,將 vtSrc 設定為 VT_BSTRT (ANSI),或使用 COleVariant setStringlpszSrc,vtSrc 式設為 。VT_BSTRT

如需相關信息,請參閱 DAO 說明中的和 Bookmarkable 屬性主題。

CDaoRecordset::SetCacheSize

呼叫這個成員函式,以設定要快取的記錄數目。

void SetCacheSize(long lSize);

參數

lSize
指定記錄數目。 一般值為 100。 設定為 0 會關閉快取。 此設定必須介於 5 到 1,200 筆記錄之間。 快取可能會使用相當大量的記憶體。

備註

快取是本機記憶體中的空間,會保存最近從伺服器擷取的數據,以防應用程式執行時再次要求數據。 數據快取可改善應用程式透過動態集類型記錄集物件從遠端伺服器擷取資料的效能。 要求數據時,Microsoft Jet 資料庫引擎會先檢查快取要求的數據,而不是從伺服器擷取它,這需要更多時間。 不是來自 ODBC 數據源的數據不會儲存在快取中。

任何 ODBC 數據源,例如附加數據表,都可以有本機快取。 若要建立快取,請從遠端數據源開啟 recordset 物件、呼叫 SetCacheSizeSetCacheStart 成員函式,然後使用其中一個 Move 作業來呼叫 FillCache 成員函式或逐步執行記錄。 成員函式的 SetCacheSize lSize 參數可以根據應用程式一次可以使用的記錄數目。 例如,如果您使用記錄集做為螢幕上顯示之數據源的記錄集,您可以將 lSize 參數當做 20 傳遞SetCacheSize,一次顯示 20 筆記錄。

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

CDaoRecordset::SetCacheStart

呼叫這個成員函式,指定要快取之記錄集中第一筆記錄的書籤。

void SetCacheStart(COleVariant varBookmark);

參數

varBookmark
COleVariant,指定要快取之記錄集中第一筆記錄的書籤。

備註

您可以針對成員函式的 varBookmark 參數使用任何記錄的 SetCacheStart 書籤值。 建立您想要使用目前記錄啟動快取的記錄、使用 SetBookmark 建立該記錄的 SetCacheStart 書籤,並將書籤值當做成員函式的參數傳遞。

Microsoft Jet 資料庫引擎會從快取要求快取範圍內的記錄,並要求伺服器快取範圍以外的記錄。

從快取擷取的記錄不會反映其他用戶同時對源數據所做的變更。

若要強制更新所有快取的數據,請將 的 lSize 參數傳遞為 0,然後使用您原本要求的快取大小再次呼叫SetCacheSize,然後呼叫FillCache成員函SetCacheSize式。

如果您未建立 UNICODE 記錄集, COleVariant 則必須明確宣告物件 ANSI。 您可以使用 COleVariant::COleVariant(lpszSrc、vtSrc、vtSrc)形式的建構函式,將 vtSrc 設定為 VT_BSTRT (ANSI),或使用 COleVariant setStringlpszSrc,vtSrc 式設為 。VT_BSTRT

如需相關信息,請參閱 DAO 說明中的 CacheSize、CacheStart 屬性主題。

CDaoRecordset::SetCurrentIndex

呼叫這個成員函式,以在數據表類型記錄集上設定索引。

void SetCurrentIndex(LPCTSTR lpszIndex);

參數

lpszIndex
指標,包含要設定之索引的名稱。

備註

基表中的記錄不會以任何特定順序儲存。 設定索引會變更從資料庫傳回的記錄順序,但不會影響儲存記錄的順序。 必須已經定義指定的索引。 如果您嘗試使用不存在的索引物件,或呼叫 Seek 時未設定索引,MFC 會擲回例外狀況。

您可以呼叫 CDaoTableDef::CreateIndex ,並將新的索引附加至基礎數據表的 Indexes 集合,方法是呼叫 CDaoTableDef::Append,然後重新開啟記錄集,以建立數據表的新索引。

從數據表類型記錄集傳回的記錄只能由針對基礎表def 定義的索引排序。 若要依其他順序排序記錄,您可以使用儲存在 CDaoRecordset::m_strSortSQL ORDERBY 子句,開啟動態集類型或快照集類型記錄集。

如需相關信息,請參閱 DAO 說明中的「索引物件」主題和定義「目前索引」。

CDaoRecordset::SetFieldDirty

呼叫這個成員函式,將記錄集的欄位數據成員標示為已變更或未變更。

void SetFieldDirty(
    void* pv,
    BOOL bDirty = TRUE);

參數

光伏
包含記錄集或 NULL 中欄位資料成員的位址。 如果為 NULL,則會標示記錄集中的所有欄位數據成員。 (C++ NULL 與資料庫術語中的 Null 不同,這表示「沒有值」。

bDirty
TRUE 是表示 如果字段數據成員要標示為「骯髒」(已變更)。 否則為 FALSE,如果字段數據成員要標示為 「clean」 (未變更)。

備註

將欄位標示為未變更可確保欄位不會更新。

架構會標示已變更的欄位數據成員,以確保它們會由 DAO 記錄欄位交換 (DFX) 機制寫入資料源上的記錄。 變更欄位的值通常會自動設定欄位,因此您很少需要自行呼叫 SetFieldDirty ,但有時您可能想要確保資料行明確更新或插入,而不論字段數據成員中的值為何。 DFX 機制也會使用 PSEUDONULL。 如需詳細資訊,請參閱 CDaoFieldExchange::m_nOperation

如果未使用雙緩衝機制,則變更欄位的值不會自動將字段設定為已變更。 在此情況下,您必須將欄位明確設定為已變更。 m_bCheckCacheForDirtyFields中包含的旗標會控制此自動欄位檢查。

注意

只有在您呼叫 Edit 或 AddNew 之後,才呼叫此成員函式。

針對函式的第一個自變數使用 NULL 會將函式套用至所有outputColumn欄位,而不是中的CDaoFieldExchange參數字段。 例如,呼叫

SetFieldDirty(NULL);

只會 outputColumn 將欄位設定為 NULL; param 欄位不受影響。

若要處理 參數,您必須提供您想要處理之個別 參數 的實際位址,例如:

SetFieldDirty(&m_strParam);

這表示您無法將所有參數字段設定為 NULL,因為您可以使用outputColumn字段。

SetFieldDirty 是透過實作 DoFieldExchange

CDaoRecordset::SetFieldNull

呼叫這個成員函式,將記錄集的欄位數據成員標示為 Null(特別是沒有值)或非 Null。

void SetFieldNull(
    void* pv,
    BOOL bNull = TRUE);

參數

光伏
包含記錄集或 NULL 中欄位資料成員的位址。 如果為 NULL,則會標示記錄集中的所有欄位數據成員。 (C++ NULL 與資料庫術語中的 Null 不同,這表示「沒有值」。

bNull
如果欄位數據成員標示為沒有值(Null),則為非零。 否則,如果欄位數據成員要標示為非 Null,則為 0。

備註

SetFieldNull 用於機制中系結的 DoFieldExchange 欄位。

當您將新記錄新增至記錄集時,所有欄位數據成員一開始都會設定為 Null 值,並標示為「已變更」。 當您從數據源擷取記錄時,其數據行已具有值或為 Null。 如果不適合將欄位設為 Null, 則會擲回 CDaoException

例如,如果您使用雙緩衝機制,如果您特別想要將當前記錄的欄位指定為沒有值,請呼叫 SetFieldNull bNull 設定為 TRUE,將它標示為 Null。 如果字段先前標示為 Null,而您現在想要為其指定值,請設定其新值。 您不需要使用 SetFieldNull移除 Null 旗標。 若要判斷欄位是否允許為 Null,請呼叫 IsFieldNullable

如果您未使用雙緩衝機制,則變更域的值不會自動將字段設定為骯髒和非 Null。 您必須特別設定欄位的骯髒和非 Null。 m_bCheckCacheForDirtyFields中包含的旗標會控制此自動欄位檢查。

DFX 機制會使用 PSEUDONULL。 如需詳細資訊,請參閱 CDaoFieldExchange::m_nOperation

注意

只有在您呼叫 Edit 或 AddNew 之後,才呼叫此成員函式。

針對函式的第一個自變數使用 NULL 只會將函式套用至outputColumn欄位,而不是中的CDaoFieldExchange參數字段。 例如,呼叫

SetFieldNull(NULL);

只會 outputColumn 將欄位設定為 NULL; param 欄位不受影響。

CDaoRecordset::SetFieldValue

呼叫這個成員函式,以藉由序數位置或變更字串的值來設定字段的值。

virtual void SetFieldValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

virtual void SetFieldValue(
    int nIndex,
    const COleVariant& varValue);

void SetFieldValue(
    LPCTSTR lpszName,
    LPCTSTR lpszValue);

void SetFieldValue(
    int nIndex,
    LPCTSTR lpszValue);

參數

lpszName
包含功能變數名稱之字串的指標。

varValue
COleVariant 對象的參考,其中包含欄位內容的值。

nIndex
整數,表示記錄集 Fields 集合中欄位的序數位置(以零起始)。

lpszValue
字串的指標,包含欄位內容的值。

備註

使用 SetFieldValueGetFieldValue 在運行時間動態系結字段,而不是使用 DoFieldExchange 機制以靜態方式系結數據行。

如果您未建立 UNICODE 記錄集,您必須使用不包含COleVariant參數的 SetFieldValue 表單,或COleVariant必須明確宣告物件的 ANSI。 您可以使用 COleVariant::COleVariant(lpszSrc、vtSrc、vtSrc)形式的建構函式,將 vtSrc 設定為 VT_BSTRT (ANSI),或使用 COleVariant setStringlpszSrc,vtSrc 式設為 。VT_BSTRT

如需相關信息,請參閱 DAO 說明中的“Field Object” 和 “Value Property” 主題。

CDaoRecordset::SetFieldValueNull

呼叫這個成員函式,將字段設定為 Null 值。

void SetFieldValueNull(int nIndex);
void SetFieldValueNull(LPCTSTR lpszName);

參數

nIndex
記錄集中欄位的索引,以零起始的索引進行查閱。

lpszName
要依名稱查閱之記錄集中的功能變數名稱名稱。

備註

C++ NULL 與 Null 不同,這在資料庫術語中表示「沒有值」。

如需相關信息,請參閱 DAO 說明中的“Field Object” 和 “Value Property” 主題。

CDaoRecordset::SetLockingMode

呼叫這個成員函式來設定記錄集的鎖定類型。

void SetLockingMode(BOOL bPessimistic);

參數

bPessimistic
表示鎖定類型的旗標。

備註

當悲觀鎖定生效時,只要呼叫 Edit 成員函式,就會鎖定包含您編輯之記錄的 2K 頁面。 當您呼叫 UpdateClose 成員函式或任何移動或尋找作業時,頁面會解除鎖定。

當開放式鎖定生效時,包含記錄的 2K 頁面只會在記錄以 Update 成員函式更新時鎖定。

如果頁面已鎖定,則其他用戶無法編輯相同頁面上的記錄。 如果您呼叫 SetLockingMode 並傳遞非零值,而其他用戶已經鎖定頁面,則呼叫 Edit時會擲回例外狀況。 其他使用者可以從鎖定的頁面讀取數據。

如果您使用 SetLockingMode 零值呼叫,並在頁面被其他使用者鎖定時呼叫 Update ,則會發生例外狀況。 若要查看其他使用者對記錄所做的變更(並遺失變更),請使用目前記錄的書籤值呼叫 SetBookmark 成員函式。

使用 ODBC 數據源時,鎖定模式一律為開放式。

CDaoRecordset::SetParamValue

呼叫這個成員函式,以在運行時間設定記錄集中的參數值。

virtual void SetParamValue(
    int nIndex,
    const COleVariant& varValue);

virtual void SetParamValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

參數

nIndex
參數在 querydef 的 Parameters 集合中的數值位置。

var
要設定的值;請參閱。

lpszName
您要設定其值的參數名稱。

備註

參數必須已經建立為記錄集 SQL 字串的一部分。 您可以依名稱或其集合中的索引位置來存取參數。

指定要設定為 COleVariant 物件的值。 如需在 對象中COleVariant設定所需值和類型的相關信息,請參閱 COleVariant 類別。 如果您未建立 UNICODE 記錄集, COleVariant 則必須明確宣告物件 ANSI。 您可以使用 COleVariant::COleVariant(lpszSrc、vtSrc、vtSrc)形式的建構函式,將 vtSrc 設定為 VT_BSTRT (ANSI),或使用 COleVariant setStringlpszSrc,vtSrc 式設為 。VT_BSTRT

CDaoRecordset::SetParamValueNull

呼叫這個成員函式,將 參數設定為 Null 值。

void SetParamValueNull(int nIndex);
void SetParamValueNull(LPCTSTR lpszName);

參數

nIndex
記錄集中欄位的索引,以零起始的索引進行查閱。

lpszName
要依名稱查閱之記錄集中的功能變數名稱名稱。

備註

C++ NULL 與 Null 不同,這在資料庫術語中表示「沒有值」。

CDaoRecordset::SetPercentPosition

呼叫這個成員函式,以根據記錄集中記錄的百分比來設定值,以變更記錄集物件中當前記錄的近似位置。

void SetPercentPosition(float fPosition);

參數

fPosition
介於 0 與 100 之間的數字。

備註

使用動態集類型或快照類型記錄集時,請先移至最後一筆記錄,再呼叫 SetPercentPosition來填入記錄集。 如果您在完整填入記錄集之前呼叫 SetPercentPosition ,移動量會相對於存取的記錄數目,如 GetRecordCount 的值所指示。 您可以呼叫 MoveLast來移至最後一筆記錄。

SetPercentPosition呼叫 之後,對應至該值之近似位置的記錄會變成目前。

注意

不建議呼叫 SetPercentPosition 將當前記錄移至記錄集中的特定記錄。 請改為呼叫 SetBookmark 成員函式。

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

CDaoRecordset::Update

呼叫 或 Edit 成員函式之後,呼叫AddNew這個成員函式。

virtual void Update();

備註

需要此呼叫才能完成 AddNewEdit 作業。

AddNewEdit準備一個編輯緩衝區,在其中新增或編輯的數據要儲存至數據源。 Update 會儲存數據。 只會更新標示或偵測到變更的欄位。

如果數據源支援交易,您可以進行 Update 交易的呼叫(及其對應 AddNewEdit 呼叫)部分。

警告

如果您在未先呼叫 或Edit的情況下呼叫 AddNew UpdateUpdate則會CDaoException擲回 。 如果您呼叫 或 Edit,您必須先呼叫 AddNew Update MoveNext,或關閉記錄集或數據源連線。 否則,您的變更會遺失而不通知。

當記錄集物件在多用戶環境中以悲觀方式鎖定時,記錄會從使用到 Edit 更新完成的時間保持鎖定。 如果記錄集處於開放式鎖定狀態,則會鎖定記錄,並與在資料庫中更新之前預先編輯的記錄進行比較。 如果您呼叫 Edit之後記錄已變更,則 Update 作業會失敗,且 MFC 會擲回例外狀況。 您可以使用 變更鎖定模式 SetLockingMode

注意

開放式鎖定一律用於外部資料庫格式,例如 ODBC 和可安裝的ISAM。

如需相關信息,請參閱 DAO 說明中的“AddNew 方法”、“CancelUpdate 方法”、“Delete 方法”、“LastModified 屬性”、“Update 方法” 和 “EditMode 屬性” 主題。

另請參閱

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