窗体里有个 text1,  一个搜索按钮Command1,一个Datagrid1. 当点击按钮时,开始从Access里搜索text1里的内容,然后把搜索结果Recordset放到Datagrid里。
问题是Access比较大,搜索时需要一段时间才能的出结果。现在我想用一个进度条或label来告诉使用者:搜索是在进行中呢,还是已经完成。恳请各位大侠指教。

解决方案 »

  1.   

    因为VB是单线程编程,
    因此在ADODB控件等待结果的过程中他是挂起的,
    如果你的搜索做在一个查询内在语句以后使用DoEvents也不行。
    建议在执行复杂操作之前,
    启用一个新的窗体,使之显示一个重复的进度条,类似于WindowsXP启动时的进度条,
    减少视觉时间就可以了,
    或者你先计算复杂度和CPU空闲预计一个时间,使用新窗口显示进度条。
      

  2.   

    ADO可以异步执行,执行完成以后会发送一个事件.
    但是无法显示数据查询进度.
      

  3.   

    可以,通用段声明:Dim WithEvents rs As ADODB.Recordset在 FetchProgress 事件中:Private Sub rs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
        ProgressBar1.Max = MaxProgress
        ProgressBar1.Value = Progress
        ProgressBar1.Refresh
    End Sub
      

  4.   

    此外,Private Sub rs_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
        ProgressBar1.Value = ProgressBar1.Max
        Label1 = "查询完成。"
    End Sub
      

  5.   

    异步查询,然后用动画什么的演示一下是正在查询的状态:'下面是加二个label来演示
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim sql As String
        Dim s As String
        Dim i As Long, j As Long
        
        sql = "select * from material limit 10000"
        Set cn = New ADODB.Connection
        cn.Open "......."   '连接数据库
         '异步执行查询
        Set rs = New Recordset
        rs.CursorLocation = adUseClient
        rs.Open sql, cn, adOpenStatic, adLockReadOnly, adAsyncExecute
        Label1.Caption = "数据查询中"
        Label2.Move Label1.Left + Label1.Width, Label1.Top
        Label2.Visible = True
        Do
            i = i + 1
            s = String(i, "。")
            If i = 10 Then i = 0
            Label2.Caption = s
            DoEvents
        Loop Until (rs.State And adStateOpen)
        Label2.Visible = False
        Label1.Caption = "查询完毕"
        '............
        Set rs = Nothing
        Set cn = Nothing
      

  6.   

    多谢各位的指点, 
    先试试 of123(所以然)和vbman2003两位大侠的方法。
      

  7.   

     of123(所以然)兄的代码似乎没有对我的程序产生影响,我添加了一个ProgressBar1和一个Label1,但这段代码在测试时对ProgressBar1无任何影响。vbman2003 的代码Label1.Caption = "数据查询中" 这句在查询中不显示。不知问题出在哪?