【Access VBA】SQL Serverに直接SQLを実行する方法|リンクテーブル vs ADOの違いと使い分け

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接続 サンプル