ADOX を使用して Access で SQL パススルー クエリを作成する方法

中程度: 基本的なマクロ、コーディング、相互運用性のスキルが必要です。

この記事は、Microsoft Access データベース (.accdb または .mdb) にのみ適用されます。

概要

この記事では、Microsoft ActiveX データ オブジェクト (ADO) を使用して Microsoft Visual Basic for Applications (VBA) で SQL パススルー クエリを作成する方法について説明します。

詳細

SQL パススルー クエリを作成するアプリケーション用の関数を Visual Basic で記述できます。 SQL パススルー クエリは、SQL ステートメントと接続文字列で構成されます。 クエリを実行すると、処理のためにコマンドがデータベース サーバーに直接送信されます。 これにより、Microsoft Jet データベース エンジンのオーバーヘッドが削除されます。

Data Access Object (DAO) モデルでは、SQL パススルー クエリを使用して、外部データにアクセスするときのパフォーマンスを向上させることができます。 ADO では、Microsoft OLE DB Provider for SQL Serverを使用して、Microsoft Jet または ODBC のオーバーヘッドなしでSQL Serverに直接アクセスできます。 また、Microsoft OLE DB Provider for ODBC を使用して、任意の ODBC データ ソース内のデータにアクセスすることもできます。

パフォーマンスを向上させるために、Microsoft Jet データベースに SQL パススルー クエリを作成する必要はなくなりましたが、ADOX と Jet Provider を使用して引き続き実行できます。 次のコードは、SQL パススルー クエリを作成する方法を示しています。

注: この記事のサンプル コードでは、データ定義言語とセキュリティ (ADOX) 用の ADO および ActiveX データ オブジェクト拡張機能の両方を使用します。 このコードを正しく実行するには、Visual Basic エディターの [ツール] メニューの [参照] をクリックし、次の 2 つの参照が選択されていることを確認する必要があります。

  • Microsoft ActiveX データ オブジェクト 2.1 ライブラリ
  • DDL とセキュリティ用の Microsoft ADO Ext. 2.6

Microsoft は、例示のみを目的としてプログラミング例を提供しており、明示または黙示にかかわらず、いかなる責任も負わないものとします。 これには、市販性または特定の目的との適合性についての黙示の保証も含まれますが、これに限定はされません。 この記事は、説明されているプログラミング言語、手順を作成およびデバッグするために使用されているツールに読者が精通していることを前提にしています。 マイクロソフト サポート窓口では、特定のプロシージャの機能説明に関するご質問に対して支援いたしますが、本例を特定の目的を満たすために機能を追加したり、プロシージャを構築することは行いません。 コードで SQL パススルー クエリを作成するには、次の手順に従います。

  1. サンプルの Northwind データベースを開きます。
  2. 新しいモジュールを作成し、次のコードを入力または貼り付けます。
Function CreateSPT(SPTQueryName As String, strSQL As String)

Dim cat As ADOX.Catalog
  Dim cmd As ADODB.Command

Set cat = New ADOX.Catalog
  Set cmd = New ADODB.Command

cat.ActiveConnection = CurrentProject.Connection

Set cmd.ActiveConnection = cat.ActiveConnection

cmd.CommandText = strSQL
  cmd.Properties("Jet OLEDB:ODBC Pass-Through Statement") = True

'Modify the following connection string to reference an existing DSN for 
 'the sample SQL Server PUBS database.

cmd.Properties _
     ("Jet OLEDB:Pass Through Query Connect String") = _
       "ODBC;DSN=myDSN;database=pubs;UID=sa;PWD=;"
  cat.Procedures.Append SPTQueryName, cmd

Set cat = Nothing
  Set cmd = Nothing

End Function

  1. この関数をテストするには、[イミディエイト] ウィンドウに次の行を入力し、Enter キーを押します。

    ?CreateSPT("MySptQuery", "Select * from Authors")