更新可能な Recordset オブジェクトに追加する新しいレコードを作成します。
recordset.AddNew Fields, Values
AddNew メソッドの構文には、次の指定項目があります。
指定項目 |
説明 |
recordset |
新しいレコードを追加する Recordset オブジェクトを表すオブジェクト変数です。 |
Fields |
(省略可能) 新しいレコードの中の 1 つのフィールドの名前を表すバリアント型 (Variant)、あるいは複数のフィールドの名前または並び順を表すバリアント型 (Variant) の配列です。 |
Values |
(省略可能) 新しいレコードの中の 1 つのフィールドの値を表すバリアント型 (Variant)、あるいは複数のフィールドの値を表すバリアント型 (Variant) の配列です。 |
AddNew メソッドは、新しいレコードを作成して初期化するために使います。現在の Recordset オブジェクトにレコードを追加できるかどうかを確認するには、Supports メソッドを使います。
AddNew メソッドを呼び出した後、新しいレコードはカレント レコードになり、Update メソッドを呼び出した後もカレント レコードのままになっています。Recordset オブジェクトがブックマークをサポートしている場合、新しいレコードは Recordset の終端に追加され、参照することができます。Recordset オブジェクトがブックマークをサポートしていない場合には、別のレコードに移動してしまうと新しいレコードにアクセスできなくなる場合があります。この場合、新しいレコードにアクセスできるようにするには、Requery メソッドを呼び出す必要があります。
カレント レコードの編集中、または新しいレコードの追加中に AddNew を呼び出した場合、ADO は Update メソッドを呼び出して変更をすべて保存してから新しいレコードを作成します。
Fields に配列を指定する場合は、Values にも同数のメンバを持つ配列を指定する必要があり、それ以外の値を指定するとエラーになります。フィールド名の順序は、各配列内のフィールド値の順序と一致していることが必要です。
AddNew メソッドの動作は、Recordset オブジェクトの更新モードと、引数 Fields および Values を渡すかどうかによって決まります。
即時更新モード (1 回の Update メソッド呼び出しでプロバイダが変更内容をデータ元のデータ ソースに書き込むモード) の場合、引数を指定せずに AddNew メソッドを呼び出すと、EditMode プロパティに adEditAdd が設定され、ADO は フィールド値の変更をローカルにキャッシュします。そして、Update メソッドを呼び出すと新しいレコードがデータベースにポストされ、EditMode プロパティが adEditNone に再設定されます。引数 Fields および Values を渡した場合には、ADO は新しいレコードを直ちにデータベースにポストします。したがって Update を呼び出す必要はありません。また、EditMode プロパティの値は adEditNone のままで変わりません。
バッチ更新モード (プロバイダが変更内容をキャッシュに蓄積しておき、UpdateBatch メソッドを呼び出したときだけデータ元のデータ ソースに書き込むモード) の場合、引数を指定せずに AddNew メソッドを呼び出すと、EditMode プロパティが adEditAdd に設定され、ADO はフィールド値の変更をローカルにキャッシュします。そして、Update メソッドを呼び出すと新しいレコードが現在のレコードセットに追加され、EditMode プロパティは adEditNone に再設定されます。ただし、UpdateBatch メソッドを呼び出すまでは、プロバイダはデータ元のデータベースに変更をポストしません。引数 Fields および Values を渡した場合には、ADO は新しいレコードをプロバイダに送り、プロバイダはそれをキャッシュに保存します。この場合も、新しいレコードをデータ元のデータベースにポストするには、UpdateBatch メソッドを呼び出す必要があります。