CRecordView 類別
在控制項中顯示資料庫記錄的檢視。
語法
class AFX_NOVTABLE CRecordView : public CFormView
成員
受保護的建構函式
名稱 | 描述 |
---|---|
CRecordView::CRecordView | 建構 CRecordView 物件。 |
公用方法
名稱 | 描述 |
---|---|
CRecordView::IsOnFirstRecord | 如果目前記錄是相關聯記錄集中的第一筆記錄,則傳回非零。 |
CRecordView::IsOnLastRecord | 如果當前記錄是相關聯記錄集中的最後一筆記錄,則傳回非零。 |
CRecordView::OnGetRecordset | 傳回衍生自 CRecordset 之類別物件的指標。 ClassWizard 會為您覆寫此函式,並視需要建立記錄集。 |
CRecordView::OnMove |
受保護的方法
名稱 | 描述 |
---|---|
CRecordView::OnMove | 如果當前記錄已變更,請在數據源上更新它,然後移至指定的記錄(下一筆、上一筆、第一筆或最後一筆)。 |
備註
檢視是直接連接到 CRecordset
物件的窗體檢視。 檢視會從對話框範本資源建立,並在對話框範本的控件中顯示物件的欄位 CRecordset
。 物件 CRecordView
會使用對話資料交換 (DDX) 和記錄欄位交換 (RFX) 將表單上的控制件與記錄集欄位之間的資料移動自動化。 CRecordView
也提供預設實作,以便移至目前在檢視時更新記錄的第一筆、下一筆、上一筆或最後一筆記錄,以及更新記錄的介面。
注意
如果您使用數據存取物件 (DAO) 類別,而不是 Open Database Connectivity (ODBC) 類別,請改用 CDaoRecordView 類別。 如需詳細資訊,請參閱概觀:資料庫程序設計一文。
建立記錄檢視的最常見方式是使用應用程式精靈。 應用程式精靈會建立記錄檢視類別和其相關聯的記錄集類別,作為基本架構入門應用程式的一部分。 如果您未使用 [應用程式精靈] 建立記錄檢視類別,您可以稍後使用 ClassWizard 建立記錄檢視類別。 如果您只需要單一窗體,應用程式精靈方法會比較容易。 ClassWizard 可讓您決定稍後在開發程式中使用記錄檢視。 使用 ClassWizard 個別建立記錄檢視和記錄集,然後連接它們是最有彈性的方法,因為它可讓您更控制命名記錄集類別及其 。H/.CPP 檔案。 此方法也可讓您在同一個記錄集類別上有多個記錄檢視。
為了讓終端用戶輕鬆地從記錄移至記錄檢視中的記錄,應用程式精靈會建立功能表(以及選擇性工具列)資源,以移至第一筆、下一筆、上一筆或最後一筆記錄。 如果您使用 ClassWizard 建立記錄檢視類別,則必須使用功能表和點陣圖編輯器自行建立這些資源。
如需從記錄移至記錄之預設實作的相關信息,請參閱IsOnFirstRecord
和使用IsOnLastRecord
記錄檢視一文和文章。
CRecordView
會追蹤記錄集中使用者的位置,讓記錄檢視可以更新使用者介面。 當使用者移至記錄集的任一端時,記錄檢視會停用使用者介面物件,例如功能表項或工具列按鈕,以便以相同方向進一步移動。
如需宣告和使用記錄檢視和記錄集類別的詳細資訊,請參閱記錄檢視一文中的<設計和建立記錄檢視>。 如需記錄檢視的運作方式和使用方式的詳細資訊,請參閱使用記錄檢視一文。
繼承階層架構
CRecordView
需求
標頭: afxdb.h
CRecordView::CRecordView
當您建立衍生自 CRecordView
的類型物件時,請呼叫任一形式的建構函式來初始化檢視物件,並識別檢視所依據的對話資源。
explicit CRecordView(LPCTSTR lpszTemplateName);
explicit CRecordView(UINT nIDTemplate);
參數
lpszTemplateName
包含以 Null 結尾的字串,該字串是對話範本資源的名稱。
nIDTemplate
包含對話框範本資源的識別碼。
備註
您可以依名稱來識別資源(將字串當做自變數傳遞至建構函式)或其標識碼(傳遞不帶正負號的整數作為自變數)。 建議使用資源標識碼。
注意
衍生類別 必須 提供自己的建構函式。 在衍生類別的建構函式中,以資源名稱或標識符作為自變數呼叫建構 CRecordView::CRecordView
函式,如下列範例所示。
CRecordView::OnInitialUpdate
會呼叫 UpdateData
,其會呼叫 DoDataExchange
。 這個初始呼叫會將DoDataExchange
CRecordView
控件連線到 CRecordset
ClassWizard 所建立的欄位數據成員。 在您呼叫基類 CFormView::OnInitialUpdate
成員函式之前,無法使用這些數據成員。
注意
如果您使用 ClassWizard,精靈會定義值 enum
CRecordView::IDD
、在類別宣告中指定該值,並在建構函式的成員初始化清單中使用它。
範例
CMyRecordView::CMyRecordView()
: CRecordView(CMyRecordView::IDD)
{
m_pSet = NULL;
// TODO: add construction code here
}
CRecordView::IsOnFirstRecord
呼叫這個成員函式,以判斷目前記錄是否為與此記錄檢視相關聯之 recordset 物件中的第一筆記錄。
BOOL IsOnFirstRecord();
傳回值
如果當前記錄是記錄集中的第一筆記錄,則為非零;否則為 0。
備註
此函式適用於撰寫由 ClassWizard 所撰寫之預設命令更新處理程式的您自己的實作。
如果使用者移至第一筆記錄,架構會停用您移至第一筆或上一筆記錄的任何使用者介面物件。
CRecordView::IsOnLastRecord
呼叫這個成員函式,以判斷當前記錄是否為與此記錄檢視相關聯之 recordset 物件中的最後一筆記錄。
BOOL IsOnLastRecord();
傳回值
如果當前記錄是記錄集中的最後一筆記錄,則為非零;否則為 0。
備註
此函式適用於撰寫 ClassWizard 寫入的預設命令更新處理程式自有實作,以支援使用者介面,以便從記錄移至記錄。
警告
此函式的結果很可靠,不同之處在於檢視無法偵測記錄集的結尾,直到使用者移過記錄集為止。 用戶必須先移至最後一筆記錄,記錄檢視才能告訴它必須停用任何使用者介面物件,才能移至下一筆或最後一筆記錄。 如果使用者移動超過最後一筆記錄,然後移回最後一筆記錄(或之前),記錄檢視可以追蹤用戶在記錄集中的位置,並正確地停用使用者介面物件。 IsOnLastRecord
在呼叫 實作函 OnRecordLast
式 之後,也會不可靠,它會處理 ID_RECORD_LAST 命令或 CRecordset::MoveLast
。
CRecordView::OnGetRecordset
傳回與記錄檢視相關聯之衍生物件的指標 CRecordset
。
virtual CRecordset* OnGetRecordset() = 0;
傳回值
如果成功建立物件,則為 CRecordset
衍生物件的指標,否則為 NULL 指標。
備註
您必須覆寫這個成員函式,以建構或取得記錄集物件,並傳回它的指標。 如果您使用 ClassWizard 宣告記錄檢視類別,精靈會為您撰寫預設覆寫。 ClassWizard 的預設實作會在有記錄檢視時傳回儲存在記錄檢視中的記錄集指標。 如果沒有,它會建構您使用 ClassWizard 指定之類型的 recordset 物件,並呼叫其 Open
成員函式來開啟數據表或執行查詢,然後傳回物件的指標。
如需詳細資訊和範例,請參閱記錄檢視:使用記錄檢視一文。
CRecordView::OnMove
呼叫這個成員函式以移至記錄集中的不同記錄,並在記錄檢視的控件中顯示其欄位。
virtual BOOL OnMove(UINT nIDMoveCommand);
參數
nIDMoveCommand
下列其中一個標準命令識別碼值:
ID_RECORD_FIRST移至記錄集中的第一筆記錄。
ID_RECORD_LAST移至記錄集中的最後一筆記錄。
ID_RECORD_NEXT移至記錄集中的下一筆記錄。
ID_RECORD_PREV移至記錄集中的上一筆記錄。
傳回值
如果移動成功,則為非零;否則,如果移動要求遭到拒絕,則為 0。
備註
默認實作會呼叫與記錄檢視相關聯之對象的適當 Move
成員函式 CRecordset
。
根據預設, OnMove
如果使用者在記錄檢視中變更了目前的記錄,則會更新數據源上的當前記錄。
[應用程式精靈] 會建立具有 [第一筆記錄]、[上次記錄]、[下一筆記錄] 和 [上一筆記錄] 功能表項的功能表資源。 如果您選取 [可停駐工具列] 選項,[應用程式精靈] 也會建立一個工具列,其中包含對應至這些命令的按鈕。
如果您移動超過記錄集中的最後一筆記錄,記錄檢視會繼續顯示最後一筆記錄。 如果您往後移動超過第一筆記錄,記錄檢視會繼續顯示第一筆記錄。
警告
如果記錄集沒有記錄,則呼叫 OnMove
會擲回例外狀況。 在對應的移動作業之前,呼叫適當的使用者介面更新處理程式函式 、OnUpdateRecordFirst
OnUpdateRecordLast
、 OnUpdateRecordNext
或 OnUpdateRecordPrev
,以判斷記錄集是否有任何記錄。