CRecordView クラス
コントロール内にデータベース レコードを表示するビューです。
構文
class AFX_NOVTABLE CRecordView : public CFormView
メンバー
保護されたコンストラクター
名前 | 説明 |
---|---|
CRecordView::CRecordView | CRecordView オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CRecordView::IsOnFirstRecord | 現在のレコードが関連付けられているレコードセットの最初のレコードである場合は、0 以外の値を返します。 |
CRecordView::IsOnLastRecord | 現在のレコードが関連付けられているレコードセットの最後のレコードである場合は、0 以外の値を返します。 |
CRecordView::OnGetRecordset | CRecordset から派生したクラスのオブジェクトへのポインターを返します。 ClassWizard によってこの関数がオーバーライドされ、必要に応じてレコードセットが作成されます。 |
CRecordView::OnMove |
保護メソッド
名前 | 説明 |
---|---|
CRecordView::OnMove | 現在のレコードが変更された場合は、データ ソースでレコードを更新し、指定したレコード (次、前、先頭、または最後) に移動します。 |
解説
ビューは、 CRecordset
オブジェクトに直接接続されたフォーム ビューです。 ビューはダイアログ テンプレート リソースから作成され、ダイアログ テンプレートのコントロールに CRecordset
オブジェクトのフィールドが表示されます。 CRecordView
オブジェクトは、ダイアログ データ交換 (DDX) とレコード フィールド交換 (RFX) を使用して、フォーム上のコントロールとレコードセットのフィールド間のデータの移動を自動化します。 CRecordView
また、最初、次、前、または最後のレコードに移動するための既定の実装と、現在表示されているレコードを更新するためのインターフェイスも提供します。
Note
Open Database Connectivity (ODBC) クラスではなく、データ アクセス オブジェクト (DAO) クラスを使用する場合は、代わりにクラス CDaoRecordView を使用します。 詳細については、「 Overview: データベース プログラミング」を参照してください。
レコード ビューを作成する最も一般的な方法は、アプリケーション ウィザードを使用することです。 アプリケーション ウィザードでは、スケルトン スターター アプリケーションの一部として、レコード ビュー クラスとそれに関連付けられているレコード セット クラスの両方が作成されます。 アプリケーション ウィザードでレコード ビュー クラスを作成しない場合は、後で ClassWizard で作成できます。 単一のフォームが必要な場合は、アプリケーション ウィザードのアプローチが簡単です。 ClassWizard を使用すると、開発プロセスの後半でレコード ビューを使用することができます。 ClassWizard を使用してレコード ビューとレコードセットを個別に作成し、それらを接続するのが最も柔軟なアプローチです。レコードセット クラスとその名前を指定する際の制御が強化されます。H/.CPP ファイル。 この方法では、同じレコード セット クラスに複数のレコード ビューを設定することもできます。
エンド ユーザーがレコード ビューでレコードからレコードに簡単に移動できるように、アプリケーション ウィザードは、最初、次、前、または最後のレコードに移動するためのメニュー (および必要に応じてツール バー) リソースを作成します。 ClassWizard でレコード ビュー クラスを作成する場合は、メニュー エディターとビットマップ エディターを使用してこれらのリソースを自分で作成する必要があります。
レコードからレコードへの移動に関する既定の実装については、「 IsOnFirstRecord
と IsOnLastRecord
」および「レコード ビューの使用」 記事を参照。
CRecordView
レコード ビューがユーザー インターフェイスを更新できるように、レコードセット内のユーザーの位置を追跡します。 ユーザーがレコードセットの末尾に移動すると、レコード ビューでは、メニュー項目やツール バー ボタンなどのユーザー インターフェイス オブジェクトが無効にされ、同じ方向に移動します。
レコード ビューおよびレコード セット クラスの宣言と使用の詳細については、「レコード ビューのデザインと作成」を参照してください レコード ビュー。 レコード ビューのしくみとその使用方法の詳細については、「 レコード ビューの使用」を参照してください。
継承階層
CRecordView
要件
Header: afxdb.h
CRecordView::CRecordView
CRecordView
から派生した型のオブジェクトを作成する場合は、いずれかの形式のコンストラクターを呼び出してビュー オブジェクトを初期化し、ビューの基になるダイアログ リソースを識別します。
explicit CRecordView(LPCTSTR lpszTemplateName);
explicit CRecordView(UINT nIDTemplate);
パラメーター
lpszTemplateName
ダイアログ テンプレート リソースの名前である null で終わる文字列を格納します。
nIDTemplate
ダイアログ テンプレート リソースの ID 番号を格納します。
解説
リソースは、名前 (コンストラクターに引数として文字列を渡す) または ID (引数として符号なし整数を渡す) で識別できます。 リソース ID を使用することをお勧めします。
Note
派生クラス must 独自のコンストラクターを提供します。 派生クラスのコンストラクターで、次の例に示すように、リソース名または ID を引数として CRecordView::CRecordView
コンストラクターを呼び出します。
CRecordView::OnInitialUpdate
は、DoDataExchange
を呼び出すUpdateData
を呼び出します。 DoDataExchange
へのこの最初の呼び出しは、CRecordView
コントロールを (間接的に) ClassWizard によって作成されたフィールド データ メンバーCRecordset
接続します。 これらのデータ メンバーは、基底クラス CFormView::OnInitialUpdate
メンバー関数を呼び出すまで使用できません。
Note
ClassWizard を使用する場合、ウィザードはCRecordView::IDD
enum
値を定義し、クラス宣言で指定し、コンストラクターのメンバー初期化リストで使用します。
例
CMyRecordView::CMyRecordView()
: CRecordView(CMyRecordView::IDD)
{
m_pSet = NULL;
// TODO: add construction code here
}
CRecordView::IsOnFirstRecord
このメンバー関数を呼び出して、現在のレコードがこのレコード ビューに関連付けられているレコード セット オブジェクトの最初のレコードであるかどうかを判断します。
BOOL IsOnFirstRecord();
戻り値
現在のレコードがレコードセットの最初のレコードの場合は 0 以外。それ以外の場合は 0。
解説
この関数は、ClassWizard によって記述された既定のコマンド更新ハンドラーの独自の実装を記述する場合に便利です。
ユーザーが最初のレコードに移動した場合、フレームワークは、最初または前のレコードに移動するために持っているすべてのユーザー インターフェイス オブジェクトを無効にします。
CRecordView::IsOnLastRecord
このメンバー関数を呼び出して、現在のレコードがこのレコード ビューに関連付けられているレコードセット オブジェクトの最後のレコードであるかどうかを判断します。
BOOL IsOnLastRecord();
戻り値
現在のレコードがレコードセットの最後のレコードの場合は 0 以外。それ以外の場合は 0。
解説
この関数は、ClassWizard がレコードからレコードに移動するためのユーザー インターフェイスをサポートするために書き込む既定のコマンド更新ハンドラーの独自の実装を記述する場合に便利です。
注意事項
この関数の結果は信頼性が高くなりますが、ユーザーがレコードセットを越えて移動するまで、ビューでレコードセットの末尾を検出できない点が異なります。 ユーザーは、レコード ビューが次のレコードまたは最後のレコードに移動するためにユーザー インターフェイス オブジェクトを無効にする必要があることを示す前に、最後のレコードを超えて移動する必要があります。 ユーザーが最後のレコードを越えて最後のレコード (またはレコードの前) に戻った場合、レコード ビューはレコードセット内のユーザーの位置を追跡し、ユーザー インターフェイス オブジェクトを正しく無効にすることができます。 IsOnLastRecord
は、ID_RECORD_LAST コマンドまたはCRecordset::MoveLast
を処理する実装関数OnRecordLast
の呼び出し後も信頼性が低い。
CRecordView::OnGetRecordset
レコード ビューに関連付けられている CRecordset
派生オブジェクトへのポインターを返します。
virtual CRecordset* OnGetRecordset() = 0;
戻り値
オブジェクトが正常に作成された場合は CRecordset
派生オブジェクトへのポインター。それ以外の場合は NULL ポインター。
解説
レコードセット オブジェクトを構築または取得し、そのオブジェクトへのポインターを返すには、このメンバー関数をオーバーライドする必要があります。 ClassWizard でレコード ビュー クラスを宣言すると、ウィザードによって既定のオーバーライドが書き込まれます。 ClassWizard の既定の実装では、レコード ビューに格納されているレコード セット ポインター (存在する場合) が返されます。 存在しない場合は、ClassWizard で指定した型のレコードセット オブジェクトを構築し、その Open
メンバー関数を呼び出してテーブルを開くかクエリを実行し、オブジェクトへのポインターを返します。
詳細と例については、「レコード ビュー: レコード ビューの使用」を参照してください。
CRecordView::OnMove
レコードセット内の別のレコードに移動し、レコード ビューのコントロールにそのフィールドを表示するには、このメンバー関数を呼び出します。
virtual BOOL OnMove(UINT nIDMoveCommand);
パラメーター
nIDMoveCommand
次のいずれかの標準コマンド ID 値。
ID_RECORD_FIRST レコードセットの最初のレコードに移動します。
ID_RECORD_LAST レコードセット内の最後のレコードに移動します。
ID_RECORD_NEXT レコードセット内の次のレコードに移動します。
ID_RECORD_PREV レコードセット内の前のレコードに移動します。
戻り値
移動が成功した場合は 0 以外。それ以外の場合は、移動要求が拒否された場合は 0。
解説
既定の実装では、レコード ビューに関連付けられているCRecordset
オブジェクトの適切なMove
メンバー関数を呼び出します。
既定では、 OnMove
は、ユーザーがレコード ビューで変更した場合に、データ ソースの現在のレコードを更新します。
アプリケーション ウィザードでは、最初のレコード、最後のレコード、次のレコード、および前のレコードのメニュー項目を含むメニュー リソースが作成されます。 [ドッキング可能なツール バー] オプションを選択した場合、アプリケーション ウィザードでは、これらのコマンドに対応するボタンを含むツール バーも作成されます。
レコードセット内の最後のレコードを超えて移動すると、レコード ビューには最後のレコードが引き続き表示されます。 最初のレコードを前に戻すと、レコード ビューに最初のレコードが引き続き表示されます。
注意事項
レコードセットにレコードがない場合、 OnMove
を呼び出すと例外がスローされます。 対応する移動操作の前に、適切なユーザー インターフェイス更新ハンドラー関数 ( OnUpdateRecordFirst
、 OnUpdateRecordLast
、 OnUpdateRecordNext
、または OnUpdateRecordPrev
) を呼び出して、レコードセットにレコードがあるかどうかを判断します。