Informes con filtros

Lo que quiero hacer es un poco complicado, y no sé si me voy a saber explicar. A ver cómo lo ves:
Tengo un subformulario donde en un combo selecciono la consulta origen de datos. En la consulta algunos campos toman los criterios de campos del formulario principal. Por ejemplo, en el formulario principal selecciono experiencia laboral: albañil. En el subformulario selecciono búsqueda por experiencia laboral, y en el mismo subformulario se editan los datos de usuarios con exp. Laboral de albañil. Hasta aquí bien. Ya que en la consulta, bajo el campo exp lab tengo puesto como criterio: Como [Forms]! [SGe_ofertas]! [experiencia] & "*". Utilizo el mismo sistema para imprimir un informe. Pero para poder además filtrar por criterios de edad (menor que, mayor que, entre... Y...) he añadido unos botones que filtran a posteriori los datos en el subformulario. El problema es que no sé como aplicar este último filtro en el informe...

1 respuesta

Respuesta
1
Por lo que veo, cuando dices que has utilizado
Como [Forms]![SGe_ofertas]![experiencia] & "*"
Te refieres a que eso lo has puesto como criterio en la consulta de origen de datos del inform, no ¿? ¿?
Eso, para casos como este en lo que tengas un dato en un formulario, variable, etc., que utilizar como criterio fijo (cuando digo fijo quiero decir que siempre tiene la misma estructura Como *...* o > XX, ...), es la solución apropiada.
En cambio, cuando ese criterio puede tener operadores que cambien, como el caso que me indicas con la edad en la que los comparadores pueden ser > o < ó =, e incluso tener uno o más parámetros > XX Y < XX, ..., no se "puede/debe" hacer de esta forma.
En tu caso, y en todos los casos en los que pase lo comentado en el párrafo anterior, lo conveniente es que por código creemos la sentencia SQL apropiada y sea con ésta con la que enlacemos el origen de datos del informe; es decir, por código seria algo así (en el evento que abra el informe):
SentenciaSQL = "SELECT * FROM TABLA WHERE EXP_LAB LIKE '*" & [Forms]![SGe_ofertas]![experiencia] & "'"
If CasoDeMayorQue Then
SentenciaSQL = SentenciaSQL & " AND Edad > " & DatoParElCriterio
Else
If CasoMenorQue Then
SentenciaSQL = SentenciaSQL & " AND Edad < " & DatoParElCriterio
Else
....
End If
.....
End If
Y luego, una vez creada la sentencia SQL concreta según el filtro deseado, utilizar esta en el informe como su origen de datos (por ejemplo utilizando la sentencia como parámetro filtro al hacer el DoCmd. OpenReport, o utilizando el código anterior en el evento Open del informe para en ese mismo evento decir que el origen de datos de éste es la sentencia recién creada, etc...).
El desarrollo real en tu aplicación depende de cómo este hecha, como la utilices y que es lo que más te interese en tu caso, pero las pautas que te propongo a seguir son las anteriores.
De todos modos, si tienes algún problema o duda al respecto no dudes en volver a contactar conmigo y te aclarare lo que necesites.
Muchísimas gracias por tu respuesta, me parece muy adecuada, aunque ya lo había resuelto cuando la he leído, y de una manera diferente. Al abrir el informe he añadido:
Dim edad1 As String, edad2 As String
edad1 = InputBox("Introducir edad mínima. Si busca sólo menores de una edad, introducir el valor 0")
edad2 = InputBox("Introducir edad máxima. Si busca sólo mayores de una edad, introducir el valor 100")
Me.RecordSource = "select * from OF_simples where edad>=" & edad1 & " and edad<=" & edad2
De esta manera el usuario introduce un rango de edad entre 2 valores, o si sólo quiere menor que o mayor que, introduce un 0 o un 100. Y el origen de datos sigue vinculado a la misma consulta que filtra en función de los criterios establecidos en el formulario. En cualquier caso, mi agradecimiento de nuevo por el esfuerzo y el interés que te has tomado.
Maga

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas