ado异步执行问题
这个问题一直困扰着小弟,在网上查找了很久还是没能很好的解决,还是跑到CSDN来求助各位大哥了。问题是这样的,我在VB里面做了个查询执行一个存储过程,因为数据比较多,所以执行的时候稍微有点慢。
原来的写法是这样的:
Private Sub Command1_Click()
'Rds为记录集、Cn为数据库连接、strSQL为要执行的存储过程名
Set Rds = Cn.Execute(strSQL)
'将数据显示到表格里面去
End Sub
但因为比较慢所以有段时间就像卡死了一样。现在想改善一下,例如想达到这样的效果,当点击Command1按钮的时候显示一个进度条,例如,执行SQL完毕的时候,进度条消失,执行将数据显示到表格的代码。
望大家赐教,先谢谢。越详细越好,再次感谢。希望这次能易做图解决这个问题。 --------------------编程问答-------------------- 首先你要告诉大概是多少数量级的数据?1万,10万,还是100万?
其次才有对应的解决办法 --------------------编程问答--------------------
Option Explicit--------------------编程问答-------------------- 首先非常感谢Tiger_Zhao老师的回复,但是我反复测试,点击按钮之后窗体还是会出现卡死的状态,进度条不会动,但显示和隐藏正常,不知道是不想需要其他设置还是怎么回事,还望Tiger_Zhao老师指点,多谢。 --------------------编程问答-------------------- 回soarsoar77老师,数据不多,但是执行慢 我主要是想知道当执行一个语句比较费时的时候如何能有个进度条显示并且不让状体出现卡死状态,谢谢 --------------------编程问答-------------------- 在需要的窗口上加人一个进度条,或者创建一个用于提示进度的窗口 --------------------编程问答--------------------
Private cn As ADODB.Connection
Private WithEvents Rds As ADODB.Recordset
Private Sub Command1_Click()
ProgressBar1.Value = 0
ProgressBar1.Visible = True
Set Rds = New ADODB.Recordset
Rds.CursorLocation = adUseClient
Rds.Open strsql, cn, , , adAsyncFetch
End Sub
Private Sub Rds_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
ProgressBar1.Visible = False
End Sub
Private Sub Rds_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
FetchProgress 是接收数据的进度,适合返回大量数据的场景。
而返回数据之前数据库执行查询的过程是没有进度的。
如果你结果集小但是比较耗时,就需要优化SQL或给表建索引。 --------------------编程问答-------------------- 知道了 谢谢各位
补充:VB , 网络编程