要用异步查询 Option ExplicitPrivate WithEvents rs1 As ADODB.RecordsetPrivate Sub Command1_Click() ... Set rs1 = New ADODB.Recordset rs1.Open sql, conn, adOpenKeyset, adLockOpt, adAsyncExecute End SubPrivate Sub rs1_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) ProgressBar1.Value = ProgressBar1.Max End SubPrivate 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
Option ExplicitPrivate Sub Command1_Click()
Timer1.Enabled = True
' ....... '其它代码
End SubPrivate Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 5000
End SubPrivate Sub Timer1_Timer()
Timer1.Enabled = False
ProgressBar1.Value = (ProgressBar1.Max + ProgressBar1.Min) / 2
DoEvents
End Sub
Dim StartTm&, kk&, PerCent%
Private Sub Form_Load()
Timer1.Interval = 100
Timer1.Enabled = False
ProgressBar1.Min = 0
ProgressBar1.Max = 10
End SubPrivate Sub Command1_Click()
StartTm = GetTickCount
ProgressBar1.Value = 0
Timer1.Enabled = True
End SubPrivate Sub Timer1_Timer()
kk = Int((GetTickCount - StartTm) \ 1000)
ProgressBar1.Value = kk
PerCent = Int(kk / ProgressBar1.Max * 100)
Me.Cls: Print Str(PerCent) & "%"
If PerCent >= 100 Then
Timer1.Enabled = False
MsgBox "满啦"
End If
End Sub
首先先谢谢您写了这么长的代码给我!情况是这样的:我把您的代码和一段ADO查询的代码放在同一个按钮单击事件里(您这代码放在前头),当我单击那按钮后,后台在进行ADO查询,而前台的进度条没动,当查询一结束,进度条一下变成满格并跳出“满啦”(这个提示很好玩),进度条是一下变的,中间没有过渡的效果。也许是我本身这个思路有问题,ADO查询真不能这样放进度条吗
小弟现在在 rs1.open sql... 这语句的下面加了这两行:ProgressBar1.Max = rs1.RecordCount
ProgressBar1.Value = ProgressBar1.Value + 1结果进度条不动,一点都不动,我地方加对了吗
应该在循环读取的过程中加 读一笔便加1
哦这样啊,那可能这法子不适合我的,我的查询过程只有一句代码
rs1.Open sql, conn, adOpenKeyset, adLockOptimistic没有循环过程呵呵
rs1.Open sql, conn, adOpenKeyset, adLockOpt
你这是开档那你到底在那里处理数据?
for i=0 to rs.recordcount-1
aa=rs.fields(0) & ........
print aa
ProgressBar1.Value = ProgressBar1.Value + 1
rs.move next
next i
for i=0 to rs.recordcount-1
aa=rs.fields(0) & ........
print aa
ProgressBar1.Value = ProgressBar1.Value + 1
rs.move next
next i
for i=0 to rs.recordcount-1
aa=rs.fields(0) & ........
print aa
ProgressBar1.Value = ProgressBar1.Value + 1
rs.move next
next i
Option ExplicitPrivate WithEvents rs1 As ADODB.RecordsetPrivate Sub Command1_Click()
...
Set rs1 = New ADODB.Recordset
rs1.Open sql, conn, adOpenKeyset, adLockOpt, adAsyncExecute
End SubPrivate Sub rs1_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
ProgressBar1.Value = ProgressBar1.Max
End SubPrivate 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
出错提示是:对象关闭时,不允许操作然后调试都是指向诸如“If rs1.EOF...”这样的判断语句上,是不是和“cbm666”大哥说的什么开档有关呀
DoEvents
咦,可以啊,不过奇怪,我之前也试过,只不过当时只写了Label1.Visible = True而没写DoEvents
结果是字要等查询结束之后才显示出来,所以我就放弃了。
想不到加了DoEvents就行了,您能告诉我DoEvents的作用是什么吗