前回作成したサンプルでADODBを利用したバージョンです。
こちらのほうが、Access特有のクエリ的概念も少なく、SQL実行用メソッドExecuteで統一できるためメンテナンス効率を考えると、個人的におすすめです。
想定環境・前提条件
- Microsoft Access (各バージョン)
- VBAエディタからMicrosoft ActiveX Data Objects (ADO) ライブラリが利用可能な状態
ACCESSでSQLを使うサンプル (ADODB)
Public Sub ACCESSでSQLを使うサンプルByADODB()
Debug.Print Application.CurrentProject.FullName
Debug.Print Application.CurrentProject.ProjectType
Debug.Print Application.CurrentProject.Connection.Provider
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Set Cn = CurrentProject.Connection '自分自身を設定
On Error GoTo trans_Err
' データ定義言語(DDL)文関係は、Executeを使う
Cn.BeginTrans
Cn.Execute "CREATE TABLE テスト(番号 INT, 名前 CHAR(10),誕生日 DATE);"
Cn.Execute "INSERT INTO テスト(番号,名前,誕生日) VALUES (1,'山田太郎',#2016/1/21#);"
Cn.Execute "INSERT INTO テスト(番号,名前,誕生日) VALUES (2,'山田花子',#2016/2/21#);"
Cn.Execute "INSERT INTO テスト(番号,名前,誕生日) VALUES (2,'山田チーズ',#2016/3/21#);"
Cn.Execute "UPDATE テスト SET 名前= '山田太郎次郎' WHERE 番号 = 1;"
Cn.Execute "DELETE FROM テスト WHERE 番号 = 2;"
' DAOと違いSQL データ操作言語(DML)文のSELECTでも Executeが使える
Set Rs = Cn.Execute("SELECT * FROM テスト;")
Do Until Rs.EOF
Debug.Print Rs(0)
Debug.Print Rs(1)
Debug.Print Rs(2)
Rs.MoveNext
Loop
Rs.Close
' Cn.Execute "DROP TABLE テスト;" 'おまけ
' Commit the transaction
Cn.CommitTrans
trans_Exit:
' Clean up
Set Cn = Nothing
Exit Sub
trans_Err:
' Roll back the transaction
Debug.Print Cn.Errors(0).Description
' Cn.Rollback
Resume trans_Exit
End Sub
前回(DAO)と今回(ADO)のサンプルを作成するにあたりAccessサンプルコードをインターネット検索していましたが、テーブルアクセス方法にADOとDAOが混在しており、それぞれにくせがあってAccessのとっつきにくさを感じる要因になっています。
そうであっても、いろいろな事情でAccessを使わざるを得ない職場もあるわけで、自分なりのコーディングポリシーを持ってキモを押さえておかないと、有益なサンプルを見つけても活用できません。
とりあえず今の自分のコーディングポリシーとしてはADO+SQLがよさそうだと感じました。加えてDAOの理解も深めていこうと思います。
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月12日
- 変更blockquoteタグによるコード表示を修正し、通常の段落やコードブロックとして正しく読めるように体裁を整えました。
- 追加ADODB.Recordset型を使用するための変数「Dim Rs As ADODB.Recordset」の宣言を追加しました。

