喫茶XRAYトップページ

[スレッド全体
]

[12627] 無題返信 削除
2019/3/14 (木) 17:48:07 Villa 〔HomePage
質問させていただきます。

現在、VCLフォームアプリケーションのシステムを作成しており、
TADOQueryを使用してSQL文をOpenしています。

そのデータベースの量が多く、結果のレスポンスが遅いため
progressbarを出して、styleプロパティを「pbstMarquee」に設定して起動させています。

問題はここからで、SQLの結果のレスポンスが遅いためなのか、
GUIの更新がなく、progressbarも止まったままで、SQLの結果が返ってきた後に動く、
ということになってしまっています。

どこで、マルチスレッド?のような仕組みで、
クエリのOpenとは別にProgressbarは動くようにならないものか、と思いました。

それができれば、同一フォーム内の複数のTADOQueryを同時オープンとかができるのではないか、、、など期待しております。

下手な文章ですが、もし手掛かりがあるようでしたら、教えていただけると幸いです。

よろしくお願いいたします。

[12628] クエリーの進捗をTProgressBar表示返信 削除
2019/3/14 (木) 19:30:51 Mr.XRAY
> GUIの更新がなく、progressbarも止まったままで、SQLの結果が返ってきた後に動く、
> ということになってしまっています。


う〜む.どうなんでしようね.
pbstMarquee は関係ないのかな.

クエリーの実行が遅いようですが,インデックスとかはとうなんでしよう.

こんなのもありますが・・・

[Data.Win.ADODB.TCustomADODataSet.OnFetchProgress]
http://docwiki.embarcadero.com/Libraries/Rio/ja/Data.Win.ADODB.TCustomADODataSet.OnFetchProgress

[TADOQuery で処理の進行状況を取得]
https://ht-deko.com/delphiforum/?vasthtmlaction=viewtopic&t=1184.0
↑ こんなの書いていたんだ.全く記憶にございませんです.
おそらく何かのレスとして書いたのかも知れません.


[12629] Re:クエリーの進捗をTProgressBar表示返信 削除
2019/3/15 (金) 08:28:16 SO
▼ Mr.XRAYさん
 
> クエリーの実行が遅いようですが,インデックスとかはとうなんでしよう.

DBがなんなのか分かりませんが、SSMSだと不足しているインデックスを教えてくれたりします。。。
プロのDB設計者にはかなわないと思いますが。。。

[12630] Re2:クエリーの進捗をTProgressBar表示返信 削除
2019/3/15 (金) 10:25:22 Mr.XRAY
> DBがなんなのか分かりませんが、SSMSだと不足しているインデックスを教えてくれたりします。。。
> プロのDB設計者にはかなわないと思いますが。。。


へぇ〜,そんな仕様があるんですか.スゴイですね.
Paradox や JET だとインデックがなくてもそこそこ動作するようですが,
(ある程度の自動インデックスなのか ?)
インデックスが適切でないと悲惨ですからねぇ.

DB がなんのかも分かりませんし,
Tprogressba でどこでとんな進捗状況を見るのかも分かりませんが・・・(笑)
まっ,雑談系の掲示板なので・・・


[12639] Re3:クエリーの進捗をTProgressBar表示返信 削除
2019/3/15 (金) 13:42:21 Villa
▼ Mr.XRAYさん
> > DBがなんなのか分かりませんが、SSMSだと不足しているインデックスを教えてくれたりします。。。
> > プロのDB設計者にはかなわないと思いますが。。。
>
> へぇ〜,そんな仕様があるんですか.スゴイですね.
> Paradox や JET だとインデックがなくてもそこそこ動作するようですが,
> (ある程度の自動インデックスなのか ?)
> インデックスが適切でないと悲惨ですからねぇ.
>
> DB がなんのかも分かりませんし,
> Tprogressba でどこでとんな進捗状況を見るのかも分かりませんが・・・(笑)
> まっ,雑談系の掲示板なので・・・



情報が足りず、申し訳ないです。。
この問題でお聞きしたかったのはDBの遅さではなく、GUIの更新がなぜされないかということでしたので、
余分な情報は記載しておりませんでした。。

DBはSQL Serverです。

progressbarで何がしたいか、というと、
呼び出すデータが多いので、SQLが遅いこと自体は大丈夫なのですが、
ユーザーに体感的に動いていない、と思われたくないのでbarだけでも動かして、
待っていただけるような仕様にしたかった、ということです。



[12640] Re4:クエリーの進捗をTProgressBar表示返信 削除
2019/3/15 (金) 15:15:10 Mr.XRAY
> この問題でお聞きしたかったのはDBの遅さではなく、GUIの更新がなぜされないかということでしたので、

見えるオブジェクトは何でも GUI ですよね ?
何か更新どのように更新されないのですか ?
TProgressbar がバー全体で進捗状況を示す状態 (プログレスが往復する) に
ならないと思ったのですが.

だとすると,そのような更新がされないコーディングになっているとしか言えません.
だって,どんな場所でどんなようなコードなのか分かりませんので.
それ以上は何とも・・・

[ TProgressbar テストプログラム ]
http://mrxray.on.coocan.jp/Delphi/zip/plTProgressbarTest.zip
(既に削除しました)

↑ style プロパティが pbstMarquee の時は進捗状況の表示ではなく,
単に TPrgressbar のプログレスを往復表示のアニメーション表示するたけです.
このアニメーションを表示しないと言うことらしいのですが,
ちょっと分かりませんね.不思議な気もしますが.



[12641] Re5:クエリーの進捗をTProgressBar表示返信 削除
2019/3/15 (金) 16:10:23 Mr.XRAY
> 単に TPrgressbar のプログレスを往復表示のアニメーション表示するたけです.

使い方は説明するまでもないかも知れませんが,

  (1) アニメーション開始 ( style := pbstMarquee; にする)
  (2) 何かの処理
  (3) アニメーションを止める ( style := pbstNormal; にする)

ですが,何かの処理がアニメーションを止めてしまうのかも ?


[12642] Re6:クエリーの進捗をTProgressBar表示返信 削除
2019/3/15 (金) 16:18:19 Villa
▼ Mr.XRAYさん
> > 単に TPrgressbar のプログレスを往復表示のアニメーション表示するたけです.
>
> 使い方は説明するまでもないかも知れませんが,
>
>   (1) アニメーション開始 ( style := pbstMarquee; にする)
>   (2) 何かの処理
>   (3) アニメーションを止める ( style := pbstNormal; にする)
>
> ですが,何かの処理がアニメーションを止めてしまうのかも ?



まさにその問題で、通常であればpbstMarqueeでアニメーションが動く、
ということは存じ上げていますが、アニメーションを動かした後に重い処理のSQL文を
実行すると、barの進みも止まってしまい、重すぎる場合「応答なし」になります。

応答なし、になるのは構わないのですが、単にこのプログレスバーの処理を別ユニットに持たせて、
SQLを実行しているメインのユニットとは切り離してbarの進みだけでも動いておいてほしい、、、
というのが私の望みです。

[12645] Re7:クエリーの進捗をTProgressBar表示返信 削除
2019/3/15 (金) 16:47:15 Mr.XRAY
▼ Villaさん

> 応答なし、になるのは構わないのですが、単にこのプログレスバーの処理を別ユニットに持たせて、

そんなの変です.
処理が止まっているのにプログレスがアニメーション表示していたら,
ユーザは処理が続いていると思いますよ.
変です !!
顔を洗って出直して来てください (笑)


[12646] Re8:クエリーの進捗をTProgressBar表示返信 削除
2019/3/15 (金) 19:08:47 Villa
▼ Mr.XRAYさん
> ▼ Villaさん
>
> > 応答なし、になるのは構わないのですが、単にこのプログレスバーの処理を別ユニットに持たせて、
>
> そんなの変です.
> 処理が止まっているのにプログレスがアニメーション表示していたら,
> ユーザは処理が続いていると思いますよ.
> 変です !!
> 顔を洗って出直して来てください (笑)


またまた私の言葉が足りず、申し訳ないです。

SQLで行っている処理がややこしく、どうしてもクエリ結果が帰ってくるのに30秒くらいかかります。

その30秒の間、「応答なし」と出たとしても20〜30秒後にはきちんと結果はかえってきて、
DBGridに表示もされるので、
その約30秒のは間違いなく動いてはいるのですが、重くて固まる?のか応答なしになる、ということです。


そこで、progressbarのアニメーションだけでも動いてくれないかなぁ。。という願望です。笑

まさにxrayさんが添付しているpdfを見て、
ここの方ならより良い方法を教えていただけるのではないか、、と思い、相談しました。

が、どうやらこのpdfにある通り、マルチスレッド?処理でGUIを無理やり更新する?という方法しかなさそうですね。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82