DBISAMを使っているんですが、Queryで大量のレコードを選択して展開する場合(特にCDドライブから等)、すごく時間がかかり、ESCで中断させたいと考えています。
で、展開中のQueryを止めるメソッドとESCキーをどこで関知するかがわかりません。
宜しくお願いします。
回答ではありませんが、
DBの更新タイミングについて
https://www.petitmonte.com/bbs/answers?question_id=7377
のときは、
>やっぱりインデックスを設定した方がいいとも教えてくれました。
と書かれていますが、
今回のは、
>Queryで大量のレコードを選択して展開する場合(特にCDドライブから等)、すごく時間がかかり
とありますが、
・SELECT文1つで何十秒とか、かかるのですか?
・インデックスはどうなっていますか?
お望みの「展開中のQueryを止めるメソッド」なるものはDELPHIにはないと思います。
DBISAMを使ったことはありませんが、通常アプリ側からSQL発行後は、発行された
SQL文に基づく処理はDBエンジン側に移ります。
DBエンジンはアプリとは別プロセスですので(DBエンジン側に処理中断を受入れる
機能がついていない限り)一旦発行したSQL文の処理を中断させるのは不可能と思います。
(私は、途中で処理を中断できるような機能をもつDBエンジンを知りません。)
どうしても処理を中断させたのであれば、乱暴ですがWINDOWS APIを使って
稼動中のプロセス(DBISAM)をSHUTDOWNする機能を実現するしかないと思います。
(タスクマネージャーからフリーズしたプロセスを殺すのと同様に)
>(特にCDドライブから等)、
と書かれていることから、同じデータをHDDに置いて同じ処理を行い比較された
ものと思いますが、
・HDDにデータを置いた場合は許容できる時間内で処理できているのですか?
・CDドライブから時間がかかるのはCDドライブとHDDの物理的な性能差が主と考え
らますので根本的な解消方法はないと思います。
a)目的のテーブルからデータを抽出するにはランダムアクセスすることに
なりますが、CDドライブはまるっきりランダムアクセスに向いていない
b)基本的にCDドライブはHDDよりデータアクセス性能が劣る。
(多分、トータル性能で100倍以上CDが遅い)
のが原因で時間がかかるのではと思います。
なお、
・発行するSQL文にマッチしたINDEXが設定されていますか?
SQL文と設定したINDEXはどのような内容ですか?
・(特にCDドライブから等)の”等”はCD以外の何を指すのですか?
・「大量のレコードを選択」とは具体的に
何件あるテーブルから何件くらいのデータ選択するのでしょうか?
>展開中のQueryを止めるメソッド
OnQueryProgress です。
>ESCキー
FormのOnKeyPress
if Key= #27 then ・・・
既に解決済みかもしれませんが・・・
同期は
Session.StrictChangeDetection:= True;
ツイート | ![]() |