Como evaluar un registro en access

Tengo un problema haber si me pueden ayudar.
Tengo una base de datos en la cual tengo un formulario en el cual se genera una consulta sql que busca los registros que están en una tabla para visualizarlo, pero los registros que contiene un # no me los muestra...
No se que puede estar pasando.

2 Respuestas

Respuesta
2

Esta es una opción más corta y sin tanta vuelva.

TABLA

Tengo la tabla en donde los registros resaltados en el campo Apellidos contiene el carácter #.

CONSULTA

Observe el criterio Como "*[#]*", esto permite obtener los apellidos que contengan el caracter #.

RESULTADO DE LA CONSULTA

Da como resultado los 3 registros

Este es el código que utilizo en el botón de filtrar pero cuando introduzco un consumible que contiene # por ejemplo vidrio # 11 no me parece

Pero veo más campos, ¿entonces el filtro no solamente se hace por el cuadro combinado Combustible?

¿Qué código tiene en el cuadro combinado consumible?

Consulta = "SELECT Consulta_Buscar_Consumible.ITEM, Consulta_Buscar_Consumible.FECHA, Consulta_Buscar_Consumible.AREA, Consulta_Buscar_Consumible.GRUPO, Consulta_Buscar_Consumible.CARGO, Consulta_Buscar_Consumible.NOMBRE, Consulta_Buscar_Consumible.SECCIÓN, Consulta_Buscar_Consumible.DESCRIPCIÓN, Consulta_Buscar_Consumible.OBSERVACIÓN, Consulta_Buscar_Consumible.CANT, Consulta_Buscar_Consumible.CAMBIO "
Consulta = Consulta & "FROM Consulta_Buscar_Consumible "
Consulta = Consulta & "WHERE Consulta_Buscar_Consumible.DESCRIPCIÓN Like '*" & Me.Buscar_Consumible & "*' AND Consulta_Buscar_Consumible.AREA Like '*" & Me.Buscar_Area & "*' AND Consulta_Buscar_Consumible.GRUPO Like '*" & Me.Buscar_Grupo & "*' AND Consulta_Buscar_Consumible.FECHA BETWEEN #" & Format(Me.txtFechaInicial, "mm/dd/yyyy") & "# AND #" & Format(DateAdd("s", 86399, Me.txtFechaFinal), "mm/dd/yyyy hh:nn:ss") & "# "
Me.Lista_Consumibles.RowSource = Consulta

Este formulario, corresponde a una respuesta que respondí hace un tiempo:

Datos sin filrar:

Tengo en la columna "Producto" 3 campos que tienen el carácter # en diferente posición y tengo en la columna "CUENTA" palabra "SOCIOS". Al hacer clic en Botón del filtro obtengo:

Este es el código que hace el filtro:

Private Sub btnFiltrar_Click()
'Este algoritmo fue desarrollado por
'Eduardo Pérez Fernández y no es copia de la web
'Favor hacer referencia en sus proyectos, no cuesta nada
'Fecha 04/01/2020
'
'NOTA: En principio se diseñó para tomar el contenido de
'      campos de texto, pero se puede adaptar para combo box
'      o ambos.
 Dim sFiltro As String
 Dim ctrl As Control
 Const conJetDate = "\#mm\/dd\/yyyy\#"   'El formato esperado para las fechas en una cadena de consulta JET.
 For Each ctrl In Me.Controls
   If ctrl.ControlType = acTextBox Then
     If ctrl.Value <> "" And ctrl.Tag <> "fecha" Then
      If ctrl.Value = "#" Then
         ctrl.Value = "[#]"
      End If
      sFiltro = sFiltro & ctrl.Tag & " LIKE '*" & ctrl.Value & "*'" & " OR "
     End If
   End If
 Next
 If sFiltro <> "" Then
  sFiltro = Left(sFiltro, Len(sFiltro) - 4)
 End If
 If IsDate(Me.fdesde) And IsDate(Me.fhasta) Then
  If sFiltro <> "" Then
   sFiltro = sFiltro & " AND fecha between " & _
   Format(fdesde, conJetDate) & " AND " & Format(fhasta, conJetDate)
  Else
   sFiltro = "fecha between " & _
   Format(fdesde, conJetDate) & " AND " & Format(fhasta, conJetDate)
  End If
 End If
 Me.frmSubContabilidad.Form.Filter = sFiltro
' Le decimos al subformulario que active el filtro
' que previamente hemos asignado.
 Me.frmSubContabilidad.Form.FilterOn = True
 

En el formulario se utilizar la propiedad "Información adicional" el nombre del campo, excepto, las fechas solo tienen el nombre "fecha". Con este sistema no importa la cantidad de campos a filtrar y reduce en un 50% el código. Trate de adaptarlo, pero tenga cuidado con los cuadros combinados al hacer referencia a la columna que se debe tomar para la consulta. Le recomiendo no utilizar caracteres especiales en los datos, son un dolor de cabeza.

Ahora para poderle colaborar necesitaría la base de datos con algunos datos ficticios, mi correo es [email protected], favor en el asunto hacer referencia a su consulta.

Algo más completo con una función para validar los caracteres especiales

Public Function busca_especial(mtexto As String) As String
 If InStr(1, mtexto, "?") > 0 Then
   busca_especial = Replace(mtexto, "?", "[?]")
 ElseIf InStr(1, mtexto, "#") > 0 Then
   busca_especial = Replace(mtexto, "#", "[#]")
 ElseIf InStr(1, mtexto, "%") > 0 Then
   busca_especial = Replace(mtexto, "%", "[%]")
 ElseIf InStr(1, mtexto, "!") > 0 Then
   busca_especial = Replace(mtexto, "!", "[!]")
End If
End Function

CÓDIGO DE LA FUNCIÓN

Public Function busca_especial(mtexto As String) As String
 If InStr(1, mtexto, "?") > 0 Then
   busca_especial = Replace(mtexto, "?", "[?]")
 ElseIf InStr(1, mtexto, "#") > 0 Then
   busca_especial = Replace(mtexto, "#", "[#]")
 ElseIf InStr(1, mtexto, "%") > 0 Then
   busca_especial = Replace(mtexto, "%", "[%]")
 ElseIf InStr(1, mtexto, "!") > 0 Then
   busca_especial = Replace(mtexto, "!", "[!]")
End If
End Function

Puede utilizar esta función en sus consultas SQL.

Perdón copie el código de la función 2 veces falta el código que llama la función

Private Sub btnFiltrar_Click()
'Este algoritmo fue desarrollado por
'Eduardo Pérez Fernández y no es copia de la web
'Favor hacer referencia en sus proyectos, no cuesta nada
'Fecha modificación: 19/06/2021
'
'NOTA: En principio se diseñó para tomar el contenido de
'      campos de texto, pero se puede adaptar para combo box
'      o ambos.
'Requiere de la función: busca_especial()
 Dim sFiltro As String
 Dim ctrl As Control
 Const conJetDate = "\#mm\/dd\/yyyy\#"   'El formato esperado para las fechas en una cadena de consulta JET.
 For Each ctrl In Me.Controls
   If ctrl.ControlType = acTextBox Then
     If ctrl.Value <> "" And ctrl.Tag <> "fecha" Then
       ctrl.Value = busca_especial(ctrl.Value)   ' Llamo la función para validar caracteres especiales
       sFiltro = sFiltro & ctrl.Tag & " LIKE '*" & ctrl.Value & "*'" & " OR "
     End If
   End If
 Next
 If sFiltro <> "" Then
  sFiltro = Left(sFiltro, Len(sFiltro) - 4)
 End If
 If IsDate(Me.fdesde) And IsDate(Me.fhasta) Then
  If sFiltro <> "" Then
   sFiltro = sFiltro & " AND fecha between " & _
   Format(fdesde, conJetDate) & " AND " & Format(fhasta, conJetDate)
  Else
   sFiltro = "fecha between " & _
   Format(fdesde, conJetDate) & " AND " & Format(fhasta, conJetDate)
  End If
 End If
 Me.frmSubContabilidad.Form.Filter = sFiltro
' Le decimos al subformulario que active el filtro
' que previamente hemos asignado.
 Me.frmSubContabilidad.Form.FilterOn = True
End Sub
Respuesta
1

Voy a intentar ser lo más didáctico posible. El sistema entiende que cuando pones una # es que vas a "hablar" de fechas. Por otro lado, no dices donde está o puede estar el dígito #. Así que, si tengo una tabla Clientes donde puedes ver que en los registros 1, 6 y 12, el nombre del cliente tiene un dígito #.

Construyo una consulta Consulta1 como ves en la imagen, a la que le he añadido una campo Bien

Ahora, si tengo el formulario Clientes

Cuando aprieto el botón

El código del botón, aunque no sería necesario, ya que se puede poner en cualquier evento, es

Private Sub Comando15_Click()
Me.RecordSource = "Select * from consulta1 where bien like ""*33*"""
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas