CRecordset::AddNew
更新 : 2007 年 11 月
テーブルに新しいレコードを追加する準備をします。
virtual void AddNew( );
解説
新たに追加されたレコードを見るには Requery メンバ関数を呼び出します。レコードのフィールドは、初期状態では Null になります。(C++ での NULL とは異なり、データベースの専門用語では、NULL は "値を持たない" ことを意味します。)追加操作を完了するには Update メンバ関数を呼び出します。Update は、データ ソースに変更内容を保存します。
メモ : |
---|
バルク行フェッチを実装した場合、AddNew は呼び出すことができません。呼び出すと、アサートします。CRecordset クラスはデータのバルク行を更新する機構を持っていませんが、ODBC API 関数の SQLSetPos を使用することによって独自の関数を作成できます。バルク行フェッチの詳細については、「レコードセット : バルク行フェッチ (ODBC)」を参照してください。 |
AddNew 関数はレコードセットのフィールド データ メンバを使って新しい空のレコードを準備します。AddNew 関数を呼び出した後で必要なレコードセットのフィールド データ メンバに値を設定します。このとき Edit メンバ関数を呼び出す必要はありません。Edit 関数は既に存在するレコードに対してだけ使います。その後 Update 関数を呼び出すと、フィールド データ メンバの変更された値がデータ ソースに保存されます。
注意 : |
---|
Update 関数を呼び出す前に新しいレコードにスクロールすると、新しいレコードは警告なしに失われます。 |
データ ソースがトランザクションをサポートしていれば、AddNew 関数の呼び出しをトランザクションの一部に含めることができます。トランザクションの詳細については、「CDatabase クラス」クラスを参照してください。トランザクションでは、AddNew 関数の呼び出しの前に、CDatabase::BeginTrans を呼び出す必要があることに注意してください。
メモ : |
---|
ダイナセットでは、新しいレコードは最終レコードとしてレコードセットに追加されます。追加レコードはスナップショットには追加されません。レコードセットを再表示するには Requery 関数を呼び出します。 |
Open メンバ関数が呼び出されていないレコードセットに対して AddNew 関数を呼び出すことはできません。追加できないレコードセットに対して AddNew 関数を呼び出すと、CDBException がスローされます。レコードセットが更新できるかどうかを調べるには CanAppend 関数を呼び出します。
詳細については、「レコードセット : レコード更新のしくみ (ODBC)」、「レコードセット : レコードの追加、更新、削除 (ODBC)」、および「トランザクション (ODBC)」を参照してください。
例外
このメソッドは、CDBException* 型の例外をスローできます。
使用例
「トランザクション : レコードセットからのトランザクション実行 (ODBC)」を参照してください。
必要条件
ヘッダー : afxdb.h