Access VBA:ADOでデータの追加(AddNew ~ Update)

Access VBAでレコードを追加する場合、レコードセットを開くときに引数の設定を正確にしておかないとエラーになります。




BackHome BackTips Backメニュー

構文:
Recordset.Open テーブル名・クエリ名・SQLステートメント , Connectionオブジェクト名 , カーソルタイプ , ロックタイプ , オプション

カーソルタイプには下記の種類があります。
引数 内容

adOpenForwardOnly 0 既定値です。前方向にのみ移動でき、他はadOpenStaticと同じです。
参照のみなら最も高速です。
adOpenKeyset 1 ほかのユーザーが追加したレコードは表示できない以外、adOpenDynamicと同じです。
ほかのユーザーが削除したレコードはアクセスできません。
ほかのユーザーが変更したデータは表示できます。

adOpenDynamic 2 Recordset 内でのすべての動作を許可します。
ほかのユーザーによる追加、変更、および削除ができます。
adOpenStatic 3 データの検索またはレポートの作成に使用します。
ほかのユーザーによる追加、変更、または削除は表示されません。
adOpenUnspecified -1 種類を指定しません。

ロックタイプには下記の種類があります。

引数 内容

adLockReadOnly 1 既定値です。
読み取り専用です。データの変更はできません。
adLockPessimistic 2 レコード単位で排他的ロックを行います。
編集直後にレコードをロックします。
adLockOptimistic 3 レコード単位で共有的ロックを行います。
Updateメソッドを呼び出した場合にのみ、共有的ロックします。
adLockBatchOptimistic 4 複数のレコードをバッチ更新します。
adLockUnspecified -1 ロックの種類を指定しません。

■ 実行Access画面
「ADOで新規レコードを追加」ボタンで追加を開始します。
実行順は、AddNewメソッドで開始し、Updateメソッドで更新します。
レコード追加フォーム

■レコードが追加されています。
顧客IDはオートナンバー型なので自動的にナンバーが入力されています。
テーブルデータ
■ Access VBA 実行コード例

Option Compare Database
Option Explicit

Private Sub コマンド0_Click()
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = Application.CurrentProject.Connection
    Set rs = New ADODB.Recordset
    'テーブルを開く
    rs.Open "M_顧客マスター", cn, adOpenKeyset, adLockOptimistic
    '新規レコードの追加
    rs.AddNew
    rs!顧客名 = "大山信二"
    rs!年齢 = "33"
    rs!登録日 = Now
        rs.Update
    'ADOを閉じる
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
   
    MsgBox "データを追加しました。"
End Sub


BackHome BackTips Backメニュー

Copyright(C) FeedSoft