【Access VBA】SQL Serverに直接接続する方法|ADOを使った高速データ処理

AccessとSQL Serverを連携させる方法として「リンクテーブル+CurrentDb.Execute」は手軽ですが、大量データ処理ではパフォーマンスが著しく低下するケースもあります。

この記事では、ADO(ActiveX Data Objects)を使って直接SQL Serverに接続し、
SQLを高速で実行する方法を解説します。


■ なぜリンクテーブルでは遅いのか?

リンクテーブルは便利ですが、裏ではAccessがSQL Serverとの間で逐次データのやり取りを行います。
そのため、以下のような処理で極端に遅くなることがあります:

  • 数千件以上のINSERT・UPDATE・DELETE
  • テーブルの再構築(DELETE+INSERTなど)
  • 複雑なJOINを含むクエリ

■ 直接接続のメリット

  • SQL ServerにSQLを直接送るため処理速度が段違いに高速
  • VBA側で接続やトランザクションを制御可能
  • リンクテーブル不要なので構成がシンプル

■ ADOを使った接続関数(再利用可能)

Function GetDBConnection() As ADODB.Connection
    On Error GoTo ErrHandler

    Dim serverName As String
    Dim dbName As String
    Dim userID As String
    Dim pass As String

    ' 接続情報を記入
    serverName = "サーバー名"
    dbName = "データベース名"
    userID = "ユーザー名"
    pass = "パスワード"

    ' グローバル変数 g_cnn を接続オブジェクトとして使用
    With g_cnn
        .Provider = "MSOLEDBSQL"
        .Properties("Data Source").Value = serverName
        .Properties("Initial Catalog").Value = dbName
        .Properties("User ID").Value = userID
        .Properties("Password").Value = pass
        .CommandTimeout = 0
        .ConnectionTimeout = 0
        .Open
    End With

    If Not g_cnn Is Nothing Then
        Debug.Print Now & " サーバー接続成功:" & serverName
    End If

    Set GetDBConnection = g_cnn
    Exit Function

ErrHandler:
    MsgBox "データベースへの接続に失敗しました。" & vbCrLf & "再度お試しください。", vbExclamation
    Set GetDBConnection = Nothing
End Function

▼ 補足

  • Debug.Print はイミディエイトウィンドウに出力されます
  • グローバル変数 g_cnn As ADODB.Connection を標準モジュールで宣言しておくと便利です

■ 接続解除関数

Sub CloseDBConnection(ByRef g_cnn As ADODB.Connection)
    On Error Resume Next

    If Not g_cnn Is Nothing Then
        If g_cnn.State <> adStateClosed Then
            g_cnn.Close
            Debug.Print Now & " 接続解除"
        End If
        Set g_cnn = Nothing
    End If

    On Error GoTo 0
End Sub

リソースリークを防ぐため、処理後は明示的に接続を解除しましょう。


■ 接続ドライバに関する注意点

ドライバ名 備考
MSOLEDBSQL 推奨(Microsoftの最新版)
SQLOLEDB 古いが一部互換性あり
SQLNCLI11 等 SQL Server Native Client

MSOLEDBSQL は、Microsoftがサポートしている最新のOLE DBドライバです。
可能な限りこちらを使用することを推奨します。
ドライバがインストールされていない場合、Microsoft公式サイトから入手できます。


■ よくあるエラーと対策

エラー内容 原因 対処法
接続に失敗 認証情報のミス ユーザー名・パスワードを再確認
プロバイダーが見つかりません MSOLEDBSQL未インストール ドライバをインストールする
接続がタイムアウトする ネットワークやファイアウォール DBAにポート開放を依頼

■ まとめ

Access VBAで大量のデータをSQL Serverに対して処理する場合、
ADO接続を使って直接SQLを実行するのがもっとも効率的です。

コードを関数化しておくことで再利用性が高くなり、他プロジェクトでも活用できます。


■ 関連リンク


■ 関連キーワード例

  • Access VBA SQL Server 直接接続
  • ADO Access SQL Server 接続方法
  • Access VBA ADODB.Connection
  • SQL Server 接続 エラー Access
  • MSOLEDBSQL Access 接続文字列