Queryの展開中をESCキーで中断したい


studio-take  2011-11-19 00:35:53  No: 41210

DBISAMを使っているんですが、Queryで大量のレコードを選択して展開する場合(特にCDドライブから等)、すごく時間がかかり、ESCで中断させたいと考えています。
で、展開中のQueryを止めるメソッドとESCキーをどこで関知するかがわかりません。
宜しくお願いします。


igy  2011-11-19 09:20:42  No: 41211

回答ではありませんが、

DBの更新タイミングについて
https://www.petitmonte.com/bbs/answers?question_id=7377
のときは、
>やっぱりインデックスを設定した方がいいとも教えてくれました。
と書かれていますが、

今回のは、

>Queryで大量のレコードを選択して展開する場合(特にCDドライブから等)、すごく時間がかかり

とありますが、
・SELECT文1つで何十秒とか、かかるのですか?
・インデックスはどうなっていますか?


  2011-11-20 06:50:42  No: 41212

お望みの「展開中の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以外の何を指すのですか?
・「大量のレコードを選択」とは具体的に
  何件あるテーブルから何件くらいのデータ選択するのでしょうか?


佐助  2011-11-21 07:10:40  No: 41213

>展開中のQueryを止めるメソッド
  OnQueryProgress  です。

>ESCキー
  FormのOnKeyPress
  if Key= #27 then  ・・・

既に解決済みかもしれませんが・・・
同期は
Session.StrictChangeDetection:= True;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加