演習34 「ADO」 の解説 その1
Excel から外部データベースにアクセスするオブジェクトには、演習31以降で
述べた DAO と、この演習34以降で述べる ADO がある。
ADO は ActiveX Data Objects の略、DAO は Data Access Objects の略
である。 DAO は Access に特化したオブジェクトであるが、ADO は Access
の他に、SQLServer や Oracle 等のデータベースにも対応できる より一般的
なオブジェクトである。
ADO を使用するために、最初に Excel VBA の VBエディタ において次の設定
を行う。 VBE - ツール - 参照設定 -
(レ)Microsoft ActiveX Data Objects 2.7 Library
標準モジュールに以下のプロシージャを記述し実行すると、Excel シート上の
データを、Access のテーブル上に転記をすることができる。例として 演習30
「Msqry SQL」 kakcyo06.htm の (9) で、SQL 文 を用いて新規作成した空の
テーブル4 に、Excel からデータを送り込んでみる。結果は次のとおりである。
==> 
'-----------------------------------
Sub excel_access4()
Dim dbs As New ADODB.Connection 'ADOコネクション
Dim rcs As New ADODB.Recordset 'ADOレコードセット
Dim mydbF As String 'アクセス ファイル
Dim mydbT As String 'アクセス テーブル
Dim mtr As Variant 'エクセル 全データ
Dim rcd As Long 'アクセス 行指定
Dim fld As Long 'アクセス 列指定
'例として acctest2.mdb の テーブル4 に書き込む
mydbF = "acctest2.mdb" 'アクセス ファイル指定
mydbT = "テーブル4" 'アクセス テーブル指定
'アクセスデータベースを指定
dbs.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & _
"\" & mydbF & ";"
'アクセスデータベースを開く
rcs.Open Source:=mydbT, _
ActiveConnection:=dbs, _
CursorType:=adOpenKeyset, _
LockType:=adLockOptimistic, _
Options:=adCmdTableDirect
'エクセルシート全データ範囲(2次元配列)
With Worksheets("Sheet1").Range("A1").CurrentRegion
Let mtr = .Resize(.Rows.Count - 1).Offset(1, 0).Value
For rcd = LBound(mtr, 1) To UBound(mtr, 1) '1次行
rcs.AddNew 'LB:最小値(1) UB:最大値(5)
For fld = LBound(mtr, 2) To UBound(mtr, 2) '2次列
'アクセスに行列で書き込み
Let rcs.Fields(fld - 1).Value = mtr(rcd, fld)
Next
rcs.Update
Next
End With
rcs.Close
dbs.Close
Set rcs = Nothing
Set dbs = Nothing
End Sub
'-----------------------------------
ADO その2 へ移る. back top