パススルークエリ


2006.1 ACCESS 2000 SP-3 + PostgreSQL 8.0.4

ACCESSにおいて、ACCESS(JET)側ではなく、ODBC接続したデータベース側で問い合わせを実行する武器その1。

利点

データベース側でSQL文が実行されてACCESSには実行結果だけが返るので、多数のデータ行を集計するSQL文では、ACCESSがデータベースから対象データすべてを取得して集計するよりも、データベースサーバーとACCESSクライアント間の通信負荷を下げることができる。

作り方

クエリーデザインでパススルーを選択することで、そのクエリをパススルークエリにできます。
リンクテーブルを使った通常のクエリからパススルークエリに変更することが可能ですが、パススルークエリに記述するSQL文は、ODBC接続したデータベース側のSQL文でなければならないので、変換したSQL文の書き換えが必要です。

通常はクエリプロパティのODBC接続文字列にデータソース名を登録します。登録しておかないとクエリ実行時に毎回データソース名をACCESSに聞かれることになります。
データソースの定義にユーザーIDとパスワードを設定してある場合は、"ODBC;DSN=xxxx"とDSNだけの接続文字列でも接続可能ですが、既存の接続を利用せず、新しい接続を開いてしまうようです。
ACCESS(JET)が接続を共有する条件は『JETデータベースエンジンプログラマーズガイド』に掲載されていたような気がしますが、記憶が定かではありません。"ODBC;DSN=xxxx;UID=xxxx;PWD=xxxx"のようにユーザーID(UID)とパスワード(PWD)だけでよかったか、サーバー名やデータベース名まで指定して、それらを一致させないといけなかったか。

 

用途

レコードセットを返すパススルークエリは、普通のクエリ同様に、レポートやフォーム、リストボックスのデータソースにできます。しかし、パススルークエリが返すレコードセットは変更できないもの(スナップショット)になるので、直接データ編集可能なフォームには使えません

 

VBAでの使い方

ここを参照。


MS ACCESSからPostgreSQLへ移行するに戻る TOPに戻る