Filtros

Estimado Davidth, tengo una duda sobre los filtros de access en código, es la siguiente, estando en un formulario quiero abrir otro, pero lo quiero abrir filtrando por dos campos, hasta ahora solo lo consigo filtrando por uno, al poner el otro en las lines de código, me dice que el tipo no coincide, espero respuesta gracias.

1 respuesta

Respuesta
1
Lo que debes de hacer es programar el evento "Al Abrir (OnOpen)" del formulario que va a filtrar con un código como el siguiente:
Private Sub Form_Open(Cancel As Integer)
DoCmd.ApplyFilter , "Clave>5 AND Left(Nombre,1)='A'"
End Sub
En este ejemplo yo pido que me filtre sólo los registros cuya clave sea mayor que 5 y que el nombre inicie por "A".
Lo que usas es un AND para unir ambas condiciones, observa que hay una coma después de ApplyFilter, ya que este método usa 2 argumentos, el nombre de un filtro y la condición Where, y en este caso sólo estamos usando la condición Where y el otro se omite.
Revisa bien la sentencia que estas usando actualmente, ya que es probable que estés comparando 2 tipos de datos diferentes, ejemplo: Clave="Hola", si clave es numérico, entonces no lo puedes comparar contra "Hola".
David tu contestación, a sido muy buena, yo lo he echo de otra manera y se que se puede conseguir así y me gustaría saberlo, a continuación te voy a escribir el trozo de código al que hago referencia, donde estoy filtrando por un solo campo(Id_Proyecto) y donde no encuentro la manera de añadir un nuevo filtro, al poner un and me pone que el tipo no coincide:
Private Sub PagosRedacción_Click()
On Error GoTo Err_PagosRedacción_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "PagosRedacción"
stLinkCriteria = "[Id_Proyecto]=" & Me![Id_Proyecto]
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_PagosRedacción_Click:
Exit Sub
Err_PagosRedacción_Click:
MsgBox Err.Description
Resume Exit_PagosRedacción_Click
End Sub
Espero respuesta David.
Saludos desde Valencia.
El problema se está originando efectivamente por los tipos de datos, lo más seguro es que Access está interpretando Me! Id_Proyecto como un campo de texto cuando debería de ser una interpretación numérica. Lo puedes resolver de la siguiente manera:
1. Cambia el "!" por "." en tus sentencias Me! Algo ¿ok?
2. Luego, a la hora de agregar el AND debes poner lo siguiente:
Si el otro campo es numérico:
stLinkCriteria = "Id_Proyecto=" & CInt(Me.Id_Proyecto) & " AND OtroCampo=" & CInt(Me.OtroCampo)
Si el otro campo es de texto:
stLinkCriteria = "Id_Proyecto=" & CInt(Me.Id_Proyecto) & " AND OtroCampo='" & CStr(Me.OtroCampo) & "'"
Lo que hacemos con CInt y CStr es forzar a que los valores de Me. Algo sean interpretados como enteros (integer) y texto (string).
Si Id_Proyecto es de texto, entonces deberías cambiar tu sentencia así:
= "Id_Proyecto='" & CStr(Me.Id_Proyecto) & "'"
Creo que eso debería arreglar tu problema. Yo ya lo probé en un formulario que abre a otro y le puse 2 condiciones separadas por AND y si funciona. Lo más seguro es que te estás equivocando con tu tipo de datos.
Si te sigue dando problemas, entonces es 100% seguro que tu segundo campo lo estás interpretando como otro tipo de datos (numérico cuando debería ser de texto, o de texto cuando debería ser numérico).
Pruébalo y me dices :-)
Si te fue de utilidad mi respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas