パススルー クエリを作成する
Applies ToAccess for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Access をフロントエンド アプリケーションとして使用し、SQL Server などのバックエンド サーバー内のテーブルにリンクできます。 既定では、ほとんどのクエリは Access ACE データベース エンジンでローカルに実行されます。 場合によっては、SQL 構文やその他の要因に応じて、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 Database へのリンクまたはデータのインポート」を参照してください。

  2. [作成]、[クエリ デザイン] の順に選択します。

  3. 必要に応じて、[ テーブルの追加 ] ダイアログ ボックスを閉じます (Access でテーブルを表示 します。

  4. [ デザイン >パススルー] を選択 します

    Access では、クエリ デザイン グリッドが非表示になり、 SQL ビューが表示されます。

  5. クエリ プロパティ シートが表示されない場合は、F4 キーを押して表示します。

  6. プロパティ シートで、[ ODBC Connect Str ] プロパティ ボックスをクリックし、次のいずれかの操作を行います。

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

    1. ナビゲーション ウィンドウで、目的のデータ ソースにリンクされているテーブルを右クリックし、[ リンクされたテーブル マネージャー] を選択します。

    2. [ リンク テーブル マネージャー ] ダイアログ ボックスで、データ ソースのチェック ボックスをオンにし、[編集] を選択 します

    3. [ リンクの編集 ] ダイアログ ボックスで、[ 接続文字列 ] ボックスのテキストをコピーします。

    1. [ ビルド [ビルダー] ボタン] を選択します。

    2. プロンプトに従って、接続文字列情報を含む DSN ファイルを作成します。 詳細な手順については、「 SQL Server データベース内のデータをインポートまたはリンクする 」および「 Azure SQL Server Database にデータをリンクまたはインポートする」を参照してください。

    DSN ファイル接続を作成すると、ODBC 接続文字列が Access データベースに内部的に格納されます。 その文字列のコピーを取得するトリックを次に示します。

    1. 目的の ODBC 接続を使用して、ナビゲーション ウィンドウでリンク テーブル名を見つけます。

    2. Ctrl キーを押しながら G キーを押します。 をクリックして VBA イミディエイト ウィンドウを開きます。

    3. 次のコードを入力します。

      ?CurrentDb.TableDefs("<table name>").Connect

      ただし、ステップ a のリンク テーブル名> テーブル名 <置き換えます。

    4. 返された文字列を ODBC Connect Str プロパティにコピーします。

  7. 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 エディション をデスクトップにインストールすることを検討してください。

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

    • レコードを返します     一部の SQL ステートメントは、SELECT などのレコードを返し、一部は UPDATE などのレコードを返しません。 クエリからレコードが返される場合は、このプロパティを [はい] に設定します。クエリでレコードが返されない場合は、このプロパティを [いいえ] に設定します。

      メモ    パススルー クエリは複数の結果セットを返すことができますが、データシート、フォーム、レポート、またはレコードセット変数では、最初の結果セットのみが使用されます。 次の例に示すように、複数の結果セットを取得するには、 テーブル作成クエリ を使用します。

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

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

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

    • ODBC タイムアウト    クエリの実行時にタイムアウト エラーが発生するまで待機する秒数を指定します。 既定値は 60 秒です。 ネットワーク トラフィックやデータベース サーバーの使用が多いため、遅延が発生する可能性があります。

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

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

関連項目

Transact-SQL リファレンス

Transact-SQL を使用したクエリ

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。