演習34 「ADO」 の解説 その1


Excel から外部データベースにアクセスするオブジェクトには、演習31以降で
述べた DAO と、この演習34以降で述べる ADO がある。

ADOActiveX Data Objects の略、DAOData Access Objects の略
である。 DAOAccess に特化したオブジェクトであるが、ADOAccess
の他に、SQLServerOracle 等のデータベースにも対応できる より一般的
なオブジェクトである。

ADO を使用するために、最初に Excel VBA の VBエディタ において次の設定
を行う。 VBE - ツール - 参照設定 -
      (レ)Microsoft ActiveX Data Objects 2.7 Library

標準モジュールに以下のプロシージャを記述し実行すると、Excel シート上の
データを、Access のテーブル上に転記をすることができる。例として 演習30
「Msqry SQLkakcyo06.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