Abrir informe pasando parámetro desde un combobox

Necesito Abrir el informe ya existente, llamado Prueba, pasándole un parámetro desde un cuadro combinado. Para ello, en el evento "después de actualizar" del cuadro combinado, uso la siguiente línea de código:

DoCmd.OpenReport "Prueba", acViewNormal, , "[Niñ]![Fec]=" & Me.Cuadro_combinado32.Value

Para que muestre en el informe Prueba, únicamente los registros que en el campo Fec de la tabla Niñ coincidan con la fecha del Cuadro_combinado32

Me dice:

Se ha producido el error '3075' en tiempo de ejecución:

 Error de sintaxis (Falta operador) en la expresión de consulta '[Niñ]![Fec]=29//06/2019 12:30:00'.

El Cuadro_combinado32 contiene datos tipo fecha y el campo Fec de la tabla Niñ también es de tipo Fecha.

¿Alguien puede ayudarme?

2 respuestas

Respuesta
2

Si el valor es de tipo fecha, has de pasarlo entre almohadillas:

DoCmd.OpenReport "Prueba", acViewNormal, , "[Niñ]![Fec]=#" & Me.Cuadro_combinado32.Value & "#"

Si así no te va, prueba a darle a la fecha formato americano:

DoCmd.OpenReport "Prueba", acViewNormal, , "[Niñ]![Fec]=#" & Format(Me.Cuadro_combinado32.Value,"mm/dd/yyyy") & "#"

Eso siempre y cuando el valor que devuelva el cuadro combinado sea efectivamente la fecha, y no un id...

Tampoco le veo mucho "sentido" a ponerle el nombre de la tabla en el filtro, por lo que si solucionado lo de la fecha, te da algún error, yo se lo quitaría...

Muchas gracias. Funciona correctamente.

Una cosilla más. ¿Sabes dónde conseguir información, a ser posible, con ejemplos, de cómo usar las comillas dobles, las simples, las almohadillas, etc. Es que no acabo de entender la lógica de la sintaxis y me hago un verdadero lío. Gracias.

Cuando digo que funciona correctamente, me refiero a la primera opción que me has dado. De las demás, no las he probado, claro.

En cualquier manual de Access lo tienes explicado ( por ejemplo los que tiene Neckkito en su web, mi curso de Access aquí...), también el la propia ayuda de microsoft...

La regla es muy simple:

Texto: Comillas simples o dobles

Numero: Nada

Fechas: Almohadillas o tratarlas como números

Sí, pero por qué:

 "[Niñ]![Fec]=#" & Me.Cuadro_combinado32.Value & "#"

en lugar de:

"[Niñ]![Fec]=" & #Me.Cuadro_combinado32.Value #

o, si acaso,

"[Niñ]![Fec]=" & "#" & Me.Cuadro_combinado32.Value & "#"

que es lo que me dice mi lógica, es decir, si encierro una cadena entre comillas, entiendo que habrá que encerrar una fecha entre almohadillas, ¿no?. Por eso digo, que algo hay que no conozco o no acabo de comprender.

Gracias por el enlace y por todo. Saludos.

La primera y la tercera son la misma, pero en una escribes más que en la otra. La segunda no te funciona porque no es una sintaxis válida.

En VBA cualquier cadena de texto va entre comillas dobles, por ejemplo, el parámetro con el criterio en el DoCmd.OpenReport, en general: "Campo=Valor"

Si Campo es un texto, Valor debe ir entre comillas simples, por ejemplo "Nombre='Carlos'"

Si Campo es un número, Valor va directo, por ejemplo "Edad=21"

Si Campo es una fecha, Valor debe ir entre Almohadillas, por ejemplo "FNacim=#04/04/1979#"

Para encadenar elementos de una cadena se usa el operador & o el operador + (aunque en este caso hay que ir con cuidado por si te hace una suma...), por ejemplo:

"Hola " & "mundo" & "!" 

"Hola" & " " & "mundo & "!"

"Hola " & "mundo!"

todas dan como resultado la cadena "Hola mundo!"

Si volvemos a la cadena de un criterio de fecha ("FNacim=#04/04/1979#") podemos separarla y encadenarla de múltiples formas (aunque para un criterio "fijo" no tiene sentido hacerlo"):

"FNacim=#" & "04/04/1979" & #"

"FNacim=" & "#" & "04/04/1979" & "#"

"FNacim" & "=" & "#" & "04/04/1979" & "#"

"FNacim=#" & "04" & "/" & "04" & "/" & "1979" & #"

...

Si la expresión del criterio va a depender de una variable o del valor de un campo, siempre debes tener en cuenta cómo sería la expresión para un criterio fijo, y a partir de ahí, colocar unas comillas dobles justo antes de donde va a ir la variable, un &, la variable, otro & y comillas dobles.

Es decir, si tienes el criterio fijo "FNacim=#04/04/1979#" y quieres cambiar la fecha por el valor del campo txtFecha, paso a paso harías:

1º/ cambias el valor fijo por el variable: "FNacim=#Me.txtFecha#"

2º/ pones unas comillas dobles antes del nombre del campo o variable y las sigues de un & para que encadene las dos partes:

"FNacim=#" & Me.txtFecha#"

3º/ después del nombre del campo o variable pones un & y unas comillas dobles para encadenar esa otra parte:

"FNacim=#" & Me.txtFecha & "#"

Y listo, de esta forma nunca te equivocarás al construir cadenas y con una poca de práctica, lo harás sin tener que pensarlo

¡Gracias! ¡¡Por fin!! eso era lo que necesitaba. Por cierto, la Academia de Neckkito parece que ha cerrado por falta de suscripciones. Pero, con el artículo que has pegado, está todo perfectamente aclarado. Un millón de gracias.

Saludos.

La academia está cerrada, pero mi curso de Access sigue estando disponible, por lo que si te interesa, te puedes registrar y apuntarte a él.

Respuesta
2

Juan: Por lo que observo tienes formato de Fecha General, con lo que debes darle Formato de modo que te quede así:

"[Niñ]![Fec]=" #" & Format(Me.Cuadro_combinado32.Value, "mm/dd/yyyy") & "#"

Con ello estoy suponiendo que >>[Niñ]![Fec] es Fecha corta y que Cuadro_combinado32.Value

Si es que tiene más de una columna, quieres la columna dependiente.

Yo usaria >> Cuadro_combinado32. Column(X), siendo x >> 0 para la primera 1 para la segunda..

Un saludo >> Jacinto

Juan: Al repasar mi respuesta veo que Sveinbjorn (un saludo), se me ha adelantado y además te da otra opción. Yo probaría la opción que te ofrece como primera, aunque por los datos como los tienes creo que no te devolvería valores. Un saludo a los dos. Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas