• 締切済み

プログレスバーで

VB6.0 SQL SERVER WinXPです。 UPDATEの処理の時に進行状況を表示したいのですが うまく動かずバーが真っ白のままです。 教えてください。 lCount = pbAdo.RsRecordCount(rc) With pvBase If rc.EOF = False Then picBar.Width = 0 labCount.Caption = "" labCount.Visible = True End If If rc.RecordCount Then rc.MoveFirst Do While Not rc.EOF sSQL = " UPDATE m_zaiko SET " sSQL = sSQL & " 実在庫数=" & .CvtSQL(dblZaikoSuu, CVT_DBL) sSQL = sSQL & " WHERE " sSQL = sSQL & " 品番=" & .CvtSQL(strHinban, CVT_STR) sSQL, lRet, adExecuteNoRecords + adCmdText picBar.Width = (picProgress.Width / lCount) * i labCount.Caption = CStr(i) & "/" & CStr(lCount) rc.MoveNext i = i + 1 DoEvents Loop Set rc = Nothing End With

みんなの回答

noname#22222
noname#22222
回答No.5

s_husky です。 SQL文と実行文については、全く、私は理解できませんでした。 ????と書いている理由です。 「保存できない」は、その辺りかもです。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.4

保存失敗はSQL文に問題があるのではないでしょうか。 まず下記のようにしてプログレスバーの部分のみ テストしてはどうでしょう。 --- lngRC = rc.RecordCount For i = 1 To lngRC picBar.Width = (picProgress.Width / lCount) * i labCount.Caption = CStr(i) & "/" & CStr(lCount) DoEvents Next

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.3

プログラムをよく確認していませんでした。 DoEvents ちゃんとLoopの前に入っていましたね。 プログレスバーはCommon Controlsを使用せず picのWidthで経過を表示しようとしていると 考えてよろしいでしょうか。 picBar.Width = (picProgress.Width / lCount) * i picProgressのWidthはpicBarのWidthの最大値に なっていますか?

aki08102001
質問者

補足

はい、なっています。

noname#22222
noname#22222
回答No.2

スーツのデザイナーでプログラマではありません。 よって、チクーッと書き換えて検討してみました。 ・DoEvent は、一応、存在するので picBar.Width の値設定が臭いと思います。 ・picBar.Refresh は、必要ないと思いますが。(試していないので確信はありません!) ・ループの回数が決まっているので For-Next 文が確実かと! ・エラートラップが無さそうなのが気になります。 lCount = pbAdo.RsRecordCount(rc) bWidth = picProgress.Width / lCount ' ************************************* Debug.print bWidth ’ bWidthの確認 ' ************************************* picBar.Width = 0 labCount.Caption = "" labCount.Visible = True If lCount > 0 Then   ' ==========   ’ Brgin With   ' ----------   With pvBase     rc.MoveFirst     For I = 1 To lCount       sSQL = " UPDATE m_zaiko SET " & _            " 実在庫数=" & .CvtSQL(dblZaikoSuu, CVT_DBL) & _            " WHERE "            " 品番=" & .CvtSQL(strHinban, CVT_STR)       ????? sSQL, lRet, adExecuteNoRecords + adCmdText       '       ' picBar 更新       '       picBar.Width = bWidth * I       labCount.Caption = CStr(I) & "/" & CStr(lCount)       DoEvents       rc.MoveNext     Next I   ' ---------   ’ End With   ' ========= End If

aki08102001
質問者

補足

やってみましたが 「保存失敗」になってしまいます。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

picBar.Width = (picProgress.Width / lCount) * i の後に DoEvents を入れてみてください。

aki08102001
質問者

補足

やってみましたが「保存失敗」になってしまいました。

関連するQ&A

  • プログレスバー

    picBar.Width = (picProgress.Width / lCount) * i labCount.Caption = CStr(i) & "/" & CStr(lCount) wRs.MoveNext i = i + 1 DoEvents で実行したのですが labCountの方は2/3などとちゃんと表示されるのですが picBarの方は白いままです。 なぜでしょうか? 教えてください。

  • データの抽出で

    VB6.0 SQLSERVER  ID  品名  数量 コード 1  りんご  5  A-1 2  りんご  8  A-2 3 りんご  3  B-1 4  みかん  5  A-2 済みません。うまく説明できないのですが IDとコードの二つを抽出条件にしたいのです。 例えば1とコードA-1なら 1りんご5A-1を IDだけとかコードだけを条件にしたら うまく抽出できるのですが 2つになると「型が一致しません」とエラーになってしまいます。 お願いします。 教えてください。 Public Sub GetYukouzaiSuu(Optional Result As Boolean = True) Dim sSQL As String Dim dYukouzaiSuu As Double sSQL = ("品番=" + pvBase.CvtSQL(txtHinban.Text)) AND ("棚番=" + pvBase.CvtSQL(txtTanaban.Text)) dYukouzaiSuu = pvBase.CvtDbl(pbAdo.Lookup("m_zaiko", "isnull(実在庫数,0)-isnull(引当数,0)", sSQL)) numYukouzaiSuu.Value = MaxValueCheck(dYukouzaiSuu, numYukouzaiSuu.MaxValue) If pvBase.CvtLng(txtSeihinID.Text) = 0 Then If pvBase.StrLen(txtHinban.Text) > 0 Then labHinbanSt.Caption = "!" End If Else labHinbanSt.Caption = "" End If End Sub

  • エクセルVBAラベルの変数?

    エクセル2000VBAにて下記のように作成しました。 With ActiveSheet For i = 4 To 200 If Label1.Caption = .Cells(i, 1) Then For h = 4 To 34 If Label25.Caption = .Cells(2, h) Then For idx = i To 200 If .Cells(idx, 3) = Label21.Caption Then Label6.Caption = .Cells(idx, h) Label7.Caption = .Cells(idx + 2, h) GoTo ラベル2 End If Next idx End If Next h End If Next i ラベル2: For i = 4 To 200 If Label2.Caption = .Cells(i, 1) Then For h = 4 To 34 If Label25.Caption = .Cells(2, h) Then For idx = i To 200 If .Cells(idx, 3) = Label21.Caption Then Label8.Caption = .Cells(idx, h) Label9.Caption = .Cells(idx + 2, h) GoTo ラベル3 End If Next idx End If Next h End If Next i ラベル3: ・・・ End With Label1~5まで同じ処理を行うため 1~5まで変数を使用して簡単にしたいのですが Label(変数)の書き込み方がわかりません? 検索を使用しましたが検索項目が悪いのか なかなか解決しません。 何方か教えていただけないでしょうか?

  • LabelとFrameでプログレスバー VBA

    お世話になっております。 Excel2003を使用しております。 LabelとFrameを使い、プログレスバー表示したいと思っております。 ユーザーフォーム上に、 Label と Frameを置き、 Frameの中にLabelを置きます。 (ここは上手くできているか不安です) UserFormInitializeに With Me.Label1 .Top = 1 .Left = 1 .Width = 1 .BackColor = vbBlue BarWidth = Me.Frame1.Width - 6 End With そして、ためしにコマンドボタンを設置して、 Dim i, 最大値 As Long 最大値 = 100000 BarWidth = Me.Frame1.Width - 6 Do If i = 0 Then Me.Label1.Width = BarWidth * 1 / 最大値 Else Me.Label1.Width = BarWidth * i / 最大値 End If i = i + 1 Loop Until i = 最大値 上記のように記入してみました。 一瞬で表示されてしまいますし、 一度処理が終わっても、青いバーが表示されたままで どうすればいいのか良く分かりません。 最後に Me.Label1.Width = 0 と書けばいいのは分かりましたが… どうしたら、バーの伸び具合をゆっくり見られますか? 回答よろしくお願い致します。

  • 更新処理の進行状況

    VB6.0 SQL SERVER WINXPです。 下のSQLの更新処理の進行状況を表示したいのです。 Form1にCommand1とPicture1,Picture2を貼り付けたのですがこの後が分かりません。教えてください。 sSQL = " UPDATE m_zaiko SET " sSQL = sSQL & " 実在庫数=" & .CvtSQL(dblZaikoSuu, CVT_DBL) sSQL = sSQL & " WHERE " sSQL = sSQL & " 品番=" & .CvtSQL(strHinban, CVT_STR) gSvrADOActiveconnection.Execute sSQL, Affected, adExecuteNoRecords + adCmdText

  • 下記質問Vol.3です

    If intSr = 1 Then intRes = MsgBox("追加してもO.K.ですか?", vbYesNo + vbQuestion) If intRes = vbYes Then With cmd .ActiveConnection = cn .CommandType = adCmdText .CommandText = strSQL .Execute End With Call 状態変化(2) End If Else intRes2 = MsgBox("更新しても良いですか?", vbYesNo + vbQuestion) If intRes2 = vbYes Then With cmd .ActiveConnection = cn .CommandType = adCmdText .CommandText = strSQL2 .Execute End With Call 状態変化(2) End If End If End Sub よろしくお願いします。 関連URL:http://www.okweb.ne.jp/kotaeru.php3?q=160999 http://www.okweb.ne.jp/kotaeru.php3?q=161003

  • VisualStudioでデータベースへの登録ができないので教えてください

    全くのプログラミング初心者ですが、仕事で作らなければならないため困っています。 VisualStudioで以下のように記述しましたが、Accessで作ったデータベースに登録ができません。 どこを直せば良いかアドバイスをお願いします。 'text欄の書き込み処理------------------------------------------ For intX=1 to maxanswer sSQL="select qs_no,ans_no,text from T_qs_ans where id=" & id & " and ans_no =" & intX Set AnsRs=DB.Execute(sSQL) if Not AnsRs.EOF then if AnsRs("text")=1 then 'text欄がある場合 if request("text" & intX)<>"" then 'text欄に書き込みがあった場合 sSQL="insert into T_qs_ans_text (id,qs_no,ans_no,text,kubun,votenum,kubunA) values " sSQL=sSQL & "(" & id & "," & intX & ",'" & request("text" & intX) sSQL=sSQL & "'," & kubun & "," & kubunA & "," & votenum & ")" DB.Execute(sSQL) end if end if end if '-------------------------------------------------------------- Next

  • excel VBA プログレスバーについて(初心者)

    VBA初心者の質問です… excelで入力されている値を用いて、グラフ作成する簡単なデータを作りました。 特に問題なくグラフは出来たのですが、グラフ作成が1つではなく数個同時(順番)に作成しているため時間が掛かってしまいます。 この処理中にプログレスバーを表示出来ればと思い質問を致します。 私なりに調べ(goo内)下記サンプルを発見し、簡単なのでこれを使をうかと思うのですが、UserForm1の処理前にUserForm2.showだけでは UserForm2の処理が終わらないと処理をしません…当然ですよね… 本当に初心者で申し訳ないのですが、UserForm1の処理最中にUserform2のプログレスバーを表示するのにはどうすればいいのでしょうか… 【サンプル】 Private Sub UserForm_Activate() With Label1 .SpecialEffect = 2 .BackColor = vbBlue www = .Width .Width = 0 End With For i = 1 To 1000 Me.Caption = i Label1.Width = i / 1000 * www Me.Repaint Next End Sub また他におすすめなやり方があれば教えて頂ければ… 初心者な質問で申し訳御座いません。

  • エクセル VBA OptionButtonからTextBox

    すいません! OptionButtonなら 下記の記述でエラー表示を 簡単にできるのですが これがOptionButtonではなく TextBoxならどのように変化したら 良いのでしょうか? すいません、教えて下さい! Private Sub 記録_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 6 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "選択されていません" Exit Sub End If If Me.Controls("Combobox" & Cnt).Value = "" Then MsgBox Me.Controls("OptionButton" & Cnt).Caption & " の内容が選択されていません" Exit Sub End If With 記入フォーム .TextBox5.Value = Me.Controls("OptionButton" & Cnt).Caption .TextBox6.Value = Me.Controls("Combobox" & Cnt).Value End With Unload Me End Sub

  • エクセル マクロ オプションボタン

    エクセル上にユーザーフォーム1を作り OptionButton1~4作成 Captionには OptionButton1)あ OptionButton2)い OptionButton3)う OptionButton4)え と名前を付けてOptionButton1をクリックすると TextBox1に”あ”と表示するようにしたいです! お願いします! 教えて下さい。 {宣言は何?} Dim i As Integer Dim s1 As String For i = 1 To 3 Step 1 s1 = Me.Controls("OptionButton" & i).Caption If Me.Controls("optionbutton" & i) = True Then With UserForm1 .TextBox1.Value = s1 End With End If Next i End Sub 上記の記述では無理でした! 教えて下さい。

専門家に質問してみよう