Mysql
 sql >> Database >  >> RDS >> Mysql

Il campo MySQL indicizzato non salva il valore durante la creazione/modifica di record tramite ADO

Sono stato in grado di ricreare il tuo problema con la versione a 64 bit del driver Unicode MySQL ODBC 5.3 (5.03.04.00). Sembra essere un problema con gli aggiornamenti di ADO Recordset quando l'ultima colonna nella tabella è di tipo TEXT . Non avevo nemmeno un indice su userid e ho ottenuto gli stessi risultati.

Una possibile soluzione potrebbe essere quella di utilizzare un ADODB.Command con parametri per eseguire l'inserimento utilizzando un codice simile a questo:

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

L'ho testato da un database di Access 2010 e ha funzionato bene per me.