我尝试使用GIF图片做进度,不过等待的时候,GIF是不动的,有没有其他的方法嘛

解决方案 »

  1.   

    如果是标查询慢,那就处理表索引什么的。如果是绑定数据在界面显示慢,象grid显示,可以把查询到的数据赋予一个窗体记录集变量。然后显示的时候一页一页的临时绑定显示。
      

  2.   


    运行一个DTS涉及到相当多的操作包括数据的导入和导出,数据库方面的优化不用了我现在想知道VB怎么处理这个等待
      

  3.   

    http://topic.csdn.net/u/20081110/23/0e02f032-bc13-4f40-a55a-ab3bfaaf07b1.html
      

  4.   

    家人你好我还有一个问题,我上面说了,我尝试执行的时候,播放GIF来做等待播放GIF是用一个OCX插件,但是在假死的时候,GIF是不动的,不是说OCX的独立的线程嘛为什么也会不动如果把对数据库的操作放到DLL文件当中,会不会出现假死呢,因为我还没试过所以问一下,我来写一个处理数据库的
    DLL,用主程序来调用试试
      

  5.   


    DoEvnts对循环产生的假死有用,但是等待没有任何作用
      

  6.   


    数据代码不好贴,都说了是DTS有数据的导入和导出比如对到EXCEL中,或导到TXT文本中,也有从文件里导出来的,DTS的脚本太多
      

  7.   

    我与了一个Activex EXE的组件,使用ActiveX对数据库进行操作的时候,GIF还是不动为什么啊
      

  8.   

    可以不用GIF,不知道你是用GIF做什么的,能不用就不用,用其他的图片变换代替,这个代替的过程代码也可以放在读取数据库的程序之中,多用一点刷新的功能,呵呵
      

  9.   


    我把代码发出来吧Private Sub Command1_Click()
    Dim t As tt1.cc1              '''测试的一个ACTIVEX.EXE
    Set t = New tt1.cc1
    'MsgBox t.isOK
    t.setConnString ("Driver={SQL Server};Server=数据库服务器;Database=数据库名;UID=用户名;PWD=密码")
    t.EXERS ("SQL语句")  '''就是这一句的时候GIF开始不动了
    End SubPrivate Sub Form_Load()
       Me.GifPlay1.GifPlay ("D:\t.gif")''用来播放GIF的OCX
    End Sub
      

  10.   


    我把代码发出来吧Private Sub Command1_Click()
    Dim t As tt1.cc1              '''测试的一个ACTIVEX.EXE
    Set t = New tt1.cc1
    'MsgBox t.isOK
    t.setConnString ("Driver={SQL Server};Server=数据库服务器;Database=数据库名;UID=用户名;PWD=密码")
    t.EXERS ("SQL语句")  '''就是这一句的时候GIF开始不动了
    End SubPrivate Sub Form_Load()
       Me.GifPlay1.GifPlay ("D:\t.gif")''用来播放GIF的OCX
    End Sub
      

  11.   

    这是ActiveX.EXE的代码Private conn
    Private rs
    Public isOK   '''我想通过这个来判断数据库是否执行完毕
    Public Sub EXERS(s As String)
    isOK = False
    Set rs = conn.execute(s)
    isOK = TrueEnd SubPublic Function getRS()
    getRS = rs
    End FunctionPublic Sub setConnString(s As String)
    conn.open s
    conn.commandtimeout = 0
    End Sub
    Public Sub closeDB()
    conn.Close
    Set conn = Nothing
    End SubPrivate Sub Class_Initialize()
    isOK = False
    Set conn = CreateObject("adodb.connection")
    End Sub
      

  12.   


    实际上,数据库对象,例如记录集是可以带有事件触发的。Dim WithEvents rs As ADODB.Recordset这样的话,可以在下列进度事件中做进度条或其他显示处理:Private Sub rs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)End Sub
      

  13.   

    楼上的方法也见过,不过没试过,应该是个不错的选择:
    1 首先要引用 MDAC 2.5 以上版本。使用 VB 6.0 以上平台。
    2 声明变量如 Dim WithEvents rs As ADODB.Recordset
    3 必须使用客户游标。
    4 打开记录集时必须指定 adAsyncFetch Dim WithEvents rs As ADODB.RecordsetSet rs = New ADODB.Recordset
    With rs
         .CursorLocation = adUseClient
          
         .Properties("Initial Fetch Size") = 2
         .Properties("Background Fetch Size") = 4
         .Open strSQL, cn, , , adAsyncFetch
    End With事件:(当然你可以使用进度条)
    Private Sub rs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
          Debug.Print "Fetch: " & Progress & _
                      "  Max: " & MaxProgress
    End SubPrivate Sub rs_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
          If adStatus <> adStatusOK Then
             Debug.Print "Failed"
             Debug.Print "Error: " & pError.Number & " - " & pError.Description
          Else
             Set DataGrid1.DataSource = pRecordset
             Debug.Print "Done"
          End If
    End Sub另外,楼主的ActiveX.exe写的不对,引用没有事件触发...
      

  14.   

    谢谢各位,我的那个ActiveX是可以用的,只是还是会出现假死的情,我是当成一个类来用的
    我的解决方法是,写一个专门用来显是信息等待界面的ActiveX.EXE,当程序进入等待数据库操作
    之前加载然后主程序隐身,等数据库操作完成后,关闭ActiveX.EXE主程序显示
    虽然不是好的方法,不过还是解决了让客户看到假死的界面了