食事時のアルファベット スープが楽しみだった平和な幼年時代を思い出しましょう。 その幸せな記憶を心の片隅に留めつつ、データベース版のアルファベット スープをご試食ください。 以下のセクションは、接続文字列を扱うデータベースの入門となっています。また、Access VBA コードでデータベース プログラミング インターフェイスを使用する基礎についても詳しく説明します。
この記事の内容
ODBC ドライバーまたは OLE DB プロバイダーを使用する
ODBC ドライバーまたは OLE DB プロバイダーを使用する
接続文字列は長い間、使用されています。 Access ユーザー インターフェイスまたは VBA コードのいずれかで、書式設定された接続文字列を定義できます。 接続文字列 (ODBC または OLE DB) により、サーバーの場所、データベース名、セキュリティの種類、その他の便利なオプションなどの情報がデータベースに直接渡されます。 次に例を示します。
ODBC;DRIVER=SQL Server;SERVER="MyServer";DATABASE="MyHRdb";TRUSTED_CONNECTION=Yes
Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=MyHRdb; Integrated Security=SSPI;
最初に登場したのが SQL Server Native Client (SNAC) というスタンドアロン ライブラリでした。これには ODBC テクノロジと OLEDB テクノロジが含まれていました。SQL Server の 2005 から 2012 までのバージョンで現在でもご利用いただけます。 数多くの旧式のアプリケーションで SNAC が使用されていました。SNAC は現在でも下位互換性のためにサポートされていますが、新しいアプリケーション開発で使用することは推奨されていません。 それより後に公開された、ダウンロード可能な各種バージョンの ODBC ドライバーをご使用ください。
ODBC ドライバー
ODBC (Open Database Connectivity) は、Access データベースを Microsoft SQL Server などの外部データ ソースに接続する目的で使用するプロトコルです。 通常は、ファイル データ ソース (DSN ファイルとも呼ばれています) を使用して接続文字列を追加します。その場合、FILEDSN キーワードが接続文字列で使用されるか、レジストリに保存されます。レジストリに保存される場合、DSN キーワードが使用されます。 また、VBA を使用し、"DSN なし" の接続文字列でこれらのプロパティを設定することもできます。
ODBC ドライバーは数年にわたり、3 つのフェーズで出荷されてきました。
-
2005 年より前は、ODBC ドライバーは Windows Data Access Components (WDAC) に付属していました。これはもともと、Microsoft Data Access Components (MDAC) と呼ばれていました。 これらのコンポーネントは現在でも、下位互換性のために Windows に付属しています。 詳細については、「Microsoft または Windows Data Access Components」を参照してください。
-
ODBC ドライバーは、SQL Server 2005 から SQL Server 2012 までの SNAC に付属していました。
-
SQL Server 2012 より後になると、ODBC ドライバーは個別に出荷されるようになり、新しい SQL Server 機能のサポートが含まれています。
新しく開発する場合、最初の 2 フェーズの ODBC ドライバーを使用せず、第 3 フェーズの ODBC ドライバーを使用してください。
OLE DB プロバイダー
OLE DB (Object Linking and Embedding, Database) は、Access データベースを Microsoft SQL Server などの外部データ ソースに接続する目的で使用する最新のプロトコルです。 OLE DB には DSN が必要ありませんが、ODBC データ ソースや ODBC ドライバーに対する完全なアクセスを提供します。
ヒント 通常は、[データ リンク プロパティ] ダイアログ ボックスを使用し、OLE DB 接続文字列を追加します。 Access から [データ リンク プロパティ] ダイアログ ボックスを開く方法はありませんが、エクスプローラーで、空の .txt ファイルを作成し、ファイルの種類を .udl に変更し、そのファイルをダブルクリックするという方法があります。 接続文字列を作成したら、ファイルの種類を .txt に戻します。
OLE DB プロバイダーは数年にわたり、3 つのフェーズで出荷されてきました。
-
2005 年より前は、OLE DB プロバイダーは Windows Data Access Components (WDAC) に付属していました。これはもともと、Microsoft Data Access Components (MDAC) と呼ばれていました。
-
OLE DB プロバイダーは、SQL Server 2005 から SQL Server 2017 までに付属していました。 2011 年に非推奨となりました。
-
2017 年、SQL Server OLE DB プロバイダーの非推奨が解除されました。
新しいソリューション開発のために現在推奨されているバージョンは、OLE DB Driver 18 for SQL Server です。
ODBC 接続文字列でパフォーマンスを最適化する方法
パフォーマンスを最適化し、ネットワーク トラフィックを最小限に抑え、SQL Server データベースに対するマルチユーザー アクセスを削減するには、複数のレコード セットで接続文字列を共有して、使用する接続文字列を可能な限り少なくします。 Ace では単純にサーバーに接続文字列が渡されるだけですが、次のキーワードが理解され、使用されます。クライアント/サーバーの通信を最小限にすることができる DSN、DATABASE、UID、PWD、DRIVER。
注 外部データ ソースへの ODBC 接続が失われると、Access では自動的に再接続が試行されます。 再試行に成功すると、作業を続行できます。 再試行に失敗しても、接続に依存しないオブジェクトは引き続き使用できます。 再接続するには、Access を閉じ、もう一度開きます。
ODBC と OLE DB の両方を使用する場合の推奨事項
接続文字列のテクノロジとデータベース アクセスのテクノロジを混在させないでください。 DAO には ODBC 接続文字列を使用します。 ADO には OLE DB 接続文字列を使用します。 DAO と ADO の両方が使用される VBA コードがアプリケーションに含まれている場合、DAO には ODBC ドライバーを、ADO には OLE DB プロバイダーを使用します。 ODBC と OLEDB の両方にそれぞれ、最新の機能とサポートを取得するように努力します。
ODBC では "ドライバー" という用語が使用され、OLE DB では "プロバイダー" という用語が使用されます。 これらの用語は同じ種類のソフトウェア コンポーネントを表しますが、接続文字列の構文で入れ替えることはできません。 文書どおりの正しい値を使用してください。
Access から SQL Server へのプログラムによるインターフェイス
Access から SQL Server にプログラムでインターフェイス接続するとき、主に 2 つの方法があります。
DAO
データ アクセス オブジェクト (DAO) からは、データベースへの抽象的インターフェイスが与えられます。 Microsoft Data Access Objects (DAO) はネイティブ プログラミング オブジェクト モデルであり、Access と SQL Server を活用し、オブジェクト、テーブル、フィールド、インデックス、リレーション、クエリ、プロパティ、外部データベースを作成、削除、変更、一覧表示することができます。
詳細については、「Microsoft Data Access Objects リファレンス」を参照してください。
ADO
ActiveX データ オブジェクト (ADO) からは、ハイレベルのプログラミング モデルが与えられます。サード パーティ ライブラリを参照することにより Access で利用できます。 ADO は学習が簡単で、クライアント アプリケーションによって、Access や SQL Server など、さまざまなソースのデータにアクセスしたり、操作したりすることができます。 その主な長所には、使いやすさ、高速であること、メモリ オーバーヘッドが低いこと、ディスク フットプリントが少ないことがあります。 ADO では、Web ベースのアプリケーションを構築するための主な機能もサポートされています。
詳細については、「Microsoft ActiveX データ オブジェクト リファレンス」と「Microsoft ActiveX データ オブジェクト (ADO)」を参照してください。
どちらを使うべきでしょうか。
VBA コードを使用する Access ソリューションの場合、DAO、ADO、または両方をデータベース インターフェイスのテクノロジとして使用できます。 DAO は引き続き、Access において既定で使用されます。 たとえば、すべてのフォーム、レポート、および Access クエリで DAO が使用されます。 ただし、SQL Server に移行する場合、ADO を使用してソリューションの効率を高めることを検討してください。 DAO または ADO のいずれを使用すべきかを判断するための一般的なガイドラインを次に示します。
次の場合は、DAO を使用します:
-
VBA を使用せず、バインドされた読み取り/書き込みフォームを作成する。
-
ローカルテーブルでクエリを実行する。
-
一時的なテーブルにデータをダウンロードする。
-
読み取り専用モードでレポートまたはフォームのデータ ソースとしてパススルー クエリを使用する。
-
VBA で TableDef または Querydef オブジェクトを定義して使用する。
次の場合は、ADO を使用します:
-
非同期操作の実行など、他の最適化方法を活用する。
-
DDL および DML パススルー クエリを実行する。
-
VBA のレコードセットを使用し、SQL Server のデータに直接アクセスする。
-
BLOB のストリーミングなど、特定のタスクの簡単なコードを記述する。
-
VBA でコマンド オブジェクトを使用し、パラメーターを指定してストアド プロシージャを直接呼び出す。
ODBC ドライバー バージョンの概要
次の表は、ODBC ドライバーのバージョン、ダウンロードの場所、機能サポートについて重要な情報をまとめたものです。 Office ではなく、Windows に基づき、正しいビット版のドライバー (64 ビットまたは 32 ビット) を使用していることを確認してください。 64 ビット版 Windows で 32 ビット版 Access を実行している場合、64 ビット版のドライバーをインストールします。これには Access に必要な 32 ビット コンポーネントが含まれています。
詳細については、「Using Connection String Keywords with SQL Server Native Client」 (SQL Server ネイティブ クライアントで接続文字列キーワードを使用する)、「Release Notes for ODBC to SQL Server on Windows (V17)」 (Windows 上の SQL Server のための ODBC に関するリリース ノート (V17))、「Features of the Microsoft ODBC Driver for SQL Server on Windows (V13, 11)」 (Windows 上の SQL Server のための Microsoft ODBC ドライバーの機能 (V13、11)) を参照してください。
ODBC ドライバー |
バージョン |
ダウンロード |
新機能 |
ODBC ドライバー 17.0 - 17.3 |
SQL Server 2017 |
ODBC ドライバー 17.3 ODBC ドライバーで Azure Active Directory を使用する ODBC ドライバー 17.2 "常に暗号化" と SQL Server 向け ODBC ドライバーの使用 UTF-8 サーバー エンコーディングの照合およびユニコード サポート ODBC ドライバー 17.1 "常に暗号化" と SQL Server 向け ODBC ドライバーの使用 ODBC ドライバー 17.0 UseFMTONLY 一時的なテーブルを必要とする特殊なケースで旧メタデータを使用する場合。 「Release Notes for ODBC to SQL Server on Windows」 (Windows 上の SQL Server のための ODBC に関するリリース ノート) を参照してください |
|
ODBC ドライバー 13.1 |
SQL Server 2016 SP1、SQL Azure |
||
ODBC ドライバー 13.0 |
SQL Server 2016 |
国際化ドメイン名 (IDN) |
|
ODBC ドライバー 11.0 |
SQL Server 2005 - 2012 |
OLE DB プロバイダー バージョンの概要
次の表は、OLE DB プロバイダーのバージョン、ダウンロードの場所、機能サポートに関する重要な情報をまとめたものです。 Office ではなく、Windows に基づき、正しいビット版のドライバー (64 ビットまたは 32 ビット) を使用していることを確認してください。 64 ビット版 Windows で 32 ビット版 Access を実行している場合、64 ビット版のドライバーをインストールします。これには Access に必要な 32 ビット コンポーネントが含まれています。
詳細については、「SQL Server Native Client で接続文字列キーワードを使用する」を参照してください。
OLE DB プロバイダー |
バージョン |
ダウンロード |
新機能 |
OLE DB ドライバー 18.2.1 (MSOLEDBSQL) |
SQL Server 2017 |
OLE DB Driver for SQL Server Feature」 (SQL Server 向け OLE DB ドライバーの機能) と「Release notes for the Microsoft OLE DB Driver, for SQL Server」 (SQL Server 向け Microsoft OLE DB ドライバーのリリース ノート) を参照してください。 |
|
SQL Server Native Client (SQLNCLI) |
SQL Server 2005 - 2012 |
非推奨、使用しないでください |
|
OLE DB ドライバー (SQLOLEDB) |
非推奨、使用しないでください |
ODBC キーワードの概要
次の表は、SQL Server で認識される ODBC キーワードとその目的をまとめたものです。 サブセットのみが Access により認識されます。
キーワード |
説明 |
Addr |
SQL Server のインスタンスを実行しているサーバーのネットワーク アドレス。 |
AnsiNPW |
NULL 比較を処理するための ANSI 定義動作、文字データ パディング、警告、NULL 連結の使用方法を指定します (Yes または No)。 |
APP |
SQLDriverConnect を呼び出すアプリケーションの名前。 |
ApplicationIntent |
サーバーに接続するときに、アプリケーションのワークロードの種類を宣言します (ReadOnly または ReadWrite)。 |
AttachDBFileName |
アタッチ可能データベースのプライマリ ファイルの名前。 |
AutoTranslate |
クライアントまたはサーバー間で ANSI 文字列を送信するかどうか、またはユニコードに変換するかどうかを指定します (Yes または No)。 |
Database |
データベース名。 Description 接続の目的。 Driver SQLDrivers により返されるドライバーの名前。 |
DSN |
既存の ODBC ユーザーまたはシステム データ ソースの名前。 Encrypt ネットワーク経由で送信する前にデータを暗号化するかどうかを指定します (Yes または No)。 |
Failover_Partner |
プライマリ サーバーに接続できない場合に使用されるフェールオーバー パートナー サーバーの名前。 |
FailoverPartnerSPN |
フェールオーバー パートナーの SPN。 |
Fallback |
非推奨のキーワード。 |
FileDSN |
既存の ODBC ファイル データ ソースの名前。 Language SQL Server 言語。 |
MARS_Connection |
SQL Server 2005 (9.x) 以降の接続に MARS (Multiple Active Result Sets/複数のアクティブ結果セット) を指定します (Yes または No)。 |
MultiSubnetFailover |
SQL Server 可用性グループまたは Failover Cluster Instance の可用性グループ リスナーに接続するかどうかを指定します (Yes または No)。 |
Net |
dbnmpntw は名前付きパイプを示し、dbmssocn は TCP/IP を示します。 |
PWD |
SQL Server ログイン パスワード。 |
QueryLog_On |
長時間実行されるクエリのログ記録を指定します (Yes または No)。 |
QueryLogFile |
長時間実行されるクエリに関するデータをログに記録するためのファイルの完全パスとファイル名。 |
QueryLogTime |
長時間実行されるクエリをログに記録するときのしきい値 (ミリ秒単位) を指定する数字文字列。 |
QuotedId |
SQL ステートメントにおける引用符の使用について、SQL Server で ISO ルールを使用するかどうかを指定します (Yes または No)。 |
Regional |
通貨、日付、時刻データを文字データに変換するとき、SQL Server Native Client ODBC ドライバーでクライアント設定を使用するかどうかを指定します (Yes または No)。 |
SaveFile |
接続に成功した場合、現在の接続の属性が保存される ODBC データ ソース ファイルの名前。 |
Server |
SQL Server インスタンスの名前:ネットワーク上のサーバー、IP アドレス、構成マネージャーのエイリアス。 |
ServerSPN |
サーバーの SPN。 |
StatsLog_On |
SQL Server Native Client ODBC ドライバーのパフォーマンス データのキャプチャを有効にします。 |
StatsLogFile |
SQL Server Native Client ODBC ドライバーのパフォーマンス統計を記録するためのファイルの完全パスとファイル名。 |
Trusted_Connection |
Windows Authentication Mode か SQL Server のユーザー名またはパスワードをログイン検証に使用するかどうかを指定します (Yes または No)。 |
TrustServerCertificate |
暗号化と共に使用するとき、自己署名のサーバー証明書による暗号化を有効にします。 |
UID |
SQL Server ログイン名。 |
UseProcForPrepare |
非推奨のキーワード。 |
WSID |
ワークステーション ID、すなわち、アプリケーションが置かれているコンピューターのネットワーク名。 |
OLE DB キーワードの概要
次の表は、SQL Server で認識される OLE DB キーワードとその目的をまとめたものです。 サブセットのみが Access により認識されます。
キーワード |
説明 |
Addr |
SQL Server のインスタンスを実行しているサーバーのネットワーク アドレス。 |
APP |
アプリケーションを識別する文字列。 |
ApplicationIntent |
サーバーに接続するときに、アプリケーションのワークロードの種類を宣言します (ReadOnly または ReadWrite)。 |
AttachDBFileName |
アタッチ可能データベースのプライマリ ファイルの名前。 |
AutoTranslate |
OEM/ANSI 文字変換を構成します (True または False)。 |
Connect Timeout |
データ ソース初期化が完了するまでの待機時間 (秒単位)。 |
Current Language |
SQL Server の言語名。 |
Data Source |
組織の SQL Server のインスタンス名。 |
Database |
データベース名。 |
DataTypeCompatibility |
使用されるデータ型処理のモードを示す数字。 |
Encrypt |
ネットワーク経由で送信する前にデータを暗号化するかどうかを指定します (Yes または No)。 |
FailoverPartner |
データベース ミラーリングに使用されるフェールオーバー サーバーの名前。 |
FailoverPartnerSPN |
フェールオーバー パートナーの SPN。 |
Initial Catalog |
データベース名。 |
Initial File Name |
アタッチ可能データベースのプライマリ ファイルの名前 (完全パス名を含む)。 |
Integrated Security |
Windows 認証に使用されます (SSPI)。 |
Language |
SQL Server 言語。 |
MarsConn |
SQL Server 2005 (9.x) 以降の接続に MARS (Multiple Active Result Sets/複数のアクティブ結果セット) を指定します (Yes または No)。 |
Net |
組織の SQL Server インスタンスへの接続を確立するために使用されるネットワーク ライブラリ。 |
Network Address |
組織の SQL Server インスタンスのネットワーク アドレス。 |
PacketSize |
ネットワーク パケット サイズ。 既定値は 4096 です。 |
Persist Security Info |
Persist Security が有効かどうかを指定します (True または False)。 |
PersistSensitive |
Persist Sensitive が有効かどうかを指定します (True または False)。 |
Provider |
SQL Server Native Client の場合、これは SQLNCLI11 になります。 |
PWD |
SQL Server ログイン パスワード。 |
Server |
SQL Server インスタンスの名前:ネットワーク上のサーバー、IP アドレス、構成マネージャーのエイリアス。 |
ServerSPN |
サーバーの SPN。 |
Timeout |
データ ソース初期化が完了するまでの待機時間 (秒単位)。 |
Trusted_Connection |
Windows Authentication Mode か SQL Server のユーザー名またはパスワードをログイン検証に使用するかどうかを指定します (Yes または No)。 |
TrustServerCertificate |
サーバー証明書が検証されるかどうかを指定します (True または False)。 |
UID |
SQL Server ログイン名。 |
Use Encryption for Data |
ネットワークに送信する前にデータを暗号化するかどうかを指定します (True または False)。 |
UseProcForPrepare |
非推奨のキーワード。 |
WSID |
ワークステーション ID、すなわち、アプリケーションが置かれているコンピューターのネットワーク名。 |