2009-07-27 29 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來做到這一點嗎?嘗試針對連接對象運行查詢並查看會發生什麼?

相關問題