程序是这样的:点击一个按钮,打开另一个窗体(假设为B窗体),因为B窗体的Load事件一开始就是ADO查询(该查询还是挺费时的,大概好几秒),所以B窗体无法立刻打开,这就给心急的人一种假象,以为是点了那按钮后死机了。请教大侠,如何在查询到打开B窗体前这段时间里给出请等待的提示(进度条也行)

解决方案 »

  1.   

    显示一个窗口,放置虚拟进度的进度条,用timeout的实践作为100%时间来切分,比如IE。VB不支持多线程,可以开一个新的小程序。
      

  2.   

    ADO是支持异步查询的,option参数选择adAsyncExecute,这样就不会假死了
    比如:rs.Open sql,cnn,adOpenStatic, adLockReadOnly, adAsyncExecute
    '如果你要等待返回记录集
    do while (rs.State And adStateExecuting) = adStateExecuting
        doevents
        '这里做你想做的事
    loop 
      

  3.   

    你可以把代码放在Form_Activate事件中:这样窗体截稿后执行异步查询,你可以在窗口上加载动画来模拟查询进行中,也可以do...loop中用一个进度条百精确的来模拟进度...Private Sub Form_Activate()
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim sql As String
        
        sql = "......"
        '连接数据库
        set cn=New ADODB.Connection
        cn.open...
        '异步执行查询
        Set rs = New Recordset
        rs.CursorLocation = adUseClient
        rs.Open sql, cn, adOpenStatic, adLockReadOnly, adAsyncExecute
        Do
            DoEvents
            '可以在这儿模拟进度
        Loop Until (rs.State And adStateOpen)
        '记录集返回后关闭动画或模拟进度的代码,或者填充表格的代码放这儿
        print rs.State
        set rs=nothing
        set cn=nothing
    End Sub