none
Filtrar campo boolean RRS feed

  • Pregunta

  • Hola, estoy intentando utilizar el método ScalarQuery para hallar en un campo (tipo boolean) de una tabla si hay filas con valor false, para ello estoy creando un procedimiento como el que sigue a continuación:
      Private Sub ComprobarSiHayAvisosNuevos()
            Dim Leidos As Boolean = False
            If Me.AvisosTableAdapter.ScalarQueryNuevosAvisos(Leidos) > 0 Then
                MsgBox("Ha encontrado mensajes sin leer")
             Else
             
                MsgBox("NO Hay mensajes")
            End If
    El asunto es que no me detecta las filas en false, pero si cambio a TRUE si me los detecta.
    Creo que es porque en el control check del campo de la tabla, cuando hago click en dicho campo (tipo boolean) si me añade True a dicha tabla, pero si vuelvo a clickar otra vez me lo pone en false y en la tabla no se introduce false, si no que el campo se queda vacío, o con datos tipo null.
    En definitiva, ¿como puedo hallar con éste método para que me detecte si hay alguna fila con un campo que esté vacío? o nulo, sin nada.
    Si alguien conoce alguna forma más eficaz, acepto todo tipo de sugerencias o comentarios...
    Muchas gracias.
    miércoles, 1 de junio de 2011 15:14

Respuestas

  • mm el primer punto que veo es que has usado un nombre no muy adcuado para un parametro

    @False podria entra en colision con alguna palabra reservada, sino lo hace es de casualidad

    porque no lo defines como @leido o algo asi

     

    despues si agrupas por Leido, pero luego lo pones en el SELECT esto podria retornar mas de un registro

    porque no haces

     

    SELECT  COUNT(*) as cantidad
    FROM Avisos
    WHERE  Leido = @leido

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta poliems jueves, 2 de junio de 2011 19:09
    miércoles, 1 de junio de 2011 16:26

Todas las respuestas

  • la query que defines en el ScalarQueryNuevosAvisos() como seria ?

    porque es alli suando el parametro que recuperarias los registros

    adaptando el WHERE para que tome el null

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 1 de junio de 2011 15:23
  • Esta es la query que uso:

     

    SELECT        COUNT(*) AS Expr1, Leido

    FROM            Avisos

    GROUP BY Leido

    HAVING        (Leido = @False)

     

    Quizás lo que podría hacer es obligar a que introduzca un dato como false en la tabla, pero no se si es la mejor opción.

    • Marcado como respuesta poliems jueves, 2 de junio de 2011 19:08
    • Desmarcado como respuesta poliems jueves, 2 de junio de 2011 19:08
    miércoles, 1 de junio de 2011 16:12
  • mm el primer punto que veo es que has usado un nombre no muy adcuado para un parametro

    @False podria entra en colision con alguna palabra reservada, sino lo hace es de casualidad

    porque no lo defines como @leido o algo asi

     

    despues si agrupas por Leido, pero luego lo pones en el SELECT esto podria retornar mas de un registro

    porque no haces

     

    SELECT  COUNT(*) as cantidad
    FROM Avisos
    WHERE  Leido = @leido

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta poliems jueves, 2 de junio de 2011 19:09
    miércoles, 1 de junio de 2011 16:26
  • Si, tienes toda la razón en tus sugerencias, lo adaptaré, pero antes de realizar dichos cambios he comprobado que me funciona del siguiente modo:

     Dim Leidos As Byte = 0  'simplemente es esta línea la que he modificado.

            If Me.AvisosTableAdapter.ScalarQueryNuevosAvisos(Leidos) > 0 Then   'esto queda igual

     

    En principio parece que así me detecta las líneas vacías, pero no se si será la opción correcta, voy a intentar aplicar los cambios que propones y comento algo...

     

    miércoles, 1 de junio de 2011 17:04
  • Hola, algo asi haocurrido antes

    http://social.msdn.microsoft.com/Forums/es-ES/netfxwebes/thread/e480a409-9c21-4e4d-818a-c23d792dbaad/#aa31699d-bf3d-4c49-93c6-ee252900785e

    me parece qu cuando trabajas con boolena debes utilizar el tipo byte

     


    Lima-Perú
    jueves, 2 de junio de 2011 14:29
  • Si, a pesar que había buscado ese mensaje no lo había visto.

    Ya conseguí que funcionara.

    Muchas gracias por vuestras respuestas.

    jueves, 2 de junio de 2011 19:08