
AccessからSQL ServerへSQLを発行する場合、方法は主に2つあります。
この記事では、それぞれの方法の特徴・書き方・メリット・デメリットを丁寧に解説します。
■ 方法①:リンクテーブル経由(CurrentDb.Execute を使用)
▼ 概要
AccessにリンクテーブルとしてSQL Serverのテーブルを登録しておけば、あたかもローカルのテーブルのようにSQL文を実行することができます。
- リンクは「外部データ」から設定可能
- データベースの接続管理はAccessに任せられる
- 接続文字列をコードに書かなくて済む
▼ サンプルコード
Dim sql As String
sql = "INSERT INTO AAA (列名1, 列名2) SELECT 列1, 列2 FROM BBB WHERE 条件"
CurrentDb.Execute sql
ここで AAA
テーブルは、事前にリンクされている SQL Server 上のテーブルを指します。
▼ メリット
- 記述が簡単
- Accessのインターフェースから直接操作できる
- クエリやフォームでも使える
▼ デメリット
- リンク作業が必要(初期設定が手間)
- 接続情報がAccessに保存されるためセキュリティ上の注意が必要
■ 方法②:ADO経由(ActiveX Data Objects)
▼ 概要
Access VBAから直接SQL Serverに接続し、SQL文を実行する方法です。
リンクテーブルは不要で、すべてコードベースで管理できます。
- 「接続文字列」を使ってVBAから接続
- 複数のサーバーやデータベースを動的に切り替え可能
- 外部ファイルとの連携や定期実行スクリプトに最適
▼ サンプルコード
Dim conn As Object
Dim sql As String
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=SQLOLEDB;Data Source=サーバー名;Initial Catalog=DB名;User ID=ユーザー名;Password=パスワード;"
sql = "INSERT INTO AAA (列名1, 列名2) SELECT 列1, 列2 FROM BBB WHERE 条件"
conn.Execute sql
conn.Close
Set conn = Nothing
複数回使う場合は、接続処理を標準モジュールで関数化すると便利です。
▼ メリット
- リンク不要(柔軟性が高い)
- セキュアな接続管理(接続文字列の暗号化も可能)
- 他システム連携やバッチ処理に向いている
▼ デメリット
- 接続文字列や接続管理を自前で行う必要がある
- 初心者にはややハードルが高い
■ どちらを使うべきか?
比較項目 | リンクテーブル経由 | ADO経由 |
---|---|---|
手軽さ | ◎ | △(接続が必要) |
柔軟性 | △ | ◎ |
セキュリティ管理 | △(Access任せ) | ◎(自前で制御可能) |
外部連携 | △ | ◎ |
ちょっとしたデータ操作やクエリ実行ならリンクテーブルで十分ですが、
スクリプト制御やバッチ処理を行いたい場合はADOの方が断然おすすめです。
■ まとめ
Access VBAからSQL ServerにSQLを直接投げるには、「リンクテーブル」または「ADO経由」の2パターンが存在します。
用途や目的に応じて使い分けることで、安全かつ効率的なデータ操作が可能になります。
■ 関連リンク
■ 関連キーワード
- Access VBA SQL Server 接続方法
- VBA ADO SQL Server 実行
- Access SQL Server INSERT 実行方法
- Access CurrentDb.Execute ADO 違い
- VBA SQL Server ADO接続 サンプル