Recordset.AddNew メソッド (DAO)

適用先: Access 2013、Office 2013

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

構文

式 .AddNew

式Recordset オブジェクトを表す変数。

注釈

AddNew メソッドを使用して、レコードセットによって名付けられた Recordset オブジェクトに新しいレコードを作成して追加します。 このメソッドによってフィールドは既定値に設定されますが、既定値が指定されていない場合は Null (Recordset というテーブル タイプに指定されている既定値) に設定されます。

新しいレコードを編集した後に、 Update メソッドを使用して変更内容を保存し、 Recordset にレコードを追加します。 Update メソッドを使用するまで、データベースは変更されません。

注:

[!メモ] AddNew を実行してから、 Update メソッドを使用せずに別のレコードに移動する操作を実行すると、警告なしで変更内容が失われます。 また、 Recordset を閉じるか、あるいは Recordset または Database オブジェクトを宣言するプロシージャを終了すると、警告なしで新しいレコードが失われます。

注:

[!メモ] Microsoft Access ワークスペースで AddNew を使用する場合に、データベース エンジンでカレント レコードを保持するために新しいページを作成する必要がある場合は、ページのロック状態は排他的となります。 一方、新しいレコードが既存のページに収まる場合は、ページのロック状態は共有的となります。

Recordset の最後のレコードに移動していない場合、他のプロセスでベース テーブルに追加されたレコードがカレント レコード以降に配置された場合は、それらもレコードセットに含まれます。 しかし、レコードを自身の Recordset に追加する場合は、レコードは Recordset に表示され、基になるテーブルに含められるため、すべての新しい Recordset オブジェクトで表示されるようになります。

新しいレコードの位置は、 Recordset の種類に依存します。

  • ダイナセット タイプの Recordset オブジェクトでは、 Recordset が開かれたときに有効になっていた並べ替えルールにかかわらず、レコードは Recordset の最後に追加されます。

  • Index プロパティが設定されているテーブル タイプの Recordset オブジェクトでは、レコードは並べ替え順序に応じた位置に返されます。 Index プロパティが設定されていない場合、新しいレコードは Recordset の最後に返されます。

AddNew を使用する前にカレント レコードであったレコードは、そのままカレント レコードとなります。 新しいレコードをカレント レコードにするには、 Bookmark プロパティを LastModified プロパティの設定で指定されたブックマークに設定します。

注:

[!メモ] レコードを追加、編集、削除するには、基になるデータ ソースのレコードに一意のインデックスが存在している必要があります。 一意のインデックスが存在しない場合、Microsoft Access ワークスペースでは AddNew、Delete、または Editメソッドを呼び出したときに「アクセスが拒否されました」のエラーが発生します。

例

この例では、 AddNew メソッドを使用して、指定した名前を持つ新しいレコードを作成します。 このプロシージャを実行するには、AddName 関数が必要です。

    Sub AddNewX() 
     
     Dim dbsNorthwind As Database 
     Dim rstEmployees As Recordset 
     Dim strFirstName As String 
     Dim strLastName As String 
     
     Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
     Set rstEmployees = _ 
     dbsNorthwind.OpenRecordset("Employees", dbOpenDynaset) 
     
     ' Get data from the user. 
     strFirstName = Trim(InputBox( _ 
     "Enter first name:")) 
     strLastName = Trim(InputBox( _ 
     "Enter last name:")) 
     
     ' Proceed only if the user actually entered something 
     ' for both the first and last names. 
     If strFirstName <> "" and strLastName <> "" Then 
     
     ' Call the function that adds the record. 
     AddName rstEmployees, strFirstName, strLastName 
     
     ' Show the newly added data. 
     With rstEmployees 
     Debug.Print "New record: " & !FirstName & _ 
     " " & !LastName 
     ' Delete new record because this is a demonstration. 
     .Delete 
     End With 
     
     Else 
     Debug.Print _ 
     "You must input a string for first and last name!" 
     End If 
     
     rstEmployees.Close 
     dbsNorthwind.Close 
     
    End Sub 
     
    Function AddName(rstTemp As Recordset, _ 
     strFirst As String, strLast As String) 
     
     ' Adds a new record to a Recordset using the data passed 
     ' by the calling procedure. The new record is then made 
     ' the current record. 
     With rstTemp 
     .AddNew 
     !FirstName = strFirst 
     !LastName = strLast 
     .Update 
     .Bookmark = .LastModified 
     End With 
     
    End Function