2009-07-27 4 views
1

Ich habe die folgende Subroutine in einer klassischen ASP-Klasse, die die ADO UPDATE-Methode aufruft. Ich benutze meine SQL-Datenbank mit ODBC-Treiber 5.1.ASP-Fehler "Schlüsselspalte Informationen sind unzureichend oder falsch." Beim Aktualisieren von mySQL

Wenn ich die alle Subroutine ich folgende Fehlermeldung erhalten:

Microsoft Cursor Engine Fehler ‚80004005‘ Schlüsselspalteninformationen unzureichend oder falsch ist. Zu viele Zeilen waren vom Update betroffen.

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 

Ich habe versucht, die Eigenschaft Cursor und die offenen Parameter zu ändern, aber es immer noch nicht arbeiten bekommen. Die Tabelle, die ich aktualisiere, hat eine eindeutige Auto-ID, die der Primärschlüssel ist.

Antwort

0

Das erste, was bei der Diagnose von dynamisch erstelltem SQL zu tun ist, besteht darin, die tatsächlich erstellte SQL-Zeichenfolge zu untersuchen. Die Verwendung eines dynamischen Cursors zum Ausführen von Aktualisierungen ist jedoch kein guter Weg, um ein Update für eine Zeile durchzuführen.

Verwenden Sie stattdessen ein ADODB.Command-Objekt, und erstellen Sie einen Aktualisierungsbefehl. Hinweis: Verketten Sie die Werte nicht im erstellten SQL-Befehl. Verwenden Sie stattdessen Parameter-Platzmarken (normalerweise? Aber ich kann mich nicht erinnern, ob das meine DBengine (ich bin kein mySQL-BOD)) und Parameter zur ADODB.Command -Parametersammlung hinzufügen.

+0

Wenn ich das Befehlsobjekt verwende, funktioniert es gut. Ich bleibe nur für eine Weile dabei. –

0

Hmm. Müssen Sie dies über ADO tun? Versuchen Sie, die Abfrage für ein Verbindungsobjekt auszuführen, und sehen Sie, was passiert?