掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
外部のMDBファイル内のテーブルにパススルークエリを発行できますか? (ID:143413)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 早速テストさせていただきましたところうまく動きました。 IN 句を使う手法もあります。 「SELECT * FROM TABLE1 IN "\\fileserver\Shared\test.mdb"」 「SELECT * FROM TABLE1 IN '\\fileserver\Shared\test.mdb'」 「SELECT * FROM TABLE1 IN '' '\\fileserver\Shared\test.mdb'」 「SELECT * FROM TABLE1 IN '' [;Database=\\fileserver\Shared\test.mdb]」 「SELECT * FROM TABLE1 IN '' [\\fileserver\Shared\test.mdb]」 などなど。 相対パス指定もできるため、同一フォルダ上である場合には、 「SELECT * FROM TABLE1 IN test.mdb」のようにも書けます。 > 処理速度がWHERE句追加前後で変わりません。 パフォーマンス向上を望むのであれば、OpenDatabase メソッドを使って、 相手を(共有モードでは無く)排他モードで開くようにしてみてください。 異種DB間クエリ等を行うのでなければ、こちらの方がパフォーマンスは出るでしょう。 それ以上に向上させる必要がある場合は、ネットワーク越しに処理させることを諦め、 \\fileserver 自身の CPU 上で処理させるよう、システムを見直してみてください。 > これはパススルークエリとして動いているのでしょうか? パススルーは、JET自身のエンジンではなく、相手側のエンジンに クエリーを実行させる仕組みですよね。 しかしMicrosoft Jet はファイル共有型データベース システムです。 ファイル共有型データベースでは、ファイルに関する処理が すべてクライアントで実行されることに注意してください。 http://www.naboki.net/access/achell/achell-02.html 一般的なデータベースでは、データベースエンジンは各サーバー上にありますが、 JET のデータベースエンジンは、\\fileserver 上にはありません。 mdb がどこにあったとしても、利用されるエンジンはローカル側、言い換えれば EXE を実行させている CPU 上で処理されることになります。 対 mdb に関して言えば、自エンジンに対する問い合わせにしかなりませんので、 パススルークエリーと言う概念自体が存在しないとも言えます。 そもそも、JET のパススルーは ODBC ベースで実行されるものなので、 対mdbのように非ODBC接続となる場合には、どちらにせよ利用できません。 > そこでConnectでの接続をテストしてみましたがエラーが表示されました。 失礼しました。QueryDef.Connect では駄目なようですね。 Connect で mdb を指定できるのは、TableDef の場合のようで。 > \\fileserver\test.mdbではなく コンピュータ名の直下にファイルは置けないかと。 > 便宜上略させていただきました。 略しすぎて、むしろ不都合を生じているような…。(^^; Dir("Z:\*.*") だと、「Cドライブのルート直下にあるファイル」 Dir("Z:*.*") だと、「Zドライブのカレントディレクトリ直下にあるファイル」 Dir("*.*") だと、「カレントドライブのカレントディレクトリ直下にあるファイル」 を表しますよね。 しかし、Dir("\\localhost\*.*") は、UNC パスとしては不正なものとなります。 Dir("\\localhost\C$\*.*") などのように、最低でも共有名まで含めないと。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.