vb应该是单进程的,如果我要执行一个存储过程(就算需要30秒吧),此时程序应该被这个进程占用,进度条将无法实现.................请问哪位高人有解决办法。在线等待!

解决方案 »

  1.   

    用doevents+timer控件或许能实现
      

  2.   

    Public Function FuncGetData(ByVal FromPeriod As String, ByVal ToPeriod As String) As Boolean
        
        Dim cn As ADODB.Connection
        Dim cmd As ADODB.Command
        Dim connStr As String
        
        FuncGetData = False
        
      On Error GoTo ErrHandler
        
        connStr = connStrBudget
        
        Set cn = New ADODB.Connection
        cn.Open connStr
        
        Set cmd = New ADODB.Command
        
        With cmd
            .CommandText = "Proc_MI_Account_Sales_GP"
            .CommandType = adCmdStoredProc
            .CommandTimeout = 120
            .ActiveConnection = cn
            
            .Parameters.Refresh
            .Parameters("@FromPeriod").Value = Replace(FromPeriod, "/", "")
            .Parameters("@ToPeriod").Value = Replace(ToPeriod, "/", "")
        End With
     
        cmd.Execute  '就是這句執行時間太長    FuncGetData = True
        
        Set cmd = Nothing
        Set cn = Nothing
        
    Exit FunctionErrHandler:
        
        Set cmd = Nothing
        Set cn = Nothing
        Err.Raise vbObjectError, "clsGetData - FuncGetData", Err.DescriptionEnd Function
      

  3.   

    cmd.Execute这个语句执行时间过长,DoEvents常用于循环语句中,对于这种不能用吧。
      

  4.   

    With cmd
            .CommandText = "Proc_MI_Account_Sales_GP"
            .CommandType = adCmdStoredProc
            .CommandTimeout = 120
            .ActiveConnection = cn
            
            .Parameters.Refresh
            .Parameters("@FromPeriod").Value = Replace(FromPeriod, "/", "")
            .Parameters("@ToPeriod").Value = Replace(ToPeriod, "/", "")
        End With
     
        cmd.Execute 
        
    改寫成:
    cn.Execute "Proc_MI_Account_Sales_GP " & Replace(FromPeriod, "/", "") & " " & Replace(ToPeriod, "/", ""),,adAsyncExecute
    while cn.State = (adStateOpen Or adStateExecuting)
    StatusBar.Value = Format(StatusBar.Value,"0.0")
    doEvents
    wend