環境: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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
VB6で、長い時間かかる処理実行中の表示の工夫について
Visual Basic(VBA)
-
配列を関数に渡す方法
Visual Basic(VBA)
-
VBの「As String * 128」とは?
Visual Basic(VBA)
-
-
4
VB6.0のフォーム間の関数呼び出しについて
Visual Basic(VBA)
-
5
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
6
On ErrorでエラーNoが0
Visual Basic(VBA)
-
7
プログレスバーの表示方法
Visual Basic(VBA)
-
8
コモンダイアログコントロールがコンポーネントにありません
Visual Basic(VBA)
-
9
MSDNのコレクションがありません。MSDNを再インストールしてください。
Visual Basic(VBA)
-
10
VB6.0-整数と余りを求める
Visual Basic(VBA)
-
11
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
12
ShellExecuteの使い方について
JavaScript
-
13
コンパイルエラー:ユーザ定義型は定義されていません、と出るのですがどのライブラリファイルかわかりません。
Visual Basic(VBA)
-
14
【VB6.0】 あるフォームから他のフォームへ値を受け渡したい
Visual Basic(VBA)
-
15
VB6.0のデザイン時 コントロールの移動 Vista
Visual Basic(VBA)
-
16
「&HFFFF」「&H1A」とは?
Visual Basic(VBA)
-
17
DoEventsがやはり分からない
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カレントレコードが無い事を判...
-
ADO VBA 実行時エラー3021
-
JSPのNULLレコード表示について...
-
Access でレコードセレクタが押...
-
Access を×ボタンで閉じ...
-
レコードが存在しなかった場合
-
ファイル書込みで一行もしくは...
-
ADOでエクセルからアクセス...
-
ロータスアプローチで、Aのアプ...
-
レコード長を数えてくれる関数
-
Excel VBA読み込みで文字化けが
-
DataGridViewの内容をDBに反映...
-
[VB6]プログレスバーコントロー...
-
[VBA] ADOの Clone と AddNew
-
ACCESSで大量の更新を行うと「...
-
アクセスでレポートの1印刷内...
-
DataGridViewの、選択されてい...
-
レコードセット(ADO.Recordset)...
-
DataGridViewにてセル以外をク...
-
固有レコード識別子の選択とは
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードが存在しなかった場合
-
ADO VBA 実行時エラー3021
-
ファイル書込みで一行もしくは...
-
アクセスでレポートの1印刷内...
-
カレントレコードが無い事を判...
-
差し込み印刷のレコード数について
-
レコードセット(ADO.Recordset)...
-
ワードの差込印刷で教えて下さ...
-
DataGridViewの内容をDBに反映...
-
Access でレコードセレクタが押...
-
DataGridViewの、選択されてい...
-
JSPのNULLレコード表示について...
-
ACCESSで大量の更新を行うと「...
-
[VBA] ADOの Clone と AddNew
-
Access を×ボタンで閉じ...
-
サブレンジ分割されたNDB(富士...
-
ヘッダレコードとトレーラレコ...
-
データセットのレコード更新が...
-
DataGridViewにてセル以外をク...
-
Line Inputで文字化け(助けて...
おすすめ情報