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]]
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
Enviado: miércoles, 12 de julio de 2017 12:33
Para: r-help-es
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
[[alternative HTML version deleted]]
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?.* [[alternative HTML version deleted]]