C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 進行状況バー(何%完了)の表示


(過去ログ 58 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■33045 / inTopicNo.1)  進行状況バー(何%完了)の表示
  
□投稿者/ ka (3回)-(2009/02/19(Thu) 16:40:24)

分類:[VB.NET/VB2005 以降] 

VB:2005/Office:2000/DB:SQL2000Server/PC.OS:XP の環境です。

Excelファイルを取り込んで、DBへ書き込みをしているプログラムで、データ件数が
多い為、今どこまで完了しているかが分かる、何%まで完了しているかを示すバーで
表示したいのですが、方法を教えて頂けないでしょうか。
宜しくお願い致します。
引用返信 編集キー/
■33049 / inTopicNo.2)  Re[1]: 進行状況バー(何%完了)の表示
□投稿者/ 魔界の仮面弁士 (1005回)-(2009/02/19(Thu) 17:18:43)
2009/02/19(Thu) 19:19:27 編集(投稿者)

No33045 (ka さん) に返信
> Excelファイルを取り込んで、DBへ書き込みをしているプログラムで、

(1) 現在は、どのようにして取り込んでいますか?

(2) 処理前に、データの総件数は事前に取得できますか?


> 何%まで完了しているかを示すバーで表示したいのですが、

たとえば…その処理を BackgroundWorker の DoWork イベントで
行うようにして、進捗状況を ReportProgress メソッドで通知し、
ProgressChanged イベント内で ProgressBar を更新するとか、かな。

上記(1), (2) の回答結果によっては使えない可能性もありますけれども。
引用返信 編集キー/
■33072 / inTopicNo.3)  Re[2]: 進行状況バー(何%完了)の表示
□投稿者/ ka (4回)-(2009/02/20(Fri) 08:24:14)
No33049 (魔界の仮面弁士 さん) に返信
> 2009/02/19(Thu) 19:19:27 編集(投稿者)
>
> ■No33045 (ka さん) に返信
>>Excelファイルを取り込んで、DBへ書き込みをしているプログラムで、
>
> (1) 現在は、どのようにして取り込んでいますか?
→項目チェックを行った後、項目によっては文字列を分類しマスタ検索した
    のち複数のテーブルへ更新しています。 
> (2) 処理前に、データの総件数は事前に取得できますか?
   →Excelをオープンした時になら可能です。

>>何%まで完了しているかを示すバーで表示したいのですが、
>
> たとえば…その処理を BackgroundWorker の DoWork イベントで
> 行うようにして、進捗状況を ReportProgress メソッドで通知し、
> ProgressChanged イベント内で ProgressBar を更新するとか、かな。
   →すみません。初心者なもので、上記イベントとか分かりません。

引用返信 編集キー/
■33077 / inTopicNo.4)  Re[3]: 進行状況バー(何%完了)の表示
□投稿者/ 魔界の仮面弁士 (1009回)-(2009/02/20(Fri) 10:05:27)
2009/02/20(Fri) 10:41:03 編集(投稿者)

No33072 (ka さん) に返信
>>(1) 現在は、どのようにして取り込んでいますか?
> →項目チェックを行った後、項目によっては文字列を分類しマスタ検索した
>     のち複数のテーブルへ更新しています。 

ごめんなさい、聞き方が悪かったですね。
変換中の作業内容ではなく、変換手法を聞きたかったのです。

Excel → SQL Server 2000 といっても、その変換方法は多岐に渡りますよね。
複数行を一括処理する手法や、一行ずつ処理する手法。
データ加工を VB 側で行う手法や、SQL Server 側に担当させる手法など。

・SQL Server のデータ変換サービス (DTS) を用いている。
・Excel 参照用のリンク サーバーを作り、それを OPENQUERY にて参照し、SQL Server 側で加工して取り込んでいる。
・OPENROWSET もしくは OPENDATASOURCE を用いて Excel を参照し、SQL Server 側で加工して取り込んでいる。
・System.Data.SqlClient.SqlBulkCopy クラスを利用して、作業テーブルに一括して取り込んでいる。
・OleDbDataAdapter 経由で得た Excel データを DataTable 上で加工し、それを SqlDataAdapter にて反映させている。
・Excel のオートメーション機能を利用してデータを読み取り、それを VB 側で加工後、1行ずつ SqlCommand で更新している。
・その他

どのような方法を使うかによって、進捗表示のために使える手順も異なってくるかと思います。

現在の方法が、進捗表示機能を備えている、あるいは容易に実装可能ならば、さほど問題は無いでしょう。

しかし、もしも進捗表示に向かない手法が使われていたとして、しかも作業工程上、他の変換方法を
選択できないような場合には、進捗表示そのものを諦めなければならないかも知れません。
(その場合の選択肢としては、予想終了時間を経験則で見積もり、経過時間を表示することで代用するなど)

あるいは、変換方法を変更することで、進捗表示が不要になるほど高速に処理できる事もありえます。
その逆に進捗表示を付加したが故に、大幅な速度低下になってしまう可能性も無いとは言えません。
(たとえばオートメーション法などは、柔軟性が高い反面、変換効率としては最低の部類にあたるでしょう)

という事で、「現在はどのようにして変換しているのか」といった点を知るために、
先の『現在は、どのようにして取り込んでいますか?』という質問に至った次第です。


>>(2) 処理前に、データの総件数は事前に取得できますか?
>    →Excelをオープンした時になら可能です。
変換方法によって、「現在の処理行数」を得る方法は異なります。

たとえば、SqlBulkCopy を使うと、一定行数を取りこむごとに SqlRowsCopied イベントが発生し、
それを使って「現在の処理行数」を報告させる事ができます。
# SqlBulkCopy による CSV 変換例。
# http://www.vbstation.net/tips/sqlbulkcopy_zip.htm

あるいは、先述のように、BackgroundWorker を使って通知する方法もあるかと思います。

ただ、どの方法を使うにしても、全体の進捗率をパーセンテージで表示したいのであれば、
現在の処理行数が、全体の何割に相当するのかを調べるために、事前にデータの総件数を
得ておいた方が良いでしょうね。


> →すみません。初心者なもので、上記イベントとか分かりません。
流石に掲示板でゼロから教えるわけにもいかないので、まずは分かる範囲で調べてみてください。
提示したキーワードで MSDN ライブラリや ネット上を探せば、少なからず情報は得られるかと思います。

その上で、「〜という URL で情報を見つけたけれど、その中の〜という部分の意味がわからない」とか、
「〜というサンプルを見つけて試したけれど、〜というエラーになってしまった」など、
「〜という機能がある事がわかったが情報が足りないので、参考文献を教えて欲しい」など、
【具体的】な質問を投稿してみれば、何らかの回答が得られるかと思います。
引用返信 編集キー/
■33080 / inTopicNo.5)  Re[3]: 進行状況バー(何%完了)の表示
□投稿者/ 梅のど飴 (3回)-(2009/02/20(Fri) 10:18:23)
>>たとえば…その処理を BackgroundWorker の DoWork イベントで
>>行うようにして、進捗状況を ReportProgress メソッドで通知し、
>>ProgressChanged イベント内で ProgressBar を更新するとか、かな。
>    →すみません。初心者なもので、上記イベントとか分かりません。


"初心者"と言う言葉を免罪符の様に使うのは、社会人として如何なものかと…

キーワードは既に魔界の仮面弁士さんが出して下さっていますので、少しは
ご自分でお調べになってみては如何でしょうか。

ProgressBar や BackgroundWorker は標準で使えるコントロールですから
使い方はヘルプやGoogleなどで検索すれば沢山出てきます。

簡単なアプリでも作った上で、これらの使い方を把握されたら、今一度
魔界の仮面弁士さんの書込みをお読み頂ければ、実現したい事も出来るように
なると思いますよ。

引用返信 編集キー/
■33314 / inTopicNo.6)  Re[4]: 進行状況バー(何%完了)の表示
□投稿者/ ka (5回)-(2009/02/25(Wed) 13:26:07)
No33077 (魔界の仮面弁士 さん) に返信
> 2009/02/20(Fri) 10:41:03 編集(投稿者)
>

情報ありがとうございました。
ProgressBarを使って試してみたところ、表示できるように
なりました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -