Foro de debate

RODBC y funciones

RODBC y funciones

de Ignacio Bocos -
Número de respuestas: 1
Buenos días, estoy realizando mi PFC y me he topado con este problema.

Estoy escribiendo una función, que tiene que acceder previamente a una BD SQLite por medio de la librería 'RODBC'.

El código es el siguiente:

PUP_puntual <- function (con, coordX, coordY, fecha_pup)
{
#con es la conexión creada con RODBC
muestra <- sqlQuery(con, "select * from captura where fecha_jul <= julianday(fecha_pup)")
}


PUP_puntual(con, 2,3, '2006-07-30')

Al ejecutar este código salta el siguiente error:

[RODBC] ERROR: Could not SQLExecDirect" "HY000 1 no such column: fecha_pup (1)

Entiendo que este problema viene dado porque no está utilizando bien la variable 'fecha_pup' de la cabecera. Es decir, no está haciendo dinámica la query e intenta buscar una columna con el nombre 'fecha_pup' en la tabla captura, obviando que es una variable de entrada de la función.

¿Sabéis cómo puedo hacer que interprete correctamente la variable 'fecha_pup'? Sé que en SAS se hace por medio del carácter & delante del nombre de la variable (&fecha_pup. sería en este caso) pero no sé si existe algo parecido en R.

También sé que por medio de los prepared statement podría realizar justamente lo que quiero, pero no sé si los soporta RODBC, ¿lo sabéis vosotros? ¿habéis utilizado alguna vez prepared statements en R?

Muchas gracias por anticipado, este foro está realizando una gran labor.
En respuesta a Ignacio Bocos

Re: RODBC y funciones

de Ignacio Bocos -
Por si os tenéis que enfrentar a este problema, os dejo cómo he salvado esta dificultad.

Dado que no he encontrado nada potable acerca de prepared statements en RODBC(lo cual no implica que no se puedan realizar), lo que he hecho es 'construírmelo' por mi cuenta de la siguiente forma:

PUP_puntual <- function (con, coordX, coordY, fecha_pup)
{
 
stmt <- paste("select * from captura where fecha_jul <= julianday('",fecha_pup,"')",sep='')
muestra <- sqlQuery(con, stmt)
}

De esta forma simulo un binding por medio de la concatenación de las cadenas que veis anteriormente.

De todas formas, quedan abiertas las preguntas que os hacía antes acerca de la gestión de variables, prepared statements.

Muchas gracias.