Cómo sondear el "tipo" de campo de una tabla para aplicar un filtro a un formulario

Es una pregunta para Jacinto Trillo

Pues al final no me sale la cosa...

Quería comentarte que en el CboCampoElegido da errores cuando selecciono en el combo "CboOrdenar" los siguientes campos que no son tipo texto:

IDLIBRO (tipo autonumérico)

AÑO (tipo numérico)

EXISTENTE                                (tipo si/no)

FECHAALTA y FECHABAJA (tipo fecha)

...

Supongo que para estos casos habría que añadir algo a:

Private Sub CboCampoElegido_AfterUpdate ()

'para filtrar por el campo elegido

If not isnull (me.CboCampoElegido) and me.CboCampoElegido <>"" then

Dim FiltroCampo as string

FiltroCampo= CampoSeleccionado & " = ' " & me.CboCampoElegido & " ' "

me.Filter= FiltroCampo

Me.FilterOn = true

me.CboCampoElegido = Null

end if

end sub

... Me comentaste que previo al filtro habría que indicar con un "Select Case" los diferentes "tipos de campos" a los que aplicar el filtro.

Si quieres probar el combo con problemas (Cbo. CampoElegido) lo teníamos en la Bd de pruebas que me enviaste, en el formulario "FiltroGeneral".

Ya me indicas y

1 respuesta

Respuesta
1

Rafa: Para que puedas ir practicando, hay dos procedimientos, que tienes que sustituir.
Como los anteriores tienen el mismo Nombre, los borras y copias éstos.

Private Sub CboOrdenar_AfterUpdate()
Dim CampoOrden As Variant
On Error GoTo CboOrdenar_AfterUpdate_TratamientoErrores

'Para que el CboCampoElegido tome los Valores de acuerdo al Campo seleccionado
Me.CboCampoElegido = Null
Me.CboCampoElegido.Requery

CampoOrden = Me.CboOrdenar.Value
Forms!FiltroGeneral.OrderBy = CampoOrden
Forms!FiltroGeneral.OrderByOn = True

CampoSeleccionado = Me.CboOrdenar.Column(0)

Me.CboCampoElegido.RowSource = "SELECT DISTINCT " & CampoSeleccionado & " FROM LIBROS;"
Me.CboCampoElegido.Requery

CboOrdenar_AfterUpdate_Salir:
On Error GoTo 0
Exit Sub
CboOrdenar_AfterUpdate_TratamientoErrores:
MsgBox "Error " & Err.Number & " en Procedimiento.:CboOrdenar_AfterUpdate de Documento VBA: Formulario FiltroGeneral (" & Err.Description & ")"
Resume CboOrdenar_AfterUpdate_Salir
End Sub

Private Sub CboCampoElegido_AfterUpdate()
'Para Filtrar por el Campo elegido
If Not IsNull(Me.CboCampoElegido) And Me.CboCampoElegido <> "" Then
Dim FiltroCampo As String
If IsNumeric(Me.CboCampoElegido) Then
FiltroCampo = CampoSeleccionado & " = " & Me.CboCampoElegido
ElseIf IsDate(Me.CboCampoElegido) Then
FiltroCampo = CampoSeleccionado & " = " & "#" & Format(Nz(Me.CboCampoElegido, #12/31/9999#), "mm/dd/yyyy") & "#"
Else
FiltroCampo = CampoSeleccionado & " = '" & Me.CboCampoElegido & "'"
End If
Me.Filter = FiltroCampo
Me.FilterOn = True
Me.CboCampoElegido = Null
End If
End Sub 'CboCampoElegido_AfterUpdate()

No obstante te enviaré la Base de Datos de apoyo. Saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas