※基本的に、Access2000についてのメモ。
AccessではODBCを使用してリンクテーブルを作成した場合、
そのリンクテーブルに対して発行したSQLはJetによって独自のSQLに加工されて発行される。
また、インデックスなども一旦全インデックス情報をローカルに取得して、ローカルで解析を行ってしまう。
よって、インデックスのサイズが大きいとインデックスの取得だけで非常に時間がかかる(または終わらない)。
Accessでは上記のようにJetエンジンを間に挟んでクエリーを実行する方法と、
入力されたSQLをJetを介さずに直接対象DBに送信する方法が用意されている。
この方法を「パススルークエリ」と呼ぶ。
パススルークエリではSQLをDBに丸投げするので、DB固有のSQLを使用できる。
逆にAccessの関数は使用できない(Jetを介する場合は逆)。
パススルークエリを使用すればインデックスの検索なども全てサーバーで処理されるので、処理速度が速い。
ただ、Access上に表示されている結果データはスナップショットなので、読み取り専用となる。
リンクテーブルのように直接値を修正したりすることはできない。
・パススルークエリの発行方法
1. クエリを新規作成し、デザインビューを開く。
2. ツールバーから[クエリ] - [SQL] - [パススルー]を選ぶ。
3. ツールバーから[表示] - [プロパティ]を選び、クエリプロパティを開く。
4. 「ODBC接続文字列」を以下のように変更。
"ODBC;dsn=DSN名;uid=UID名;pwd=パスワード"
5. 後はSQLを記述して実行するだけ。パススルークエリとして実行される。
1. 目的の結果を取得するパススルークエリを作成し、保存しておく。
2. クエリを新規作成し、デザインビューを開く。
3. ツールバーから[表示] - [テーブルの表示]を選ぶ。
4. 「クエリ」タブから目的のクエリ名を選び、追加する。
5. 「フィールド」に"クエリ名.*"を設定(ドラッグ&ドロップでも可)。
6. ツールバーから[クエリ] - [テーブル作成]を選ぶ。
7. 取得した結果から作成するテーブルの名称を入力する。
8. 実行するとパススルークエリの結果からテーブルが作成される。
この方法で作成されたテーブルはデータの操作が可能。
ただし、このテーブルの値を変更したからといってDBのデータが変わるわけではない。
インポートでテーブルを作成した時のような扱い。
あくまでローカルMDBの中のテーブルとして扱われる。