2009-07-27 30 views
1

我在调用ADO UPDATE方法的传统ASP类中有以下子例程。我正在使用ODBC驱动程序5.1使用MySQL数据库。ASP错误“密钥列信息不足或不正确。”当更新mySQL

如果我所有的子程序我得到以下错误:

Microsoft游标引擎错误“80004005” 键列信息不足或不正确。更新影响了太多的行。

Public Sub Update(table,id_field,id,fields,values) 
    Dim yy 
    Dim strQuery 
    Dim strFields 
    Const adOpenDynamic = 2 
    Const adLockOptimistic = 3 
    Const adCmdText = 1 
    strQuery = "" 
    For yy = LBound(fields) to UBound(fields) 
      strQuery = strQuery & fields(yy) & ", " 
    Next 
    strQuery = Left(strQuery, Len(strQuery) - 2) 
    strQuery = "select " & strQuery & " from " & table & " where " & id_field & "=" & id 
    i_objRS.CursorLocation = 3 
    i_objRS.Open strQuery, i_objDataConn, adOpenDynamic, adLockOptimistic, adCmdText 
    For yy = 0 To UBound(fields) 
      i_objRS(fields(yy)) = values(yy) 
    Next 
    i_objRS.Update 
    i_objRS.Close 
End Sub 

我试图改变CursorLocation属性和开放的参数,但仍无法得到它的工作。我正在更新的表格有一个唯一的自动编号,它是主键。

回答

0

诊断动态创建的SQL首先要检查实际创建的SQL字符串。但是,使用动态游标执行更新并不是获得行更新的好方法。

改为使用ADODB.Command对象并创建Update命令。请注意,不要将这些值连接到创建的SQL命令中。相反,使用参数的地方标记(通常?但我不记得,如果这种变化我的DBengine(我不是一个mySQL BOD)),并添加参数到ADODB.Command参数集合。

+0

如果我使用命令对象,它工作正常。我会暂时坚持这一点。 – 2009-07-29 10:18:28

0

嗯。你需要通过ADO来做到这一点吗?尝试针对连接对象运行查询并查看会发生什么?

相关问题