環境:VB6.0+SP5, DB: Adaptive Server AnyWhere
こんにちは。
プログレスバーコントロールの使い方について質問させていただきます。
データベースにクエリを投げて、レコードセットを取得する関数myFunctionを次のように書きました。
ここで処理の進捗に合わせてプログレスバーを表示する機能を追加したいと思います。
参考書を調べた結果、↓のようなもの組み込めば良いのだろうと考えましたが、
繰り返し文の中身をどう記述して良いものかわかりません。
申し訳ありませんがお力を貸して頂けないでしょうか?
また、もっとスマートな方法があれば、そちらも教えていただけると助かります。
/////////////////////////////////////////////////////
'プログレスバーコントロールを設置したフォームを呼び出す
frm_progressBar.Show
frm_progressBar.ProgressBar1.Visible = True
frm_progressBar.ProgressBar1.Max = q_rs!rNum
For i = 1 To q_rs!rNum
frm_progressBar.ProgressBar1.Value = i
'レコード取得
Next i
//////////////////////////////////////////////////////
Public Function myFunction(query As String) As Recordset
Dim p_rs As Recordset 'DBから取得したレコードセット
Set p_rs = New ADODB.Recordset
Dim q_rs As Recordset 'レコード件数を格納
Set q_rs = New ADODB.Recordset
Dim i As Integer '
'テーブルのレコード件数を取得
Set q_rs = con.Execute("SELECT COUNT(*) as rNum FROM AppEnd_Logs", , adCmdText)
p_rs.CursorLocation = adUseClient
p_rs.Open query, con, adOpenStatic
Set myFuncsion = p_rs
q_rs.Close
Set q_rs = Nothing
End Function
No.1ベストアンサー
- 回答日時:
ソースを見る限りだとレコード件数分だけ「何か」させたいのですよね?で、1件処理したらプログレスバーをびょーんって伸ばしたいんだと思うのですが...違います?
1.プログレスバーの使い方はよいようですが、minも設定することをおすすめします。
2.「繰り返し文の中身をどう記述して良いものかわかりません。」
→繰り返し文とはfor文のところを指していますよね。何をさせたいか分からないので答えようがありません。申し訳ないです。ひょっとして、自作関数の使い方を聞いてます?
3.「また、もっとスマートな方法があれば、そちらも教えていただけると助かります。」
→私なら、myFunctionはRecordsetではなく件数を返すようにします。あとはこんな感じかな?
-----------------
'プログレスバーフォーム表示
load frm_progressBar
frm_progressBar.show
with frm_progressBar.ProgressBar1
.min = 0
.max = myFunction(ぱらめた)
.value = 0
end with
'件数分だけぐるぐる回す(.max-1しているのは0から開始しているため)
for i = 0 to frm_progressBar.ProgressBar1.max-1 step 1
'レコード取得
<<処理ロジック>>
'プログレスバーをびょーんって伸ばす
frm_progressBar.ProgressBar1.value += 1
next i
-----------------
さらにやるなら、frm_progressBarに「let property」でプロパティを作り、それを使ってカウントアップやmin/max値を設定できるようにするくらいです。
回答ありがとうございます。
説明が不足していました。
関数myFunctionはDBにクエリを投げて結果を取得する為に作成しました。
レコードの件数がそれなりに多いので↓の行でそれなりに時間がかかってしまいます。
p_rs.Open query, con, adOpenStatic ...(*)
そこで処理の進捗をグラフィカルに表示できないか?と思いこのような質問をした次第です。
つまり、回答者様がおっしゃるように
>1件処理したらプログレスバーをびょーんって伸ばしたいということです。
関数myFunction中でレコード件数を取得しているのは、プログレスバーのmaxに利用するためだけであり、
実際の処理では必要ありません。(質問の際に分離するのを忘れていました。)
レコード取得の進捗と、カウンタを繋げてFOR文を書けば良いというのも理解できます。
わからないのはループの中に「レコード1件の取得」をどのように記述すれば良いのか、ということです。
上記(*)のような書き方であれば、一行で全件のレコードを取ってきてしまうと思います。
No.2
- 回答日時:
なるほど理解しました。
自作関数はmax件数を取得するだけなのですね。
RecordsetオブジェクトにRecordCountというのがありますので、これで件数を取得することができます。
→http://www.microsoft.com/japan/msdn/library/defa …
なので、自作関数でselect count(*) ~ではなく、select 項目名~でRecordsetを取得しましょう。で、maxプロパティにはq_rs.RecordCountで件数を設定し、あとは参考URL(vbaですが、基本的に一緒です)にあるとおり
Do Until RS.EOF
debug.pring RS!フィールド名
RS.MoveNext
Loop
でReccordsetのEOFまでまわせばOKです。
参考URL:http://www.geocities.jp/cbc_vbnet/ADO/recordset. …
お礼が遅くなってしまいました。
どうにも私の説明のしかたがまずかったみたいで、お手数ばかりかけてしまいました。
要はDBにクエリを投げて、それを取得するまでにかかる時間を計りたかったのです。
あの後資料をみれば、やはり無理っぽいとのことでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと タイムマシンを破壊すべきか。
これはディベートの論題だと仮定したうえでの回答お願いします。あなたは、その末にタイムマシンを壊してしまうのか、使い道を探すのかどうかを考えてもらいたいです。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VB6で、長い時間かかる処理実行中の表示の工夫について
Visual Basic(VBA)
-
VB6のプロジェクトロードエラーについて
Visual Basic(VBA)
-
フォームを開く時のイベント処理
Visual Basic(VBA)
-
-
4
VBでグローバル変数を宣言するには
Visual Basic(VBA)
-
5
プログレスバーの表示方法
Visual Basic(VBA)
-
6
【VB6.0】 あるフォームから他のフォームへ値を受け渡したい
Visual Basic(VBA)
-
7
VB6.0のデザイン時 コントロールの移動 Vista
Visual Basic(VBA)
-
8
[VB6] フォームを閉じる方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
固有レコード識別子の選択とは
-
カレントレコードが無い事を判...
-
Line Inputで文字化け(助けて...
-
差し込み印刷のレコード数について
-
Access でレコードセレクタが押...
-
ファイル書込みで一行もしくは...
-
[VBA] ADOの Clone と AddNew
-
DataGridViewの、選択されてい...
-
レコードセット(ADO.Recordset)...
-
ヘッダレコードとトレーラレコ...
-
COBOLでのランダムアクセス
-
ADO VBA 実行時エラー3021
-
アクセスでレポートの1印刷内...
-
ACCESSで大量の更新を行うと「...
-
レコードが存在しなかった場合
-
エラー番号=5 制約を有効にで...
-
[VB6]プログレスバーコントロー...
-
Excel VBA読み込みで文字化けが
-
ADODCとデータグリッドを連動さ...
-
ワードの差込印刷で教えて下さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ADO VBA 実行時エラー3021
-
レコードが存在しなかった場合
-
カレントレコードが無い事を判...
-
ファイル書込みで一行もしくは...
-
アクセスでレポートの1印刷内...
-
差し込み印刷のレコード数について
-
DataGridViewの、選択されてい...
-
レコードセット(ADO.Recordset)...
-
DataGridViewの内容をDBに反映...
-
Access でレコードセレクタが押...
-
固有レコード識別子の選択とは
-
Access を×ボタンで閉じ...
-
[VBA] ADOの Clone と AddNew
-
ACCESSで大量の更新を行うと「...
-
データセットのレコード更新が...
-
ワードの差込印刷で教えて下さ...
-
ヘッダレコードとトレーラレコ...
-
JSPのNULLレコード表示について...
-
サブフォームに新規レコードを...
-
VB6.0のIsNull関数に相当するもの
おすすめ情報