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 ワークスペースでは AddNewDelete、または 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