代码很简单 sql用的是2005 请指教:Public Function getConnection()
     '**********************
     '2009-11-11
     '数据库连接
    '**********************
    'Set conn = New adodb.Connection
    ' 用ODBC DSN 建立连接
    conn.ConnectionString = "DSN=wyqtest;UID=sa;PWD=78963214q;"
    If conn.State = 1 Then
        conn.Close
    End If
    conn.Open
End FunctionPublic Function EidtVoucher()
    Dim updatestr1 As String
    Dim updatestr2 As String
    Dim updatestr As String
        updatestr1 = "update  wyq_Vouchers set Voucher_gscode='" & vouchers.Voucher_gscode & "',Voucher_code='" & vouchers.Voucher_code & "',Voucher_date='" & vouchers.Voucher_date & "',Voucher_ram='" & vouchers.Voucher_ram & "',Voucher_abstract1='" & vouchers.Voucher_abstract1 & "',Voucher_abstract2='" & vouchers.Voucher_abstract2 & "',Voucher_abstract3='" & vouchers.Voucher_abstract3 & "',Voucher_abstract4='" & vouchers.Voucher_abstract4 & "',Voucher_abstract5='" & vouchers.Voucher_abstract5 & "',Voucher_subject1='" & vouchers.Voucher_subject1 & "',Voucher_subject2='" & vouchers.Voucher_subject2 & "',Voucher_subject3='" & vouchers.Voucher_subject3 & "',Voucher_subject4='" & vouchers.Voucher_subject4 & "',Voucher_subject5='" & vouchers.Voucher_subject5 & "'"
     updatestr = updatestr1 & "," & updatestr2
    Debug.Print "updatestr>>>>" & updatestr
    Call getConnection
    Call conn.Execute(updatestr)
    conn.Close
End Function
除了上面的更新操作以外,查询,插入,删除均正常而且sql语句再2005中执行正常无问题,请问这是怎么回事

解决方案 »

  1.   

    格式化一下Public Function getConnection()
        '**********************
        '2009-11-11
        '数据库连接
        '**********************
        'Set conn = New adodb.Connection
        ' 用ODBC DSN 建立连接
        conn.ConnectionString = "DSN=wyqtest;UID=sa;PWD=78963214q;"
        If conn.State = 1 Then
            conn.Close
        End If
        conn.Open
    End FunctionPublic Function EidtVoucher()
        Dim updatestr1 As String
        Dim updatestr2 As String
        Dim updatestr As String
        
            updatestr1 = ""
            updatestr1 = updatestr1 & "update  wyq_Vouchers " & vbCrLf
            updatestr1 = updatestr1 & "   set Voucher_gscode    = '" & vouchers.Voucher_gscode & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_code      = '" & vouchers.Voucher_code & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_date      = '" & vouchers.Voucher_date & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_ram       = '" & vouchers.Voucher_ram & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_abstract1 = '" & vouchers.Voucher_abstract1 & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_abstract2 = '" & vouchers.Voucher_abstract2 & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_abstract3 = '" & vouchers.Voucher_abstract3 & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_abstract4 = '" & vouchers.Voucher_abstract4 & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_abstract5 = '" & vouchers.Voucher_abstract5 & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_subject1  = '" & vouchers.Voucher_subject1 & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_subject2  = '" & vouchers.Voucher_subject2 & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_subject3  = '" & vouchers.Voucher_subject3 & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_subject4  = '" & vouchers.Voucher_subject4 & "' " & vbCrLf
            updatestr1 = updatestr1 & "      ,Voucher_subject5  = '" & vouchers.Voucher_subject5 & "' "
        
        updatestr = updatestr1 & "," & updatestr2
        
        Debug.Print "updatestr>>>>" & updatestr
        
        Call getConnection
        Call conn.Execute(updatestr)
        conn.Close
    End Function
      

  2.   

    updatestr2没有了
    导致
    updatestr = updatestr1 & "," & updatestr2 出错
      

  3.   


    这个一定要注意,删除、修改如果忘了where,将是很可怕的杀手
      

  4.   

    相比较insert命令而言,执行update命令本身是比较耗时的,如果如楼主所说这个SQL语句在SQL查询分析器中可以完成,而且执行时间比较长,那么尝试在代码中设置CommandTimeout一个较长时间,默认是30秒...
      

  5.   

    其实调试这类功能时,最好debug.print 出sql语句,在查询分析器中执行试试好些...
      

  6.   

    不好意思各位 updatestr2 实际上就是where语句,因为写的比较乱所以不好意思贴出来。
    debug.print 打出来sql语句运行无误,可以正常执行。
    但是就是在vb程序中执行的时候会报超时错误
      

  7.   

    看一下你的where子句,说不定耗时就是在这个条件上
      

  8.   

    如果查询分析器中可以执行,看看执行的时间是多少。如果时间超长,那么把CommandTimeout=0应该就可以了。
      

  9.   

    楼主先将Call conn.Execute(updatestr)这一句改成DEBUG.PRINT updatestr看看立即窗口里出来的是什么,再将立即窗口里面出来的内容贴到SQL SERVER里面运行一下看看是否能通过
      

  10.   

    确保SQL 语句没有明显错误时,将Timeout时间设置长一些
      

  11.   

    将整个 updatestr 用 Debug.Print 输出,然后用查询分析器执行,看看需要多少时间。
    然后根据这个时间来设置 Timeout。如果时间实在太长,用查询分析器的执行计划分析一下,优化一下 SQL。
      

  12.   

    还可以考虑将这个update操作在数据库中改写为异步执行的存储过程,然后VB调用这个存储过程。
      

  13.   

    你最好把完整的SQL语句粘出来。这样才好分析。
      

  14.   

    上万条数据循环update,超时、、、、