ADOを使ったデータの操作(取得、更新、削除)
Accessでフォームのレコードソースにテーブルやクエリを指定しない場合、VBA側でADO(ActiveX Data Objects)を使ったデータの取得や更新を行います。
以下、ADOの簡単な使い方(例)になります。
目次
- 準備(ADOの参照設定)
- レコードの取得
- レコードの追加、更新
- レコードの削除
準備(ADOの参照設定)
レコードの取得
指定したテーブルのレコードをすべて取得してなにかしらの処理を行うコードは以下の通り。
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
Set cn = CurrentProject.Connection
rs.Open "T_商品", cn, adOpenStatic, adLockOptimistic
Do Until rs.EOF
Debug.Print rs!商品名
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
特定のデータに絞り込む場合は先ほどのrs.Open後にFindを実行します。
rs.Open "T_商品", cn, adOpenStatic, adLockOptimistic
rs.Find "ID = 123"
Do Until rs.EOF
Debug.Print rs!商品名
rs.MoveNext
Loop
rs.Openではテーブル名だけでなくSQLを指定することも可能です。
rs.Open "SELECT * FROM T_商品 WHERE ID = 123", cn, adOpenStatic, adLockOptimistic
Do Until rs.EOF
Debug.Print rs!商品名
rs.MoveNext
Loop
ちなみに1件目のデータが必ずある前提であれば以下のように取得することもできます。
rs.Open "SELECT * FROM T_商品 WHERE ID = 123", cn, adOpenStatic, adLockOptimistic
rs.MoveFirst
Debug.Print rs!商品名
レコードの追加、更新
レコードの追加と更新の処理はほとんど同じです。
レコード追加の場合
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
Set cn = CurrentProject.Connection
rs.Open "T_商品", cn, adOpenKeyset, adLockOptimistic
rs.AddNew
rs!商品名 = "新商品"
rs!価格 = 980
rs.Update
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
レコード更新の場合
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
Set cn = CurrentProject.Connection
rs.Open "T_商品", cn, adOpenKeyset, adLockOptimistic
rs.Find "ID = 123"
rs!商品名 = "新商品"
rs!価格 = 980
rs.Update
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
追加と更新の違いは、レコードセットに対して、AddNewをしているか、Findでデータを絞り込んでいるか、だけです。
レコードの削除
レコードの削除は更新と同じでFindでデータを特定した後にDeleteするだけです。
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
Set cn = CurrentProject.Connection
rs.Open "T_商品", cn, adOpenKeyset, adLockOptimistic
rs.Find "ID = 123"
rs.Delete
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing