Exportar Consulta SQL de un RecordSet Access

Un gusto nuevamente saludarles, y poder contar con ustedes.

Veran, estoy trabajando en una base de datos de Access 2016, y dentro de mi base de datos, tengo un formulario que estoy realizando unas consultas SQL.

El objetivo es generar las consultas a través de un filtro de fechas que un usuario agrega, y con esto generar un reporte a Excel, pero a la hora de ejecutarle me da el siguiente error: "Existe una expresión con un tipo de datos incorrecto para uno de los argumentos".

Mi código es el siguiente:

 dFechaI = Me.Texto27.Value
 dFechaF = Me.Texto29.Value
 Dim base As Database
 Dim rst As Recordset
 Set base = CurrentDb
 Set rst = base.OpenRecordset("SELECT * FROM Numbers N WHERE (N.Fecha_Creacion)>=#" & Format(dFechaI, "mm/dd/yyyy") & "# And (N.Fecha_Creacion)<=#" & Format(dFechaF, "mm/dd/yyyy") & "#")
 DoCmd.OutputTo acOutputQuery, rst, acFormatXLS, "Contactos_x_Fecha.xls", True
 rst.Close
 Set rst = Nothing
 base.Close
 Set base = Nothing

¿Que estaré haciendo mal?

Me ayudan

Respuesta
3

Lo que te dice Icue es casi todo correcto (encerrar el nombre del objeto con espacios entre comillas no te funcionará en una SQL), pero no resuelve tu problema, pues salvo lo del nombre con espacio, no son errores, sino una forma de programar escribiendo más código.

El error, como te decía, lo tienes en la linea del DoCmd. OutputTo (es la linea que te marcará el depurador), porque si le dices que te exporte una consulta (acExportQuery) va a buscar una consulta que exista "físicamente" en tu BD y un recordset no es una consulta "física". De hecho, ese código estará buscando una consulta que se llame "SELECT * FROM Numbers N WHERE ..."

Para exportar el resultado de un recordset a Excel, puedes recurrir a la automatización, y abrir por código un libro de excel y exportar cada registro de ese recordset (aquí tienes un ejemplo: http://neckkito.xyz/nck/index.php/ejemplos/18-codigo/177-exportar-a-hoja-existente-en-excel ), o más sencillo, crear "físicamente" la consulta antes de exportar, y luego, si no te interesa dejarla, borrarla. El código que haría eso sería:

dFechaI = Me.Texto27.Value
dFechaF = Me.Texto29.Value
Dim qry As QueryDef
Set qry = CurrentDb.CreateQueryDef("temp", "SELECT * FROM [Numbers N] WHERE (N.Fecha_Creacion)>=#" & Format(dFechaI, "mm/dd/yyyy") & "# And (N.Fecha_Creacion)<=#" & Format(dFechaF, "mm/dd/yyyy") & "#")
DoCmd.OutputTo acOutputQuery, "temp", acFormatXLS, "Contactos_x_Fecha.xls", True
DoCmd.DeleteObject acQuery, "temp"
qry.Close
Set qry = Nothing

Un saludo.


¡Gracias!

Muchas gracias a ambos, acabo de probar sus recomendaciones, y me sirvieron de mucho.

Gracias por la pronta ayuda.

Atentamente.

1 respuesta más de otro experto

Respuesta
1

Por partes.

1º No entiendo para que defines variables si van a ser iguales al valor que hay en un cuadro de texto. Deja el propio cuadro.

2º Cuando a un objeto se le pone un nombre separado(lo digo por Numbers N) en el código hay que encerrarlo entre corchete o con comillas

3º ¿Para qué ese criterio de fecha? Para eso tienes Between

4º En Acces, por defecto, si no le dices nada en contra, cuando haces referencia a él, supone que estás hablando de su valor. Sobra lo de value

Mira, si tengo el formulario(lo pongo para que veas lo de Select...) con dos cuadros de texto Texto27 y Texto29

Si escribo dos fechas, como creo que las tienes tu y pulso Enter

El código es

Me.RecordSource = "select * from nocontestar where fecha between #" & Me.Texto27 & "#  and #" & Me.Texto29 & "#"

En tu caso sería más o menos 

Select * from [numbers n] where...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas