パススルー クエリを作成する

適用先
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Access をフロントエンド アプリケーションとして使用し、SQL Server などのバックエンド サーバーのテーブルにリンクできます。 既定では、ほとんどのクエリは Access ACE データベース エンジンでローカルで実行されます。 SQL 構文やその他の要因に応じて、Access が SQL Server 上でリモートでクエリを実行できる場合があります。 詳細については、 再発見された JET および ODBC ホワイト ペーパーの「JET データベース エンジン バージョン 3.0: ODBC 接続」を参照してください。

ただし、多くの場合、データベース サーバーでクエリを明示的に実行する必要があります。 これを行うと、パフォーマンスが向上します。データベース サーバーはデスクトップ コンピューターよりも処理能力が高く、ネットワーク接続を介して返すデータのサブセットが小さくなります。 データベース サーバー上でクエリを実行するには、パススルー クエリを使用します。これは、ODBC 接続文字列を使用して SQL Server に接続する Transact SQL (TSQL) ステートメントです。 たとえば、SELECT ステートメントを渡して、データシート、フォーム、レポート、リスト コントロールにデータを返したり、アクション クエリに相当するものを実行したり (データ操作言語 (DML) ステートメント)、ストアド プロシージャを呼び出したり、管理タスク (データ定義言語 (DDL) ステートメントを実行したりできます。

注釈 パススルー クエリの結果は読み取り専用です。 データシートまたはフォーム内のデータを直接編集するには、インデックス付きビューへのリンク テーブルを作成します。 詳細については、「 インデックス付きビューの作成」を参照してください。

  1. サーバー データベースに接続します。
    SQL Server へのリンクの詳細については、「SQL Server データベース内のデータのインポートまたはリンク」および「Azure SQL Server データベースへのリンクまたはデータベースからのデータのインポート」を参照してください。
  2. [ 作成>クエリ デザイン] を選択します。
  3. 必要に応じて、[ テーブルの追加 ] ダイアログ ボックス (Access でテーブルを表示 ) を閉じます。
  4. [デザイン>パススルー] を選択します。
    クエリ デザイン グリッドを非表示にし、 SQL ビューを表示します。
  5. クエリ プロパティ シートが表示されていない場合は、F4 キーを押して表示します。
  6. プロパティ シートで、[ ODBC Connect Str ] プロパティ ボックスをクリックし、次のいずれかの操作を行います。

接続文字列を取得するには:

  1. ナビゲーション ウィンドウで、目的のデータ ソースにリンクされているテーブルを右クリックし、[ リンク テーブル マネージャー] を選択します。
  2. [リンク テーブル マネージャー] ダイアログ ボックスで、データ ソースのチェック ボックスをオンにし、[編集] を選択します。
  3. [ リンクの編集 ] ダイアログ ボックスで、[ 接続文字列 ] ボックスのテキストをコピーします。
  1. SQL ビューにクエリを入力します。
    メモ:Access SQL と SQL Server TSQL の間には、特に構文、関数名、関数引数に関して重要な違いがあります。 詳細については、「Access SQL と SQL Server TSQL の比較」を参照してください。
    ヒント最初に SQL Server Management Studio で TSQL クエリを作成した後、SQL をコピーして SQL ビューに貼り付けます。 これにより、クエリの構文が正しいことが保証されます。 SQL Server データベースに簡単にアクセスできない場合は、最大 10 GB をサポートし、移行を無料で簡単に実行してチェックできる Microsoft SQL Server Express エディションをデスクトップにインストールすることを検討してください。

  2. 追加の関連プロパティを設定することを検討してください:

    • Returns Records レコードを返す SQL ステートメントには SELECT などと、UPDATE などレコードを返さないものがあります。 クエリでレコードが返される場合は、このプロパティを Yes に設定します。クエリでレコードが返されない場合は、このプロパティを [いいえ] に設定します。
      注釈 パススルー クエリは複数の結果セットを返すことができますが、データシート、フォーム、レポート、またはレコードセット変数では、最初の結果セットのみが使用されます。 複数の結果セットを取得するには、次の例のようにテーブル 作成クエリ を使用します。

      SELECT <pass-through query name>.*
      INTO <local table name>
      FROM < pass-through query name >
      

      各結果セットの列が異なる場合があるため、アスタリスク (*) を使用する必要があります。 各結果セットは個別のテーブルに保存され、ローカル テーブル名にはそれに応じて番号が付加されます。 たとえば、3 つの結果セットが返された場合、テーブル名は <ローカル テーブル名>、 <ローカル テーブル名>1、 <ローカル テーブル名>2 になります。

    • ログ メッセージ SQL データベースからのメッセージを返すかどうかを Access メッセージ テーブルで指定します。 テーブル名の形式はユーザー名 – nn です。ここで、username は現在のユーザーのサインイン名で、nn は 00 から始まる数値です。

    • ODBC タイムアウト クエリの実行時にタイムアウト エラーが発生するまでの待機秒数を指定します。 既定値は 60 秒です。 ネットワーク トラフィックまたはデータベース サーバーの頻繁な使用が原因で遅延が発生する場合があります。

    • 最大レコード数 返すレコードの最大数を指定します。 システム リソースが限られているか、少量のデータで結果をテストしたい場合があります。

  3. クエリの入力が完了したら、[ Design>Run] を選択します。 クエリは、処理のためにデータベース サーバーに送信されます。

関連項目

Transact-SQL リファレンス

Transact-SQL を使用したクエリ