2020.1.29

ADOを使ったデータの操作(取得、更新、削除)

Accessでフォームのレコードソースにテーブルやクエリを指定しない場合、VBA側でADO(ActiveX Data Objects)を使ったデータの取得や更新を行います。

以下、ADOの簡単な使い方(例)になります。

目次

  • 準備(ADOの参照設定)
  • レコードの取得
  • レコードの追加、更新
  • レコードの削除

準備(ADOの参照設定)

ADOを利用するためには、まず、参照設定が必要です。

VBAのメニュー「ツール > 参照設定」を選択して、

参照可能なライブラリファイルから「Microsoft ActiveX Data Objects 6.1 Library」にチェックを入れて、OKボタンを押します。

以上で、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

Access】関連記事