点击按钮后,5秒时间后,ProgressBar走到一半,该怎么写呢?

lzxbl03 2010-01-04 10:17:54
找了很多答案,没找到确切的,请各位给我个代码哈,谢谢啦
...全文
347 33 打赏 收藏 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangfeijie 2010-01-05
  • 打赏
  • 举报
回复
关注
舉杯邀明月 2010-01-05
  • 打赏
  • 举报
回复
不知道这样行不:
Option Explicit

Private Sub Command1_Click()
Timer1.Enabled = True
' ....... '其它代码
End Sub

Private Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 5000
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
ProgressBar1.Value = (ProgressBar1.Max + ProgressBar1.Min) / 2
DoEvents
End Sub

lzxbl02 2010-01-05
  • 打赏
  • 举报
回复
如果在ADO查询的时候,能跳出个窗体或者就直接在本窗体上显示“请稍等...”的提示,小弟也很满足了,我昨晚试着做了,用的是“跳出个提示窗体”,结果新窗体跳出来,查询窗体就不动了!!
lzxbl03 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 tiger_zhao 的回复:]
要用异步查询
VB codeOptionExplicitPrivate WithEvents rs1As ADODB.RecordsetPrivateSub Command1_Click()
...Set rs1=New ADODB.Recordset
rs1.Open sql, conn, adOpenKeyset, adLockOpt, adAsyncExecuteEnd SubPrivateSub rs1_FetchComplete(ByVal pErrorAs ADODB.Error, adStatusAs ADODB.EventStatusEnum, ByVal pRecordsetAs ADODB.Recordset)
ProgressBar1.Value= ProgressBar1.MaxEnd SubPrivateSub rs1_FetchProgress(ByVal ProgressAsLong, ByVal MaxProgressAsLong, adStatusAs ADODB.EventStatusEnum, ByVal pRecordsetAs ADODB.Recordset)
ProgressBar1.Max= MaxProgress
ProgressBar1.Value= ProgressEnd Sub
[/Quote]

出错提示是:对象关闭时,不允许操作

然后调试都是指向诸如“If rs1.EOF...”这样的判断语句上,是不是和“cbm666”大哥说的什么开档有关呀
lzxbl03 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 cbm666 的回复:]
for ...next 里面加个 Doevents试看
[/Quote]
现在会好一点,前8秒不动,然后用2秒走完,总之比刚才走的时间会长一点呵呵
lzxbl03 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 cbm666 的回复:]
for ...next 里面加个 Doevents试看
[/Quote]
现在会好一点,前8秒不动,然后用2秒走完,总之比刚才走的时间会长一点呵呵
Tiger_Zhao 2010-01-05
  • 打赏
  • 举报
回复
要用异步查询
Option Explicit

Private WithEvents rs1 As ADODB.Recordset

Private Sub Command1_Click()
...
Set rs1 = New ADODB.Recordset
rs1.Open sql, conn, adOpenKeyset, adLockOpt, adAsyncExecute
End Sub

Private Sub rs1_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
ProgressBar1.Value = ProgressBar1.Max
End Sub

Private Sub rs1_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
ProgressBar1.Max = MaxProgress
ProgressBar1.Value = Progress
End Sub
cbm6666 2010-01-05
  • 打赏
  • 举报
回复
for ...next 里面加个 Doevents试看
lzxbl03 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 chen8013 的回复:]
你这种情况只有多线程才能解决。

[/Quote]
听别人说可能要什么异步查询,好像很复杂,我是新手就没去考虑了呵呵
lzxbl03 2010-01-05
  • 打赏
  • 举报
回复
我按您的方法加在print过程中了,会走了,但结果是:ADO查询用了9秒,进度条没动,print成网页的过程用了1秒,进度条“嗖”地迅速走完了,郁闷!!
cbm6666 2010-01-05
  • 打赏
  • 举报
回复
rs.move first
for i=0 to rs.recordcount-1
aa=rs.fields(0) & ........
print aa
ProgressBar1.Value = ProgressBar1.Value + 1
rs.move next
next i
cbm6666 2010-01-05
  • 打赏
  • 举报
回复
rs.move first
for i=0 to rs.recordcount-1
aa=rs.fields(0) & ........
print aa
ProgressBar1.Value = ProgressBar1.Value + 1
rs.move next
next i
cbm6666 2010-01-05
  • 打赏
  • 举报
回复
rs.move first
for i=0 to rs.recordcount-1
aa=rs.fields(0) & ........
print aa
ProgressBar1.Value = ProgressBar1.Value + 1
rs.move next
next i
舉杯邀明月 2010-01-05
  • 打赏
  • 举报
回复
你这种情况只有多线程才能解决。
lzxbl03 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cbm666 的回复:]
晕死........
rs1.Open sql, conn, adOpenKeyset, adLockOpt
你这是开档

那你到底在那里处理数据?
[/Quote]
呵呵不好意思

我的程序是这样的:点击按钮后,开始以上的ADO查询,得到一个记录集rs1,然后把这个记录集用print输出成网页格式,我发觉ADO查询的时间比较久,而print的时候就比较快了,所以才想在查询的时候加个进度条,呵呵
cbm6666 2010-01-05
  • 打赏
  • 举报
回复
晕死........
rs1.Open sql, conn, adOpenKeyset, adLockOpt
你这是开档

那你到底在那里处理数据?
lzxbl03 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cbm666 的回复:]
.max是加在开完档的后面没错

ProgressBar1.Value = ProgressBar1.Value + 1
应该在循环读取的过程中加 读一笔便加1


[/Quote]

哦这样啊,那可能这法子不适合我的,我的查询过程只有一句代码
rs1.Open sql, conn, adOpenKeyset, adLockOptimistic

没有循环过程呵呵
cbm6666 2010-01-05
  • 打赏
  • 举报
回复
.max是加在开完档的后面没错

ProgressBar1.Value = ProgressBar1.Value + 1
应该在循环读取的过程中加 读一笔便加1

lzxbl03 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cbm666 的回复:]
后台在进行ADO查询 你这已经跨界 窗体焦点已被转移 你的思路应该是 Progressbar.max=rs.recordcount

每读一笔数据 ProgressBar1.Value =ProgressBar1.Value + 1
[/Quote]

小弟现在在 rs1.open sql... 这语句的下面加了这两行:

ProgressBar1.Max = rs1.RecordCount
ProgressBar1.Value = ProgressBar1.Value + 1

结果进度条不动,一点都不动,我地方加对了吗
cbm6666 2010-01-05
  • 打赏
  • 举报
回复
后台在进行ADO查询 你这已经跨界 窗体焦点已被转移 你的思路应该是 Progressbar.max=rs.recordcount

每读一笔数据 ProgressBar1.Value =ProgressBar1.Value + 1
加载更多回复(13)

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧