Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Indexiertes MySQL-Feld speichert keinen Wert beim Erstellen/Bearbeiten von Datensätzen über ADO

Ich konnte Ihr Problem mit der 64-Bit-Version des MySQL ODBC 5.3 Unicode-Treibers (5.03.04.00) reproduzieren. Es scheint ein Problem mit ADO-Recordset-Aktualisierungen zu geben, wenn die letzte Spalte in der Tabelle vom Typ TEXT ist . Ich hatte nicht einmal einen Index für userid und ich habe die gleichen Ergebnisse.

Eine mögliche Problemumgehung wäre die Verwendung eines ADODB.Command mit Parametern, um die Einfügung mit Code ähnlich dem folgenden auszuführen:

Dim oConn As ADODB.Connection
Dim cmd As ADODB.Command

Set oConn = New ADODB.Connection
oConn.Open _
        "Driver=MySQL ODBC 5.3 Unicode Driver;" & _
        "SERVER=localhost;" & _
        "UID=root;" & _
        "PWD=whatever;" & _
        "DATABASE=mydb;" & _
        "PORT=3306;" & _
        "DFLT_BIGINT_BIND_STR=1"

Set cmd = New ADODB.Command
cmd.ActiveConnection = oConn
cmd.CommandText = _
        "INSERT INTO phplist_user_user_history " & _
        "(`userid`, `ip`, `date`, `Summary`, `Detail`, `systeminfo`) " & _
        "VALUES (?,?,?,?,?,?)"
cmd.Parameters.Append cmd.CreateParameter("?", adInteger, adParamInput, , 456)
cmd.Parameters.Append cmd.CreateParameter("?", adVarWChar, adParamInput, 255, "")
cmd.Parameters.Append cmd.CreateParameter("?", adDBTimeStamp, adParamInput, 255, Now)
cmd.Parameters.Append cmd.CreateParameter("?", adVarWChar, adParamInput, 255, "cHistory.Subject")
cmd.Parameters.Append cmd.CreateParameter("?", adLongVarWChar, adParamInput, 2147483647, "cHistory.Body")
cmd.Parameters.Append cmd.CreateParameter("?", adLongVarWChar, adParamInput, 2147483647, "Automated syncronization process.")
cmd.Execute

Set cmd = Nothing
oConn.Close
Set oConn = Nothing

Ich habe es von einer Access 2010-Datenbank aus getestet und es hat bei mir gut funktioniert.