一个用MSCOMM控件接收数据的过程,需要6分钟。当点击的接收数据的按钮后,窗体就停止反应6分钟,这样往往会使用户不耐烦,如何在接收的过程中显示一个进度条,提示总共有多少条数据,接收了多少条,进度为百分之一,还需等等多长时间等信息。
解决方案 »
- VB 对最终用户许可协议的条款为Visual C + +入门版不允许你的可执行此产品创造的再分配。r
- 请教(100):如何在A用户输入新数据后,在B用户登录的时候会提醒B用户这些新数据?请给些思路
- vb中如何实时查询数据库
- 求助关于faxcom.dll的问题。
- 现金求下载控件
- 我使用报表设计器来打印,但我添加数据到数据库中后怎么打印的内容没有增加,急用,在线等
- 求教SQL问题 高手指点谢谢:)
- 请问能不能用编程的方法设置environment.connection的连接的数据库?
- 一个hwnd是不是只能RegisterHotKey一个热键?
- 有个简单的问题问大家一下
- 送分100分:关于MAX的使用问题
- 截取文件夹浏览器中鼠标点击打开某个文件或文件夹的消息的方法!再问获取缩略图的方法!
【例】ProgressBar控件示例。设计一个进度条,用来指示程序操作的进度。
窗体设计界面由一个标签、两个命令按钮以及一个进度条控件组成。
代码编写如下。
Option Explicit
Private Sub cmdCompute_Click()
'统计
Dim sp As Single '完成一个操作所增加的值
Me.MousePointer = vbHourglass
With prgMain
sp = (.Max - .Min) / 6 : .Visible = True : .Value = .Min
lblTip.Caption = "正在进行生产数据统计..."
Call Delay : .Value = sp
Call Delay : .Value = 2 * sp
Call Delay : .Value = 3 * sp
Call Delay : .Value = 4 * sp
Call Delay : .Value = 5 * sp
Call Delay : .Value = .Max
.Visible = False : lblTip.Caption = ""
MsgBox "统计完成!", vbOKOnly, "提示"
End With
Me.MousePointer = vbDefault
End Sub
Private Sub cmdExit_Click()
'退出
End
End Sub
Private Sub Delay()
'延时
Dim i%, j%
For i = 1 To 10000
For j = 1 To 2000
Next j
Next i%
End Sub
Private Sub Form_Load()
'初始化
With prgMain
.Align = vbAlignBottom : .Visible = False
.Min = 0 : .Max = 200
End With
lblTip.AutoSize = True
End Sub
doevents
ProgressBar1.value = i 'i是循环因子,你得自己控制
form2.text1.text="正在接收数据,已完成" & i/(总数)*100 & "%"
大概就这么个样子了
"c.illine,DECODE(d.ORIAVGCOST,null,'0',d.ORIAVGCOST) AS ORIAVGCOST,DECODE(d.BASEAVGCOST,null,'0',d.BASEAVGCOST) AS BASEAVGCOST ,c.ILRSV3" & Chr(13) & Chr(10) & _
"from tmp_uploadprice a,bilsih b,bilsil c,limcmf_avg d " & Chr(13) & Chr(10) & _
"where .........'" Set rs2 = DbsBpcs.OpenRecordset(strSql, dbOpenSnapshot)
intI = 0
ProgressBar1.Visible = True
If rs2.RecordCount > 32767 Then '进度条的值最大支持32767
ProgressBar1.Max = 32767
Else
If rs2.RecordCount = 0 Then ‘找不到记录
rs2.Close
MsgBox "Can't find invoice data !"
ProgressBar1.Visible = False
insert_LIMCSTPCM = False
Exit Function
Else
ProgressBar1.Max = rs2.RecordCount '如果数据集的记录数量小于32767,则将度条的上限设为数据集的记录数量
End If
End If
While Not rs2.EOF
intI = intI + 1 ’滚动进度条
ProgressBar1.Value = intI
'GET CUSTNO
strSql = "select distinct ref_cust as CUSTNO from con_inventory " & Chr(13) & Chr(10) & _
"where IW_WH=" & rs2.Fields(2).Value & " and ITEM_NO='" & rs2.Fields(3).Value & "'"
Set rs3 = DbsBpcs.OpenRecordset(strSql, dbOpenSnapshot)
'GET BASEPRICE
dblBASEPRICE = CDbl(rs2.Fields(0).Value) * dblEXGRATE
'Initialize avg_cost
If Len(Trim$(rs2.Fields(6).Value)) = 0 Then
rs2.Fields(6).Value = 0
End If
If Len(Trim$(rs2.Fields(7).Value)) = 0 Then
rs2.Fields(7).Value = 0
End If
'get new cost
' dblnewcost_b = get_newcost(rs2!price.Value * dblEXGRATE, dblsell_rate, dblcost_rate, rs2!BASEAVGCOST.Value)
'
' dblnewcost_o = get_newcost(rs2!price.Value, dblsell_rate, dblcost_rate, rs2!ORIAVGCOST.Value)
If CDbl(rs2!BASEAVGCOST.Value) * CDbl(rs2!ORIAVGCOST.Value) = 0 Then
dblnewcost_b = CDbl(rs2!PRICE.Value) * dblEXGRATE * dblsell_rate * dblcost_rate
dblnewcost_o = CDbl(rs2!PRICE.Value) * dblsell_rate * dblcost_rate
Else
If CDbl(rs2!BASEAVGCOST.Value) <= CDbl(rs2!PRICE.Value) * dblEXGRATE * dblsell_rate Then
dblnewcost_b = CDbl(rs2!BASEAVGCOST.Value)
dblnewcost_o = CDbl(rs2!ORIAVGCOST.Value)
Else
dblnewcost_b = CDbl(rs2!PRICE.Value) * dblEXGRATE * dblsell_rate * dblcost_rate
dblnewcost_o = CDbl(rs2!PRICE.Value) * dblsell_rate * dblcost_rate
End If
End If
'insert into LIMCSTPCM
strSql = "insert into ......"
DbsBpcs.Execute strSql
rs3.Close
rs2.MoveNext
Wend
rs2.Close
ProgressBar1.Value = 0
ProgressBar1.Visible = False
这样效果好点