Tengo algunas dificultades para insertar un marco de datos en una base de datos mySql usando RODBC. A continuación se muestra el código que estoy usando:Problemas con RODBC sqlSave
data <- data.frame(analysedDataID=c(1,2,3), plateWell=c("a","b","c"), screenPlateOrder=c(1,2,3), wellData=c("A","B","C"))
con <- odbcConnect(DSN, uid="user_id", pwd="some_password")
query <- sqlSave(con, data, tablename = 'wellAnalysedDataTable', rownames=FALSE, append=TRUE)
Cuando trato de ejecutar este me sale el siguiente mensaje de error:
Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test, :
missing columns in 'data'
Aquí está la tabla específica que estoy tratando de insertar los datos en:
+------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+-------------+------+-----+---------+-------+
| analysedDataID | int(10) | YES | | NULL | |
| plateWell | varchar(10) | YES | | NULL | |
| screenPlateOrder | int(10) | YES | | NULL | |
| wellData | varchar(30) | YES | | NULL | |
+------------------+-------------+------+-----+---------+-------+
estoy muy confundido en este punto ya que he leído la documentación una y otra vez, pero simplemente no puedo conseguir que esto funcione. ¡Cualquier ayuda sería muy apreciada!
¡Salud!
¡Gracias! Agregué los cambios que sugirió y ya no parece haber ningún problema con el caso. Sin embargo sigo recibiendo el mensaje de error:
'index column(s) analysedDataID plateWell screenPlateOrder wellData not in data frame'
La declaración que estoy ejecutando que genera esto es:
sqlUpdate(con, data, tablename="wellAnalysedDataTable", index=c("analysedDataID", "plateWell", "screenPlateOrder", "wellData"))
esto no tiene ningún sentido para mí como las columnas ya están en el marco de datos con los mismos colnames.
Hola GSK3. Gracias por su respuesta. Lo intenté con los cambios sugeridos, pero aún así no pude hacerlo funcionar. Sigo recibiendo otro mensaje de error que dice: "no se puede agregar a la tabla 'wellanalyseddatatable'". Noté que la variable de nombre de tabla parece convertir el carácter de entrada en minúsculas, lo que significa que no coincide con la tabla en la que quiero insertar el marco de datos. ¿Tienes alguna idea de cómo podría hacerlo sensible a mayúsculas y minúsculas? Traté de mirar la documentación para RODBC, pero no parece mencionarlo. – hberven1
Si escribe 'odbcUpdate', obtendrá la definición completa de la función. Desde allí, puede ver que el canal tiene un atributo llamado "caso", que se configura como superior o inferior. No estoy seguro de por qué no hay una opción de "preservar", pero es probable que sobrescriba odbcUpdate con su propia versión de la función. La línea correspondiente es 'cnames <- switch (attr (canal," caso "), nochange = cnames, toupper = toupper (cnames), tolower = tolower (cnames))' –