AccessのODBC接続とリンクテーブル|ドライバ選定と接続の実務
AccessからSQL Serverへのリンクテーブル接続は、新規構成ではMicrosoft ODBC Driver 18 for SQL Serverが推奨です。32bit/64bitのビット数一致、DSN設定の手順、ドライバ18の暗号化デフォルト変更、パススルークエリの使いどころを解説します。
結論:AccessからSQL ServerへのODBC接続で選ぶべきドライバはMicrosoft ODBC Driver 18 for SQL Server
AccessとSQL Serverをリンクテーブルでつなぐとき、最初に決める必要があるのがODBCドライバです。Windowsには複数のODBCドライバが入っており、どれを選ぶかで接続の安定性や暗号化の挙動が変わります。
結論を先に書くと、2025年11月時点で新規に構成する場合はMicrosoft ODBC Driver 18 for SQL Serverが標準です。Microsoftは新規アプリケーション向けにDriver 18を推奨しており、learn.microsoft.comのダウンロードページから無償で入手できます。Driver 17も継続提供されており、既存構成との互換性維持などで選ぶ場面はあります。古い「SQL Server」ドライバ(Windowsに同梱の旧来版)や、SQL Server Native Clientは新規構成での使用は避けてください。
この記事では、ドライバ選定の根拠、DSN設定の手順、リンクテーブルを張るまでの流れ、ビット数一致の注意点、パススルークエリの使いどころを説明します。SQL Server移行全体の設計思想はAccessの画面はそのまま、データだけSQL Serverへ移す構成に、移行ツール(SSMA)の手順はAccess移行ツールSSMAにそれぞれ委ねます。
ODBCドライバの選定
AccessからSQL Serverへ接続する際に使えるODBCドライバは複数あります。どれを使うかを選ぶ前に、各ドライバの位置づけを整理しておきます。
| ドライバ名 | 位置づけ | 2025年11月時点の推奨 |
|---|---|---|
| Microsoft ODBC Driver 18 for SQL Server | Microsoftが現行推奨する最新ドライバ。暗号化デフォルトがYesに変更済み | 新規構成に推奨 |
| Microsoft ODBC Driver 17 for SQL Server | ドライバ18と並行して提供されている現行版。暗号化デフォルトはNo | 既存環境の継続使用は可。新規はDriver 18を原則とし、互換性が必要な場合に選択 |
| SQL Server(Windowsに同梱の旧来ドライバ) | Windows OSに含まれる古いドライバ。新機能非対応 | 新規構成では使わない |
| SQL Server Native Client 11.0 | SQL Server 2012世代のドライバ。現在は非推奨 | 新規構成では使わない |
ドライバ17と18の間で実務上よく問題になるのが、暗号化の既定値の違いです。ドライバ18では接続の暗号化(Encrypt)の既定値が「Yes」に変わっています(Microsoft Learn — Features of the Microsoft ODBC Driver on Windows)。これは、ドライバ17では暗号化がデフォルトで無効だった点との差です。ドライバ18でローカルのSQL Server Expressに接続するとき、サーバー側に有効な証明書がなければ接続エラーになるケースがあります。その場合、DSN設定の「暗号化」を「オプション(Encrypt=Optional)」にするか、「Trust Server Certificate」をオンにする対処が必要です。
ドライバ17と18は同一PC上に共存できます(Microsoftのダウンロードページに "can be installed side by side" と明記されています)。既存の17で動いているシステムに影響を与えずに、テスト環境でドライバ18を試すことができます。
ビット数の一致(32bit/64bit)
AccessはOffice 2016以降、32bit版と64bit版の両方が提供されています。Microsoft 365では64bit版が既定でインストールされます(Microsoft Support — 64 ビット版または 32 ビット版の Office を選択する)。
ODBCドライバには32bit版と64bit版があります。AccessとODBCドライバのビット数を一致させる必要があります。32bit Accessには32bitドライバ、64bit Accessには64bitドライバを使います。ODBCデータソースアドミニストレーター(ODBC Data Source Administrator)も同じビット数のものを使ってDSNを設定してください。
Windows上のODBCデータソースアドミニストレーターは2種類あります。32bit Access用のDSNは32bit版(C:\Windows\SysWOW64\odbcad32.exe)で設定します。64bit Access用のDSNは64bit版(C:\Windows\System32\odbcad32.exe)で設定します。システムDSNはビット数別に管理されており、Accessのビット数と一致しないドライバのDSNは参照できません(Microsoft Learn — ODBC tool displays 32-bit and 64-bit user DSNs)。ビット数が混在した環境でAccessが「DSNが見つからない」エラーを出す場合は、まずODBCアドミニストレーターのビット数を確認してください。
ODBC Driver 18のWindows用インストーラー(x64版)は、64bitドライバと32bitドライバの両方をインストールします(ダウンロードページに "The x64 and arm64 installers install both 64-bit and 32-bit drivers" と明記)。x64 Windowsであれば、x64用インストーラー1本で両ビット版が入ります。32bit版Windowsの場合はx86インストーラーが必要です。
DSN設定の手順
DSN(Data Source Name、データソース名)は、接続先サーバー名・データベース名・認証方式などをまとめて登録した設定です。AccessからSQL Serverへリンクテーブルを張る際に、このDSNを選択して接続します。
設定の流れは次のとおりです。
- Accessのビット数に対応したODBCデータソースアドミニストレーターを起動する(32bit Accessの場合は
C:\Windows\SysWOW64\odbcad32.exe、64bit Accessの場合はC:\Windows\System32\odbcad32.exe) - 「システムDSN」タブを選び、「追加」をクリックする
- ドライバ一覧から「ODBC Driver 18 for SQL Server」(または17)を選択する
- ウィザードでデータソース名(任意の名称)、接続先サーバー名またはIPアドレス、認証方式(Windows認証またはSQL Server認証)、既定のデータベースを入力する
- 「接続のテスト」でSQL Serverへ接続できることを確認する
Accessからリンクテーブルを作成するには、「外部データ」タブから「新しいデータソース」→「データベースから」→「SQL Serverから」を選び、設定済みのDSNを選択するか、ウィザード中に新規でDSNを作成します。その後、リンクするテーブルまたはビューを選択するダイアログが表示されます(Microsoft Support — Import or link to data in an SQL Server database)。
複数のPCで同じAccessシステムを使う場合、各PCに同じDSNを設定するか、VBAで接続文字列を動的に生成してリンクテーブルを更新する方式を取ります。どちらが適切かは利用台数と運用の手間で判断します。DSNの管理方針についてはアップサイジングの構成解説も参考にしてください。
DSNなし接続文字列(DSNレス接続)
Accessのリンクテーブルは、DSNを使わず接続文字列を直接埋め込む方法でも機能します。この方式を「DSNレス接続」と呼びます。
DSNレス接続の接続文字列の例は次のとおりです(ODBC Driver 17の場合)。
ODBC;Driver={ODBC Driver 17 for SQL Server};Server=サーバー名;Database=データベース名;Trusted_Connection=Yes;DSNレスにするとDSNを各PCに設定する手間が不要になりますが、接続文字列はリンクテーブルの定義に埋め込まれるため、VBAで書き換えない限り後から変更しにくくなります。SQL Server認証を使い「パスワードを保存」を選択した場合や、接続文字列に PWD= を明示的に埋め込んだ場合、パスワードが暗号化されずにAccess データベースへ保存されるため取り扱いに注意が必要です(Microsoft Support — Import or link to data in an SQL Server database)。
リンクテーブルの接続文字列は、VBAで TableDef.Connect プロパティを参照すると確認できます。イミディエイトウィンドウに ?CurrentDb.TableDefs("テーブル名").Connect と入力することで現在の接続文字列が表示されます。
リンクテーブルマネージャーでのODBC接続の管理
Accessの「外部データ」タブにある「リンクテーブルマネージャー」は、データベース内のリンクテーブルを一覧・更新する画面です(Microsoft Support — Manage linked tables)。SQL ServerへのODBCリンクテーブルもここから管理できます。
サーバーのIPアドレスが変わった、SQL Serverのインスタンス名が変わった、データベース名が変わった、といった場合はリンクテーブルマネージャーで接続情報を更新します。
注意が必要なのは、DSNを使っているリンクテーブルと、DSNレス接続のリンクテーブルでは、更新時の操作が少し異なる点です。DSNを使っている場合はDSN自体をODBCデータソースアドミニストレーターで修正し、変更後はリンクの更新またはAccessの再起動を行って接続を確認してください。DSNレスの場合は、Microsoft 365版の新しいリンクテーブルマネージャーで接続文字列の編集や再リンクが可能な場合があります。一括更新や起動時の自動切替が必要な場合はVBAでTableDefsの接続文字列を書き換えてRefreshLinkを呼ぶ方法が使えます。
なお、リンクテーブルマネージャーを使う際はAccessを閉じて開き直すことで接続情報が再読み込みされる場合があります。変更後は必ずリンクテーブルを開いてデータが取得できることを確認してください。
パススルークエリの使いどころ
通常のリンクテーブルに対するAccessクエリは、主にAccessのACEエンジンが処理します。クエリの内容によっては処理の一部がSQL Serverへ委譲されますが、常にSQL Server側で完結するわけではありません。大量行の取得やサーバー側の複雑な処理では、ACEエンジンがローカルで処理する分だけ遅くなるケースがあります。
パススルークエリを使うと、AccessはSQL文をそのままSQL Serverに送ります。Accessのクエリデザイングリッドは非表示になり、Transact-SQLで直接記述します(Microsoft Support — Create a pass-through query)。
パススルークエリが有効な場面は次のような状況です。
- SQL Server側のストアドプロシージャを呼びたい場合
- 大量データの集計・絞り込みをSQL Server側だけで完結させてパフォーマンスを改善したい場合(ただしパススルークエリからAccessのローカルテーブルは直接参照できない)
- Transact-SQL固有の構文(ROW_NUMBER()、PIVOT等)を使いたい場合
パススルークエリの作成手順は、クエリデザイン画面で「クエリの種類」から「パススルー」を選び、プロパティシートでODBC接続文字列を設定します。戻り値のないアクションクエリ(UPDATE、INSERT等)は「レコードセットを返す」プロパティをオフにします。
パススルークエリはSQL Server側に処理を寄せる分だけ速くなる可能性がありますが、Accessのパラメータクエリとしてフォームから呼び出す場合はVBAを通じてパラメータを渡す実装が必要で、保守コストは上がります。用途に応じた判断が必要です。
現状のAccessをSQL Server移行に向けて整理したい場合は、無料の解析可否チェックでファイルの概況を確認できます(ファイル送信は不要です)。
よくある質問
Q. ODBCドライバをインストールしたのにAccess上のドライバ一覧に出ません。なぜですか。
AccessとODBCドライバのビット数が一致していない可能性があります。32bit Accessは32bit版ドライバしか参照できず、64bit Accessは64bit版ドライバしか参照できません。x64用インストーラー(ODBC Driver 18/17)はx64とx86の両方をインストールするため、通常は片方だけ入っているという状況にはなりませんが、確認したい場合はAccessのビット数に合ったODBCデータソースアドミニストレーター(32bitはSysWOW64版、64bitはSystem32版)を起動してドライバタブで確認してください。
Q. ODBC Driver 18に切り替えたら接続できなくなりました。
ドライバ18は暗号化(Encrypt)の既定値が「Yes」になっています。これにより、クライアントが信頼するCAによる証明書がサーバー側に構成されていない場合(自己署名証明書が信頼ストアに登録されていない、または証明書のホスト名が接続先名と一致しないなど)、証明書検証エラーになることがあります。DSN設定ウィザードの暗号化を「オプション(Optional)」にするか、「Trust Server Certificate」をオンにする対処を試してください。本番環境では接続の暗号化を正しく設定した上で運用することを推奨します。
Q. Accessのフォームをそのままリンクテーブルに切り替えた後、日付の絞り込みが動かなくなりました。
AccessとSQL Serverでは日付型の扱いに差があります。原因として考えられるのは、パラメーター型の推論の違い、日付範囲の境界、時刻部分の有無、地域依存書式などが挙げられます。パススルークエリに書き換えてTransact-SQLで日付型を明示的にキャスト(CONVERT/CAST等)するか、パラメーターを型付きで渡す形式に変更することで解決できる場合があります。
Q. SQL Server Expressに接続する場合、ドライバの選択に違いはありますか。
ドライバの選択に違いはありません。SQL Server ExpressもSQL Server Standard/Enterpriseも、接続に使うODBCドライバは同じです。ただし、インスタンス名の指定がSQL Server Expressでは必要になることがあります。既定のインスタンス名は「SQLEXPRESS」で、サーバー名の指定は「コンピュータ名\SQLEXPRESS」の形式になります。SQL Server Expressの容量制限(1データベースあたり10GB上限)などのエディション仕様については無料のSQL Server ExpressにAccessのデータを移す手順と制限を参照してください。
触れないAccessが「診断できるか」だけ、確かめませんか。
顧客データは送信不要。発注の義務もありません。
約2分・ファイル送信不要・発注義務なし/説明はオンライン・売り込みはしません