Imprimir página | Cerrar ventana

Filtro con valores booleanos

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=87046
Fecha de impresión: 26/Marzo/2026 a las 15:29


Tema: Filtro con valores booleanos
Publicado por: JoseraGR
Asunto: Filtro con valores booleanos
Fecha de publicación: 17/Marzo/2025 a las 17:16
Buenas

Una nueva cuestión que tengo al realizar un filtro mediante varios combos. Uno de ellos tiene valores booleanos (si, no). y al montar el filtro siempre me da error de valores no coinciden.

Este es una parte del código que tengo:

    If vDigitalizada <> "" Then
        If vDigitalizada = "Si" Then
            vDigital = True
        Else
            vDigital = False
        End If
        CFiltro = CFiltro & "and [Digital]=  vDigital  "
    End If

donde vDigitalizada es de tipo string, Digitasl y vDigital boolean.

Supongo que el problema esta en la parte de "and [Digital]=  vDigital  ", he probado varias combinaciones pero no atino a dar con la sintaxis correcta. 

Un saludo



Respuestas:
Publicado por: Mihura
Fecha de publicación: 17/Marzo/2025 a las 18:12
If vDigitalizada = "si" Then
CFiltro = CFiltro & " AND Digital <> 0"
  else
CFiltro = CFiltro & " AND Digital = 0"
End If 

En la pelea con distintos tipos de BD's ya me he acostumbrado a trabajar con el valor 0 = false y distinto de cero = True.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: xavi
Fecha de publicación: 18/Marzo/2025 a las 08:08
Hola,

Aparte de coincidir con Jesús en la creación de filtros booleanos, tu error podría estar en la concatenación para crear la cadena de filtro:

CFiltro = CFiltro & " and [Digital] = " & vDigital

Error 1 (posible): que CFiltro no acabara en un espacio y esa concatenación uniría "and" a la última palabra de la cadena CFiltro.

Error 2 (seguro): al tener el vDigital dentro de la cadena, no tiene ni idea de que le estás hablando

Error 3 (probable): la creación de cadenas de ese tipo pueden generar errores raros porque se pueden crear como Verdadero o True, cosa que Access no es capaz de asociar que son los mismos valores.

En definitiva, la opción que planta Jesús. Fíjate en todo lo que te ahorras. Tu tienes 9 líneas de código (+ la declaración de vDigital); Jesús solo 3.

Si quieres rizar el rizo, en 1 sola línea:

CFiltro = CFiltro & " AND Digital " & Iif(Nz(vDigitalizada, "") = "Si", "<>0", "=0")

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: JoseraGR
Fecha de publicación: 22/Marzo/2025 a las 19:51
Buenas
Probado con el código de Jesus y funciona correctamenet. Y si repasando todas las pruebas que he hecho hacia cosas raras con este tipo de datos.
Gracias y un saludo



Imprimir página | Cerrar ventana