Criterios de consulta en Access (¿VBA?)

Estoy a punto de terminar una aplicación en Access que espero poder poner en funcionamiento esta semana, he de decir que sin la ayuda de la gente de aquí sería imposible sacar esto adelante.

El caso es que tengo un formulario que genera un informe basado en una consulta.

Lo que quiero es que en ese formulario, al poner ciertos campos, genere la consulta teniendo en cuenta solo esos criterios, pero en caso de no poner nada, muestre todos los registros.

El informe es éste:

Y la consulta, tiene unos criterios tal que así:

Donde cada uno de los criterios es uno de los campos de "filtrado" del formulario.

El caso es que en el formulario, cuando relleno todos los campos, el informe muestra los registros correctamente, pero cuando dejo uno de esos campos en blanco, no muestra nada.

No sé si con algún OR o AND o algo así, o usando varias líneas de criterio, podría solucionarlo, he probado varias combinaciones posibles y no sale :-(

Ni si quiera sé si es necesario sí o sí usar VBA para resolver el problema o se podría hacer sin código.

Cualquier ayuda que pudieseis prestarme sería muy bienvenida.

1 respuesta

Respuesta
1

Creo que te estás complicando sin necesidad. Verás, en tu formulario "Generados Incidencias" (creo que era), ya tienes creada la estructura del filtro que necesitas. Lo único que tienes que hacer es copiarla en el código del botón y aplicarla al informe.

Los pasos son estos:

1º/ Borra todos los criterios de la consulta en la que se basa el informe

2º/ Copia el código del botón filtro del formulario de incidencias al código del botón del formulario que te abre el informe (Generador de informes)

3º/ Cambia del código lo que está en negrita por los nombres que le correspondan del nuevo formulario:

Private Sub cmdFiltro_Click()
'Neckkito -- 13/01/13
'Declaramos las variables
Dim vAgente As Integer
Dim bruta As String
Dim vDelegacion As Integer
Dim vEstatus As String
Dim vLargo As Integer
Dim vFechaIni As Date, vFechaFin As Date
Dim miFiltro As String
'Cogemos los valores que hayamos seleccionado como filtro
vAgente = Nz(Me.cboAgente2.Value, -1)
bruta = Nz(Me.cboRuta.Value, "")
vDelegacion = Nz(Me.Cuadro_combinado96.Value, -1)
vEstatus = Nz(Me.Cuadro_combinado100.Value, "")
vFechaIni = Nz(Me.Texto107.Value, -1)
vFechaFin = Nz(Me.Texto109.Value, -1)
'Inicilizamos el filtro
miFiltro = ""
'Creamos la primera parte del filtro
If vAgente <> -1 Then
miFiltro = " AND [Agente]=" & vAgente
End If
'Creamos la segunda parte del filtro
If bruta <> "" Then
miFiltro = miFiltro & " AND [Ruta]='" & bruta & "'"
End If
'Creamos la tercera parte del filtro
If vDelegacion <> -1 Then
miFiltro = miFiltro & " AND [Delegación]=" & vDelegacion
End If
'Creamos la cuarta parte del filtro
If vEstatus <> "" Then
miFiltro = miFiltro & " AND [Estatus]='" & vEstatus & "'"
End If
'Creamos la quinta parte del filtro
If vFechaIni <> -1 Then
miFiltro = miFiltro & " AND [Fecha]>=#" & Format(vFechaIni, "mm/dd/yyyy") & "#"
End If
'Creamos la sexta parte del filtro
If vFechaFin <> -1 Then
miFiltro = miFiltro & " AND [Fecha]<=#" & Format(vFechaIni, "mm/dd/yyyy") & "#"
End If
'Ahora cogemos la longitud del filtro
vLargo = Len(miFiltro)
'Recomponemos el filtro eliminando el primer 'AND '
If vLargo > 0 Then
miFiltro = Right(miFiltro, vLargo - 5)
End If
'Aplicamos el filtro al formulario
Me.Filter = miFiltro
Me.FilterOn = True
End Sub

4º/ Las 3 últimas lineas, que están en negrita y cursiva, las tienes que cambiar por estas dos, poniendo en lo que está en negrita el nombre de tu informe:

'Abrimos el informe filtrado

DoCmd. OpenReport "NombreInforme", acViewPreview,, miFiltro

Edito:

Por hacer un copia-pega de la respuesta anterior, el código vuelve a tener el miso fallo... Cambia esto:

If vFechaFin <> -1 Then
miFiltro = miFiltro & " AND [Fecha]<=#" & Format(vFechaIni, "mm/dd/yyyy") & "#"
End If

por esto otro:

If vFechaFin <> -1 Then
miFiltro = miFiltro & " AND [Fecha]<=#" & Format(vFechaFin, "mm/dd/yyyy") & "#"
End If

Como siempre muchísimas gracias por tu respuesta. Intenté adaptar el código de la otra pregunta que abrí pero no sé por qué no iba.

El caso es que puse esta misma pregunta en otro foro y me dijeron que simplemente poniendo algo así en el criterio de consulta funcionaría:

Como "*" & Formularios!Formulario!Texto3 & "*"

Y efectivamente, solo con eso en los criterios de consulta funciona a la perfección.

Aún así me pongo esta respuesta en favoritos para si tengo que usar un código parecido alguna vez.

De nuevo gracias por todo, eres un excelente experto ^^.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas