Microsoft Access Club >ADO入門講座 >このページ >次頁 < 前項  サイト内検索
 

新規レコードを作成し単一フィールドに値を追加 - AddNewメソッド : ADO入門講座



レコードセットを用いて、新規レコードをテーブルに追加することができます。この場合は、RecordsetオブジェクトのAddNewメソッドを用います。
 

留意点
  • AddNewメソッドを実行した後は、そのレコードがカレントレコードになります。
  • 開いているRecordsetオブジェクトのLockTypeプロパティの値がadLockReadOnlyの場合は、新しいレコードを追加できません。

AddNewメソッドの構文

AddNewメソッドの構文は、以下のような組み合わせになります。

Recordsetオブジェクト + .(ドット) + AddNewメソッド  + Fields + ,(カンマ) + Values

項目 意味
Recordsetオブジェクト 開いているRecordsetオブジェクト
Fields レコードを追加するフィールド名
Value 代入する値
解説
  • 代入する値がテキスト型の場合は、ダブルクォーション(")で囲みます。
  • 代入する値が日付/時刻型の場合は、シャープ(#)で囲みます。
  • 代入する値が数値の場合は、そのまま記述します。

単一フィールドに値を追加する

AddNewメソッドを用いる際に、以下の注意点があります。

  • 複数のフィールドを持っているテーブルであっても、1つのフィールドに1つの値のみしか追加できません。
  • 複数のフィールドで、Nullを許可しない設定(値要求をはい)になっている場合はエラーが発生します。これを回避するには、何かしらの値を代入するしか手がありません。
具体的な検証

この注意点を具体的に検証していきましょう。AddNewメソッドを用いて、新規レコードを追加します。以下のテーブルレコードを想定します。

  1. 売上日フィールドに2004/12/31を代入します。
    • AddNewメソッドは、1つのフィールドに1つの値しか追加できない決まりがあります。
サンプルテーブル
売上日 社員名 性別 売上額 職種
2004/01/23 橘 修平 男性 52100 一般職
2004/02/02 柴田 喜一 男性 654100 技能職
2004/12/31        

Subプロシージャの作成

全ての複数フィールドでNullを許可している場合は、以下のようなサンプルプロシージャを作成します。

Sub ADORecordsetAddNew()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim varBM As Variant
    Dim mySQL As String
    
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    
    rs.Open "T_sample", cn, adOpenKeyset, adLockOptimistic
    rs.AddNew "売上日", #12/31/2004#
    
    Debug.Print "追加レコード一覧" 'ここから
    Do Until rs.EOF
        Debug.Print rs!売上日, rs!社員名, rs!性別, rs!売上額
        rs.MoveNext
    Loop 'ここまでが表示させるプログラミングです。
        
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing

End Sub
実行結果

このプロシージャをイミディエイト画面上で実行すると、以下のレコードがイミディエイト画面に表示されます。

ADORecordsetAddNew '実行する
追加レコード一覧
2004/12/31    Null          Null          Null
事例

フィールド名 社員名 のプロパティを以下に変更して、プロシージャ ADORecordsetAddNew を実行する。

  • 値要求 → なし
  • 空文字列の許可 → なし
  • インデックス → はい (重複なし)
追加レコード一覧
2004/12/31    Null          Null          Null
  • 値要求 → あり
  • 空文字列の許可 → なし
  • インデックス → はい (重複なし)

下図のエラーメッセージが表示され、AddNewメソッドを実行できません。

社員名フィールドに何がしかの値を代入する必要があります。ここで、以下のようにプロシージャを変更してみましょう。

Sub ADORecordsetAddNew()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim varBM As Variant
    Dim mySQL As String
    
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    
    rs.Open "T_sample", cn, adOpenKeyset, adLockOptimistic
    rs.AddNew "売上日", #12/31/2004#
    rs.AddNew "社員名", "松井雄二"
    
    Debug.Print "追加レコード一覧"
    Do Until rs.EOF
        Debug.Print rs!売上日, rs!社員名, rs!性別, rs!売上額
        rs.MoveNext
    Loop
        
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing

End Sub
解説

売上日フィールドに続いて、社員名フィールドにもAddNewメソッドを用いて文字列を代入する構文です。

    rs.AddNew "売上日", #12/31/2004#
    rs.AddNew "社員名", "松井雄二"
実行結果

このプロシージャをイミディエイト画面上で実行すると、以下の結果を得ることができます。

ADORecordsetAddNew '実行する

追加レコード一覧
Null          松井雄二      Null          Null

売上日フィールドに代入した値が消えてなくなっています。Recordset.AddNew構文では、追加できるフィールドは1つに限定されることが証明されたわけです。

対策

AddNewメソッドを用いて複数フィールドに値を代入する場合は、Updateメソッドを組み合わせる必要があります。詳細は、次頁を参照してください。

関連ページ

 

2004/12/31

ページの先頭へ 前ページへ戻る


新規レコード追加 - AddNewメソッド : ADO入門講座


 

-Microsoft Access Club-

年額2,400円でドメインネームサーバーをご用意します。自宅サーバ構築時にご利用下さい。自宅サーバーは応用範囲が広いです。
年額2,400円でドメインネームサーバー。
自社・自宅サーバ構築時にご利用下さい。
やはり、自前サーバーは応用範囲が広いです。