プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
VB 2008 EE を使っており、まだ素人レベルですが宜しくお願いいたします。

データリーダーでテーブルデータを取得して計算結果をデータアダプター経由で保存する処理をテスト中です。
ダミーデータを10000件程度作ってSQLで並び替えをしても数秒で完了するのですが、計算を入れたらとても時間がかかります。(30分程)
これもプログラム構造の問題なのかもしれませんが現在調査中です。

そこで、計算処理の進捗状況をリッチテキストに書き込もうと思っています。
例"現在***まで完了しています(改行)"といったかんじです。
(現状は「ProgressBar」を表示させています。)

純粋に読み込み処理の前にテキストボックスに文字を書き換えても変わってくれません。
計算が全て完了した後であれば書き換えがでします。
「完了しました」のような感じです。
Call(サブルーチン)で間接的にやらせてもだめでした。

テキスト書き換えが完了するまえにデータリーダーの接続が始まった為?
って感じがします。

NET情報でも色々調べたのですがわかりません。

説明が不鮮明で分かりにくいかもしれませんが、ご理解のほど宜しくお願いいたします。

A 回答 (3件)

doEventsではなく、Textbox1.updateを使用してください。

    • good
    • 1
この回答へのお礼

早々のご回答を頂、感謝します。
思うように動作しました。
本当にありがとうございました。

お礼日時:2009/01/09 17:29

#1さんがおっしゃるとおり、該当コントロール、若しくは該当画面をRefreshですね



EventProcedure実行中は画面の再描画は行われないのでデバッグ中にブレイク行でとまっている時は実行画面に切り替えても何も表示されないでしょう
それと同じで意識的に再描画を行ってやらないと出ません
該当コントロールだけを再描画すると他の画面に切り替えて表示を戻した時再描画したコントロールのみが再表示されるので画面にそのコントロールだけが出る形になるので、フォーム全体を再描画した方が良いでしょうね

#1の参考URLでDoEventsの注意書きがありますが
実際にどんな恩恵・弊害があるかなのですが
DoEventsを行うとOS側の制御が実行されますので
EventProcedureは実行されない事が実行出来てしまいます
例を挙げるとフォーム実行中にボタンを押して今回のような長い処理をしている間にも画面の入力等を行いたいとか別なボタン操作を行いたいなどが、ループ中にDoEventsを呼べば可能になります。
当然のことながら実行中のボタンも再度押せますので変数等が可笑しくなりこける場合もあります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
まだ、勉強中の為、手探り状態です。
解決方法がわかっても、理由が理解できないと次につながらなく苦戦しております。
ご意見は非常に判りやすく参考になりました。
ありがとうございました。

お礼日時:2009/01/09 17:34

よく質問に出る、こういう話?



http://blog.livedoor.jp/akf0/tag/DoEvents

#IDEが生成したコードよりも自分で書く事を好むhimajin100000
#宣言がいろいろ省略されちゃうからね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ちょっと意味がわからなかったのですが。#2さんのご意見で理解しました。感謝します。

お礼日時:2009/01/09 17:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A