Que si quieres arroz Catalina

He hecho las modificaciones en el código y me ha quedado como sigue:
Private Sub Boton2000_Click()
Dim filtroviejo As String, filtronuevo As String
filtroviejo = Me.Filter
filtronuevo = "(" & filtroviejo & ") and (year([FechaIn])=2000)"
Me.Filter = filtronuevo
Me.FilterOn = True
Me.Requery
End Sub
Ahora ya no da ningún error de sintaxis pero cuando le doy al botón no muestra ningún registro en pantalla. Parece como si no encontrase en el formulario ningún registro que cumpla la condición del filtro.
Por cierto, de esta manera el filtro funciona correctamente:
Private Sub Comando93_Click()
Me.Filter = "FechaIn like'*99'"
Me.FilterOn = True
End Sub
Lo digo por lo del like y las fechas.
El control FechaIn tiene el origen de datos directamente en una tabla, en un campo tipo fecha.
La base de datos es un registro de intervenciones de asistencia técnica. En este formulario en concreto, consultamos las intervenciones por técnico, por año, por empresa contratada, etc.. Con este método de pulsar un botón que introduce un filtro predeterminado, un botón para cada técnico, uno para cada año, uno para cada empresa...
Lo cierto es que ya lo había intentado antes y no había conseguido que funcionase. En cualquier caso, más que agradecido por tu ayuda.
¿Esta información nueva te sugiere alguna solución?
Un saludo.
José A. Guirao
[email protected]
Respuesta
1
Perdona el retraso. Daba por respondida esta respuesta y veo que no es así. Hace un momento, volviendo a responder, no sé que combinación de letras he pulsado y se me ha ido todo; quizás la primera vez me haya pasado igual. O quizás se me cortó la comunicación telefónica alntes de responder.
Decía que si vale like, pues perfecto, lo usamos.
También que podía haber un problema con que no existiera filtro viejo, y en ese caso, estábamos metiendo unos paréntesis y un and que no venían al caso:
Dim filtroviejo As String, filtronuevo As String
filtroviejo = Me.Filter
if nz(filtroviejo)="" then
filtronuevo = (FechaIn like'*99')"
else
filtronuevo = "(" & filtroviejo & ") and (FechaIn like'*99')"
endif
Me.Filter = filtronuevo
Me.FilterOn = True
Por otro lado, me parece rígido el poner un botón para cada año, para cada empresa... Creo que sería mejor poner cuadros combinados.
Hola.
Desde luego, con cuadros combinados sería mucho más adecuado. Con los botones, además de rígido, termina siendo un lio, ya que al final no sabes bien cual es la selección que tienes hecha. Además, tengo entendido que Me.Filter no puede tener más de 256 caracteres, por lo que supongo que terminará dando algún error.
Como puedes suponer, el problema es que no se como hacerlo con cuadros combinados. Si con uno, pero ¿con varios?. ¿Es muy difícil?.
A estas alturas, ya te habrás dado cuenta de que mi nivel con VB es muy cercano a 0.
Agradecido por la ayuda.
José A. Guirao
[email protected]
Podemos crear un campo de texto que luego ocultamos pero que, de momento, nos sirve para ir comprobando lo que hacemos mejor que si declaramos una variable a mivel de formulario. Le podemos llamar mifiltro.
Creamos una serie de cuadros combinados basados en las tablas de empresas, años (la tendremos que crear)...
Creamos un procedimiento para montar el filtro en respuesta a los eventos de los cuadros combinados:
public sub creafiltro
dim filtrotemp as string
if not isnull([comboempresas]) then
filtrotemp= "([empresa] ='" & [comboempresas] & "')"
endiif
if not isnull([comboaños]) then
if nz(filtrotemp)="" then
filtrotemp ="( [FechaIn] like'*&[comboaños] &"')"
else
filtrotemp =filtrotemp & " and ( [FechaIn] like'*&[comboaños] &"')"
endif
endif
....
...
[mifiltro]=filtrotemp
end sub
Fíjate que vamos montando el filtro comprobando primero si el combo no está vacío y luego, si el filtro tiene ya texto, en cuyo caso debemos añadir un and.
En el evento afterupdate de cada combo le pones
call creafiltro.
Finalmente, cuando pulses el botón filtrar:
me.filter=[mifiltro]
me.filteron=true
E código lo he ido escribiendo directamente aquí y puede que tenga errores, pero la idea básica es ésta y no necesita mucho más.
Muy agradecido por tu respuesta. Efectivamente, con la última modificación, funciona correctamente. He recogido tu sugerencia de cambiar el método de los botones por otro más práctico y elegante. Lo estoy intentando.
Un saludo.
José A. Guirao

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas