在vb中用insert into增加一条记录,15个字段左右,感觉速度非常慢.如果连续输入有较大影响.我把insert into语句放到access中运行没有任何感觉,相当快.都说insert快,为什么在vb中就慢呢,有什么办法解决呢

解决方案 »

  1.   

    Private Sub cmd_Click(Index As Integer)
        select case index
            case 0
                SqlTxt = "insert into tbjl(编码1,名称1,编码1,名称2,编码2,名称3,编号3,姓名,品种, 标识,数量,标准,金额,费用,发票号,投保序号,备注) "
                SqlTxt = SqlTxt & "values('" & DwBm & "','" & DwMc & "','" & Cbm & "','" & Cmc & "','" & Zbm & "','" & Zmc & "','" & NewNh & "','" & txtText1(4) & "','麦子','"
                SqlTxt = SqlTxt & txttext2(0) & "','" & txttext2(1) & "','" & txttext2(2) & "','" & txttext2(3) & "','" & txttext2(4) & "','" & txttext2(5) & "','" & txtPh & "','" & txttext2(6) & "')"
                ExecuteSQL (SqlTxt)
        end select
    end sub第一次增加记录和第二次没有区别
    下面为executesql函数
    Public Function Connectstring() As String
        Connectstring = "provider=Microsoft.Jet.OLEDB.4.0;Data source =" & App.Path & "\baoxian_db.mdb" & ";Persist Security Info=False"
    End FunctionPublic Function ExecuteSQL(ByVal Sql As String) As ADODB.Recordset
        Dim MyCon As Connection
        Dim MyRecordset As Recordset
        
        Set MyCon = New Connection
        MyCon.CursorLocation = adUseClient
        MyCon.ConnectionString = Connectstring()
        MyCon.Open
        
        Dim strArray() As String
        On Error GoTo Exectuesql_error
        strArray = Split(Sql)
        
        If InStr("INSERT,DELETE,UPDATE", UCase(strArray(0))) Then
           MyCon.Execute Sql
        Else
            Set MyRecordset = New ADODB.Recordset
            MyRecordset.Open Trim(Sql), MyCon, adOpenKeyset, adLockOptimistic
            Set ExecuteSQL = MyRecordset
        End If
        
    exectuesql_exit:
        Set MyRecordset = Nothing
        Set MyCon = Nothing
        Exit Function
        
    Exectuesql_error:
            MsgBox "查询错误: " & Err.Description
            Resume exectuesql_exit
    End Function
      

  2.   

    17个字段的记录,为什么增加进去还老慢,这17个字段的取值不是变量就是文本框.使用select查询数据几千条记录时反应正常,相当快.vb里添加记录就是慢,大概要1.5秒,能看出什么问题吗?
      

  3.   

    你要是觉得慢,你可以算下时间
    在 ExecuteSQL (SqlTxt)  前后用 timer()函数计算下没看出有什么问题
      

  4.   

    看不出你代码为什么慢
    不过我想,你的那个ExecuteSQL函数可以改一下,把其中的MyCon也单独做为一个对象返回,这样直接用服务器端游标(不要用MyCon.CursorLocation = adUseClient),可能会快一点吧...
      

  5.   

    或者你注释掉MyCon.CursorLocation = adUseClient
    在Set MyRecordset = New ADODB.Recordset 
    后面加一条
    MyRecordset.CursorLocation = adUseClient