[R-es] consulta por varTypes de sqlSave en RODBC

Jose Ramirez Costa joseramirezcosta en gmail.com
Jue Jul 13 16:52:51 CEST 2017


Gracias Javier! Ahi encontre la solucion, se puede usar de la siguiente
forma:

varTypes = c(nomvrevariable1="datetime", nombrevariable2="varchar (2)")

Era tan sencillo mi error que no podia encontrar la forma, escribia los
nombres de las variables sin comillas y los tipos de variables con
comillas, o cosas asi.

Muchas gracias por tu tiempo y disposicion, espero q mi consulta sirva para
otros.

Abrazo!

El 13 de julio de 2017, 11:11, Javier Marcuzzi <
javier.ruben.marcuzzi en gmail.com> escribió:

> Mira algo de esto, puede ser útil, para no enviar directamente en lenguaje
> SQL (dos caminos para lo mismo, porque R lo escribe a SQL, salvo SQL server
> 2016, el resto no entendería R). Disculpas por enviarlo muy en bruto, falta
> trabajo al código, pero como usted ahora está conectado es lo más rápido
> que puedo hacer.
>
>
>
> sqlSave(dbCon, dataSet, dbTable, append=TRUE, rownames=FALSE,
> varTypes=varTypes, verbose=T)
>
>
>
> tmp <- sqlColumns(channel, correctTableName)
>
> varTypes = as.character(tmp$TYPE_NAME)
>
> names(varTypes) = as.character(tmp$COLUMN_NAME)
>
>
>
> o
>
>
>
> varTypes = c(somecolumn="datetime")
>
>
>
> Javier Rubén Marcuzzi
>
>
>
> *De: *Jose Ramirez Costa <joseramirezcosta en gmail.com>
> *Enviado: *jueves, 13 de julio de 2017 10:57
>
> *Para: *Javier Marcuzzi <javier.ruben.marcuzzi en gmail.com>
> *CC: *r-help-es <r-help-es en r-project.org>
> *Asunto: *Re: [R-es] consulta por varTypes de sqlSave en RODBC
>
>
>
> Hola Javier, si no estoy entendiendo mal, lo q deseo hacer no se trata de
> configurar los parametros SQL, sino solo de colocar un vector en el
> argumento VarTypes de la funcion sqlSave.
>
>
>
> El manual especifica esa opcion, pero no da ningun ejemplo de como usarla.
>
>
>
> *varTypes an optional named character vector giving the DBMSs datatypes to
> be used for*
>
> *some (or all) of the columns if a table is to be created.*
>
>
>
> En este pdf https://cran.r-project.org/web/packages/RODBC/
> vignettes/RODBC.pdf, solo se hace referencia al argumento en este parrafo
>
>
>
> *4.1 Data types when saving a data frame When sqlSave creates a table,
> there is some choice as to the SQL data types used. The default is to
> select the SQL data type from the R type via the typeInfo argument to
> sqlSave. If this is not supplied (usual) a default mapping is looked up
> using getSqlTypeInfo() or by interrogating sqlTypeInfo(). This will almost
> always produce the correct mapping for numeric, integer and character
> columns of up to 254 characters (or bytes). In other cases (include dates
> and date-times) the desired SQL type can be specified for each column via
> the argument varTypes, a named character vector with names corresponding to
> (some of) the names in the data frame to be saved.*
>
>
>
> Muchas gracias por tu ayuda y disculpa si no entiendi bien alguna de tus
> preguntas.
>
>
>
> Saludos
>
>
>
> El 13 de julio de 2017, 10:39, Javier Marcuzzi <
> javier.ruben.marcuzzi en gmail.com> escribió:
>
> Estimado Ramirez Costa
>
>
>
> Si usted desea configurar los parámetros SQL podría escribirlos en
> lenguaje SQL y enviarlos por medio de una consulta, por otro lado ¿el
> manual especifica la opción que usted desea utilizar? Posiblemente está
> documentado (no lo se).
>
>
>
> Javier Rubén Marcuzzi
>
>
>
> *De: *Jose Ramirez Costa <joseramirezcosta en gmail.com>
> *Enviado: *jueves, 13 de julio de 2017 10:31
> *Para: *Javier Marcuzzi <javier.ruben.marcuzzi en gmail.com>
> *CC: *r-help-es <r-help-es en r-project.org>
> *Asunto: *Re: [R-es] consulta por varTypes de sqlSave en RODBC
>
>
>
> Buen dia Javier, muchas gracias por tu ayuda y el script compartido.
>
>
>
> Me va a servir como ayuda para seguir aprendiendo sobre RODBC pero no
> encuentro una solucion para este problema puntual de poder definir el tipo
> y ancho de las variables, q segun creo se hace con el argumento varTypes.
>
>
>
> Si alguien tien algun ejemplo donde haya usado la SqlSave y VarTypes, me
> sera de gran ayuda.
>
>
>
> Abrazo a todos
>
>
>
> 2017-07-12 15:33 GMT-03:00 Javier Marcuzzi <javier.ruben.marcuzzi en gmail.
> com>:
>
> Estimado José Ramirez Costa
>
>
>
> Yo tengo un archivo donde guarde lo que realizaba cuándo aprendía, habría
> que ver si actualmente es así o hay cambios, por lo que usted dice creo que
> usa sql server, si no es así busco el archivo para otras bases de datos. Si
> es sqlserver se podría realizar con la ayuda de visual studio, hay una
> integración al respecto.
>
>
>
> Le copio y pego la forma que utilicé para aprender, espero que le sea útil.
>
>
>
>
>
> cn <- odbcDriverConnect(connection="Driver={SQL Server Native Client
> 11.0};
>
>                         server=localhost;
>
>                         database=far;
>
>                         trusted_connection=yes;")
>
> # DESKTOP-HEO7TLB
>
> cosa <- sqlFetch(cn,'cosa')
>
> cosa
>
>
>
> A <- c(1,2,3,4)
>
> B <- c(4,5,6,7)
>
> dat <- data.frame(A,B)
>
> colnames(dat) <- c("A", "B")
>
> sqlSave(cn, dat, tablename = "tblTest", rownames=FALSE, append=TRUE)
>
>
>
> cosa <- c("auto", "bici", "libro")
>
> cantidad <- c(2,4,7)
>
> dat <- data.frame(cosa, cantidad)
>
>
>
> colnames(dat) <- c("A", "B")
>
> sqlSave(cn, dat, tablename = "cosa",
>
>         rownames=FALSE,
>
>         colnames=TRUE,
>
>         append=TRUE,
>
>         addPK=TRUE,
>
>         fast=TRUE)
>
>
>
> # http://stackoverflow.com/questions/36202414/r-download-image-using-rvest
>
> # https://www.r-bloggers.com/parameterized-sql-queries/
>
> # https://cran.r-project.org/web/packages/RODBCext/
> vignettes/Parameterized_SQL_queries.html
>
>
>
> library(RODBCext)
>
> filterData <- data.frame('cosa'= c('libros'))
>
> data <- sqlExecute(cn, "SELECT * FROM prueba WHERE cosa = ?", filterData,
> fetch = TRUE)
>
> if(length(data$id) == 0)
>
> {
>
>   print ("no hay elementos")
>
> } else
>
> {
>
>   print ('hay elementos')
>
> }
>
>
>
> # generar lo que se inserta o actualiza
>
> id <- 1
>
> cosa <- "casa"
>
> cantidad <- 3
>
> valor <- 4.5
>
> dfDato <- data.frame(id,cosa, cantidad,valor)
>
> colnames(dfDato) <- c("id", "cosa","cantidad","valor")
>
> print(dfDato)
>
> insertar <- function(dfDato) {
>
>   dfNuevoDato <- data.frame(dfDato$cosa, dfDato$cantidad, dfDato$valor)
>
>   colnames(dfNuevoDato) <- c("cosa","cantidad","valor")
>
>   # Parameterized query
>
>    sqlExecute(cn, "INSERT INTO prueba
>
>               (cosa
>
>                 ,cantidad
>
>                 ,valor)
>
>               VALUES (?,?,?)", dfNuevoDato)
>
>   print(dfNuevoDato)
>
> }
>
>
>
> # comprobar si existe el id
>
> filterId <- data.frame('id'= dfDato$id)
>
> data <- sqlExecute(cn, "SELECT * FROM prueba WHERE id = ?", filterId,
> fetch = TRUE)
>
> if(length(data$id) == 0)
>
> {
>
>   print ('no existe el id')
>
>   insertar(dfDato)
>
> }else{
>
>   print('Existe el id')
>
>   # buscar la palabra si existe
>
>   filterPalabra <- data.frame('cosa'=dfDato$cosa)
>
>   data <- sqlExecute(cn, "SELECT * FROM prueba WHERE cosa like ?",
> filterPalabra, fetch = TRUE)
>
>   print(data)
>
>     if(length(data$cosa) > 0)
>
>     {
>
>       print ('existe debo actualizar')
>
>      # query <- "UPDATE cakes SET price = ? WHERE cake = ?"
>
>        query <- "UPDATE prueba
>
>        SET cosa = ?
>
>        ,cantidad = ?
>
>        ,valor = ?
>
>        WHERE id = ?"
>
>        sqlExecute(cn, query, dfDato)
>
>       print(dfDato)
>
>     }else{
>
>       print ('puedo insertar')
>
>       insertar(dfDato)
>
>     }
>
>   }
>
> #http://finzi.psych.upenn.edu/R/library/RODBC/html/sqlSave.html
>
>
>
> Javier Rubén Marcuzzi
>
>
>
> *De: *Jose Ramirez Costa <joseramirezcosta en gmail.com>
> *Enviado: *miércoles, 12 de julio de 2017 12:33
> *Para: *r-help-es <r-help-es en r-project.org>
> *Asunto: *[R-es] consulta por varTypes de sqlSave en RODBC
>
>
>
> Buen dia compañerxs de R, les traigo una pregunta bastante especifica.
>
>
>
> En el trabajo me estan requiriendo el uso de SQL, asi q estoy aprendiendo a
>
> usarlo desde R, con el paquete RODBC.
>
>
>
> Mi problema puntual es que al crear una tabla en el servidor SQL a partir
>
> de un data frame en R (usando la funcion sqlSave) no puedo definir el tipo
>
> de variables que quiero usar en el data frame.
>
>
>
> Segun entiendo esto se deberia poder hacer con el parametro vartypes, pero
>
> hasta ahora solo he podido cargar un vector q dice el tipo de variables
>
> (varchar, int, o numeric) pero no he podido indicarle el ancho q tiene cad
>
> variable.
>
>
>
> Esto en SQL se escribiria algo asi:
>
> [ACTA] int,
>
> [APENAC] varchar(25),
>
> [PESONAC] numeric(4,0),
>
>
>
> Alguien uso vartypes de esta forma?
>
>
>
> Desde ya gracias por el tiempo y un abrazo a todxs.
>
>
>
> --
>
> "*“Que tudo pesado se torne leve, todo corpo, dançarino, e todo espírito,
>
> pássaro.” *
>
> *Nietzsche, "Assim Falou Zaratustra”.*
>
>
>
>                 [[alternative HTML version deleted]]
>
>
>
> _______________________________________________
>
> R-help-es mailing list
>
> R-help-es en r-project.org
>
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
>
>
>
>
>
> --
>
> "*“Que tudo pesado se torne leve, todo corpo, dançarino, e todo espírito,
> pássaro.” *
> *Nietzsche, "Assim Falou Zaratustra”.*
>
>
>
>
>
>
>
> --
>
> "*“Que tudo pesado se torne leve, todo corpo, dançarino, e todo espírito,
> pássaro.” *
> *Nietzsche, "Assim Falou Zaratustra”.*
>
>
>



-- 
"*“Que tudo pesado se torne leve, todo corpo, dançarino, e todo espírito,
pássaro.” *
*Nietzsche, "Assim Falou Zaratustra”.*

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es