共用方式為


CDaoRecordset 類別

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

語法

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 連線ivity (ODBC) 和該 DBMS 的 ODBC 驅動程式來存取 DBMS。

注意

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

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

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

CDaoRecordset 會使用 DAO 記錄欄位交換 (DFX),透過您 CDaoRecordsetCDaoRecordset 衍生類別的型別安全 C++ 成員,支援讀取和更新記錄欄位。 您也可以在資料庫中實作資料行的動態系結,而不使用 使用 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 成員函式的 記錄集是不合法的 AddNewCDaoException如果您呼叫 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 函式會因為 Edit AddNew 作業而取消任何擱置的更新 。

virtual void CancelUpdate();

備註

例如,如果應用程式呼叫 EditAddNew 成員函式,但尚未呼叫 Update ,則會 CancelUpdate 取消呼叫 或 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。

備註

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

如需相關資訊,請參閱 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 來重複使用物件。

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

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

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

CDaoRecordset::D elete

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

virtual void Delete();

備註

成功刪除之後,記錄集的欄位資料成員會設定為 Null 值,而且您必須明確呼叫其中一個記錄集導覽成員函式( Move 、Seek SetBookmark 等等),才能離開已刪除的記錄。 當您從記錄集刪除記錄時,在呼叫 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 不是呼叫 Update 來完成作業的 Edit 替代專案。 如需交易的詳細資訊,請參閱 類別 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 成員函式。 如果 lSize lBookmark 建立部分或完全超出 和 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 作業。

  • 當您搜尋包含日期的欄位時,您應該使用美國日期格式(月-日-年),即使您未使用美國版的 Microsoft Jet 資料庫引擎也一樣:否則,可能找不到相符的記錄。

  • 使用 ODBC 資料庫和大型動態集時,您可能會發現使用 Find 作業的速度很慢,尤其是在使用大型記錄集時。 您可以搭配自訂 ORDERBY WHERE 子句、參數查詢或 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 作業。

  • 當您搜尋包含日期的欄位時,您應該使用美國日期格式(月-日-年),即使您未使用美國版的 Microsoft Jet 資料庫引擎也一樣:否則,可能找不到相符的記錄。

  • 使用 ODBC 資料庫和大型動態集時,您可能會發現使用 Find 作業的速度很慢,尤其是在使用大型記錄集時。 您可以搭配自訂 ORDERBY WHERE 子句、參數查詢或 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 作業。

  • 當您搜尋包含日期的欄位時,您應該使用美國日期格式(月-日-年),即使您未使用美國版的 Microsoft Jet 資料庫引擎也一樣:否則,可能找不到相符的記錄。

  • 使用 ODBC 資料庫和大型動態集時,您可能會發現使用 Find 作業的速度很慢,尤其是在使用大型記錄集時。 您可以搭配自訂 ORDERBY WHERE 子句、參數查詢或 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 作業。

  • 當您搜尋包含日期的欄位時,您應該使用美國日期格式(月-日-年),即使您未使用美國版的 Microsoft Jet 資料庫引擎也一樣:否則,可能找不到相符的記錄。

  • 使用 ODBC 資料庫和大型動態集時,您可能會發現使用 Find 作業的速度很慢,尤其是在使用大型記錄集時。 您可以搭配自訂 ORDERBY WHERE 子句、參數查詢或 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 物件的版本會更有效率。 此函式的後一個版本會保留為回溯相容性。

使用 GetFieldValue SetFieldValue 在執行時間動態系結欄位,而不是使用 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 成員函式時,包含您所編輯記錄的資料頁就會被鎖定。 當您呼叫 Update Close 成員函式或任何移動或尋找作業時,頁面會解除鎖定。

當開放式鎖定生效時,包含記錄的資料頁只會在以成員函式更新 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_strFilter m_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/ IsEOF Move 作業。

州/省 MoveFirst、MoveLast MovePrev,

移動 < 0
移動 0 MoveNext,

移動 > 0
IsBOF=nonzero,

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

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

允許 Move 作業並不表示作業會成功找到記錄。 它只表示允許嘗試執行指定的 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/ IsEOF Move 作業。

州/省 MoveFirst、MoveLast MovePrev,

移動 < 0
移動 0 MoveNext,

移動 > 0
IsBOF=nonzero,

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

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

允許 Move 作業並不表示作業會成功找到記錄。 它只表示允許嘗試執行指定的 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_nParams 。 m_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 子句。

備註

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

您無法排序資料表類型的 recordset 物件。 若要判斷資料表類型記錄集的排序次序,請呼叫 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 會擲 CDaoExceptionIsBOF 回 ,指出您已在第一筆記錄之前捲動,或是記錄集未選取任何記錄。

警告

如果記錄集沒有記錄,則呼叫任何 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 會擲 CDaoExceptionIsBOF 回 ,指出您已在第一筆記錄之前捲動,或是記錄集未選取任何記錄。

警告

如果記錄集沒有記錄,則呼叫任何 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 WHERE ORDERBY 子句)。

  • 傳遞查詢。

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 已經開啟的物件。

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

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

    注意

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

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

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

注意

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

當您使用 第三版 Open 傳入 CDaoQueryDef 物件時,將會執行該查詢,而且產生的資料行將可供您透過 和 DFX 機制系結 DoFieldExchange ,以及/或透過 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 會呼叫 GetDefaultSQL ClassWizard 在建立 CDaoRecordset 衍生類別時所產生的可覆寫成員函式。 此值會提供您在 ClassWizard 中指定的 tabledef(s) 和/或 querydef name(s)。 您可以改為在 lpszSQL 參數中 指定其他資訊。

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

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

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

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

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 會成功。

警告

只有在您呼叫 之後才呼叫 RequeryOpen

注意

呼叫 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
對應至陣列大小的整數,這是索引中的欄位數目。

注意

請勿在索引鍵中指定萬用字元。 萬用字元會導致 Seek 傳回沒有相符的記錄。

傳回值

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

備註

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

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

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

當您呼叫 Seek 時,會傳遞一或多個索引鍵值和比較運算子 (「」、「 << =」、「= > 」、「=」 或 「 > 」 )。 Seek會搜尋指定的索引鍵欄位,並找出符合 lpszComparison pKey1 指定準則的第一筆記錄。 找到之後,會 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 設定為 VT_BSTRT (ANSI), 或使用 COleVariant setString lpszSrc,vtSrc 式設為 。 VT_BSTRT

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

CDaoRecordset::SetCacheSize

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

void SetCacheSize(long lSize);

參數

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

備註

快取是在本機記憶體中保留最近從伺服器擷取的資料的空間,當應用程式執行時,資料會再次要求。 資料快取可改善應用程式透過動態集類型記錄集物件從遠端伺服器擷取資料的效能。 要求資料時,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 設定為 VT_BSTRT (ANSI), 或使用 COleVariant setString lpszSrc,vtSrc 式設為 。 VT_BSTRT

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

CDaoRecordset::SetCurrentIndex

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

void SetCurrentIndex(LPCTSTR lpszIndex);

參數

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

備註

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

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

從資料表類型記錄集傳回的記錄只能由針對基礎資料表def 定義的索引排序。 若要依其他順序排序記錄,您可以使用儲存在 CDaoRecordset::m_strSort SQL 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

例如,如果您使用雙緩衝機制,如果您特別想要將目前記錄的欄位指定為沒有值,請將 bNull 設定為 TRUE 呼叫 SetFieldNull ,將它標示為 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
字串的指標,包含欄位內容的值。

備註

使用 SetFieldValue GetFieldValue 在執行時間動態系結欄位,而不是使用 DoFieldExchange 機制以靜態方式系結資料行。

請注意,如果您未建立 UNICODE 記錄集,則必須使用不包含 COleVariant 參數的 SetFieldValue 形式,或者 COleVariant 必須明確宣告物件 ANSI。 您可以使用 COleVariant::COleVariant (lpszSrc,vtSrc )形式的建構函式,將 vtSrc 設定為 VT_BSTRT (ANSI), 或使用 COleVariant setString lpszSrc,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 設定為 VT_BSTRT (ANSI), 或使用 COleVariant setString lpszSrc,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 的情況下呼叫 AddNewUpdateUpdate 則會 CDaoException 擲回 。 如果您呼叫 或 Edit ,您必須先呼叫 AddNewUpdate MoveNext ,或關閉記錄集或資料來源連線。 否則,您的變更會遺失而不通知。

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

注意

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

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

另請參閱

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