AddNew メソッド

       

更新可能な Recordset オブジェクトにおいて、新規レコードを作成します。

構文

recordset.AddNew FieldList, Values

パラメータ

recordset   Recordset オブジェクトを指定します。

FieldList   省略可能です。新しいレコード中のフィールド名を指定します。複数のフィールド名を指定するには、フィールド名、または位置を表す値の並びを配列として指定します。

Values   省略可能です。新規レコードのフィールド値を指定するか、または複数のフィールドの値を表す配列を指定します。Fieldlist が配列の場合、Values も同じ数の要素を持つ配列である必要があります。そうでない場合は、エラーが発生します。Fieldlist の配列と Values の配列で、フィールド名の順序とフィールド値の順序を一致させる必要があります。

解説

AddNew メソッドを使って、新規レコードの作成と初期化を行います。現在の Recordset オブジェクトにレコードを追加できるかどうかを確認するには、Supports メソッドで adAddNew (CursorOptionEnum 値) を使用します。

AddNew メソッドを呼び出した後は、新規レコードがカレント レコードになり、Update メソッドを呼び出した後もカレント状態が維持されます。ブックマークをサポートしていない Recordset オブジェクトでは、別のレコードに移動すると、新規レコードにアクセスできなくなることがあります。カーソル タイプによっては、新規レコードにアクセスするために、Requery メソッドを呼び出す必要がある場合があります。

カレント レコードの編集中または新規レコードの追加中に AddNew メソッドを呼び出すと、ADO によって自動的に Update メソッドが呼び出されてすべての変更が保存され、その後で新規レコードが作成されます。

AddNew メソッドの動作は、Recordset オブジェクトの更新モード、および Fieldlist 引数と Values 引数を指定するかどうかによって異なります。

"即時更新モード" (Update メソッドを呼び出したときに、基になるデータ ソースに変更が書き込まれる) では、Fieldlist 引数と Values 引数を指定せずに AddNew メソッドを呼び出すと、EditMode プロパティが adEditAdd (EditModeEnum 値) に設定されます。フィールド値のすべての変更はローカル メモリにキャッシュされます。Update メソッドを呼び出すと、新規レコードがデータベースに書き込まれ、EditMode プロパティが adEditNone (EditModeEnum 値) に再設定されます。Fieldlist 引数と Values 引数を指定した場合は、ADO によって新規レコードは直ちにデータベースに書き込まれ (Update メソッドの呼び出しは不要)、EditMode プロパティの値は adEditNone のまま変更されません。

"バッチ更新モード" (変更はキャッシュに格納され、UpdateBatch メソッドを呼び出したときに、基になるデータ ソースに一括書き込まれる) では、Fieldlist 引数と Values 引数を指定せずに AddNew メソッドを呼び出すと、EditMode プロパティが adEditAdd に設定されます。フィールド値のすべての変更はローカル メモリにキャッシュされます。Update メソッドを呼び出すと、現在の Recordset に新規レコードが追加され、EditMode プロパティが adEditNone に再設定されます。ただし、UpdateBatch メソッドを呼び出すまでは、基になるデータベースに変更は書き込まれません。Fieldlist 引数と Values 引数を指定した場合は、ADO によって新規レコードがプロバイダに送られ、キャッシュに格納されます。基になるデータベースに新規レコードを書き込むには、UpdateBatch メソッドを呼び出す必要があります。

Unique Table ダイナミック プロパティが設定されており、Recordset が、複数のテーブルに対する JOIN 操作の実行結果である場合は、AddNew メソッドでは、Unique Table プロパティに指定されているテーブルにのみフィールドを挿入できます。