Access - ayuda con consulta SQL y casillas de verificación

   
Vista:

ayuda con consulta SQL y casillas de verificación

Publicado por José Maria (134 intervenciones) el 07/07/2015 10:59:24
Buenas amigos,
Tengo una consulta que me está dando problemas, a ver si algún experto aquí me puede ayudar.

Tengo una tabla en la que hago filtros dependiendo si el valor es 0 y -1 .
Lo relleno con un formulario con campos de verificación el problema que tengo es que cuando no marco esos campos de verificación me pone valor null.
He intentado mediante código lo siguiente para que no me deje valores null :

If P.Value = Null Then

P.Value = 0

End If

Pero no me pone los 0 me lo sigue dejando en null.

Quiero filtrar de la siguiente manera:
P= 0 , F = -1 y V = 0 or Null

He puesto lo siguiente en el Where:

Where P = 0 And F = -1 and V = 0 or Is Null

el problema que tengo es que cuando filtro la V me aparecen también valores de P = -1

¿Como puedo resolverlo?

GRacias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Neckkito

ayuda con consulta SQL y casillas de verificación

Publicado por Neckkito (1104 intervenciones) el 07/07/2015 12:04:25
Hola José María:

Para controlar si el control te devuelve un valor nulo debes escribir:

If isnull(P.Value) then
P.Value=0 'Esto te lo transforma en desmarcado
End if

En cuanto al filtro que aplicas la idea sería la misma:

Where P = 0 And F = -1 and (V = 0 or isnull(V))

A ver si así te sale.

Saludos,
firmaMail
http://neckkito.siliconproject.com.ar/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con consulta SQL y casillas de verificación

Publicado por Enrique Heliodoro (1663 intervenciones) el 07/07/2015 12:08:20
Yo comenzaría por eliminar el tri-estado de los campos de verificación (o blanco o negro) pero en el supuesto de que lo necesitase, evaluaría con la función NZ, dándole un valor alternativo de mi elección (si es que desease seleccionar por cualquiera de los tres estados)

Para unos valores blanco/negro asumiendo el indeciso como obscuro:
Nz(P,0)
Si en p = null ==> 0
Si en p = false==> 0
Si en p = True==> -1
Para una evaluación a tres posibles estados (el 'tercer estado es el '1', pero puede ser cualquiera de nuestra elección)
Nz(P,1)
Si en p = null ==> 1
Si en p = false==> 0
Si en p = True==> -1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con consulta SQL y casillas de verificación

Publicado por José Maria (134 intervenciones) el 07/07/2015 12:50:12
Gracias por tu pronta respuesta.

No tengo triple estado, no son campos SI/NO en realidad son campos de textos a los cuales les doy valores con la casilla de verificación, mi problema es que cuando no le marcas nada se queda en null, si lo marcas se pone en -1 y si lo marcas y desmarcas ya te pilla el valor 0.
Voy a probar lo que dices y te cuento.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con consulta SQL y casillas de verificación

Publicado por Enrique Heliodoro (1663 intervenciones) el 07/07/2015 13:33:07
Revisa la teoría, un campo de texto y una casilla de verificación no son el mismo tipo de objeto, un campo de texto admitirá 'cualquier cosa a interpretar' pero no actúa como lo hace una casilla de verificación que (por diseño) puede tener el 'tri-estado'.

Esto es: mientras no se le asigna valor (su estado no seria un NULL, sino un Empty) tendrá el estado ambiguo, en cuanto se le asigne el estado true/false, ya no podrá volver a tener el estado ambiguo (que se asemeja pero no es el NULL)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con consulta SQL y casillas de verificación

Publicado por José Maria (134 intervenciones) el 07/07/2015 13:33:20
El problema es que yo no tengo triple estado, realmente no son campos SI/NO ya que la BBDD la tengo en una base de datos SQL de Azure y no existen los campos SI/NO y con los campos bit tenia el problema de los campos null.
Así que decidi crear unos simples campos char que me almacenen 0 y -1 pero como te comente antes esos campos cuando no pulso la casilla de verificacion se quedan en null.

He probado en el evento al abrir formulario lo siguiente:

If Nz(P) = Null Then

P.Value = "0"

End If


Pero nada,no hay manera.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con consulta SQL y casillas de verificación

Publicado por Enrique Heliodoro (1663 intervenciones) el 07/07/2015 13:50:32
Los problemas en el origen, se resuelven en el origen (y al supuesto estado NULL me refiero).

Aclaremos:

Access utiliza para almacenar el campo de tipo BOOLEANO un campo de tipo LONG (con todas sus consecuencias), creo que internamente se logra mas velocidad a cambio de espacio (que hoy en día sobra por todas partes, los tiempos del MS-DOS quedaron en la lejanía).

Puestos a asignar valores concluyeron (y ellos sabrán la causa de esa sesuda discusión) que el valor cero era el false y 'cualquier otro' el true, para diferenciarse del resto del mundo, por defecto el -1 famoso.

Pero ... ello nos permite que el ámbito de aplicación de ese tipo de campo sea mayor, por ejemplo:
Sumo/cuento un conjunto de datos, si el resultado es un cero ==> false , si es DIFERENTE de cero ==> true

¿Qué el dato proviene de una base de datos externa que utiliza un campo de tipo BIT? ... los campos de tipo BIT solo admiten dos valores un cero o un uno (los únicos posibles estados binarios), que el campo 'no tenga dato reconocible por no habérsele asignado' implica un Empty (si la aplicación lo permite)

Partiendo de esas premisas, el dato que provenga de un campo de tipo BIT y también 'el invento' que lo representa en Access se puede evaluar en base a que sea cero o no sea cero (y me importara poco que un true sea un -1, un +1, un 1457 o un -4547).

Conclusión:
Verdadero <> 0
False = 0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

ayuda con consulta SQL y casillas de verificación

Publicado por José Maria (134 intervenciones) el 07/07/2015 14:41:10
Muchas gracias por tu magistral clase teórica y sobre todo por tu tiempo.

Pero ya tengo la base de datos montada y no puedo cambiar nada porque sería un autentico caos ponerme a cambiar cosas ahora, así que tengo que solucionarlo con lo que tengo.

Olvida los BIT,los SI/NO true and false.

Te sitio mejor a ver si me hago entender mejor:

Tengo un campo de verificación que esta relacionado en el origen con un campo de una tabla, ese campo de la tabla es un campo CHAR en el cual pretendo simular el campo de verficación.

Si lo pulso me pone -1 si lo desativo me pone 0.

El problema que tengo es que si no lo pulso me deja el valor como vacio.

Yo no quiero que ese campo quede vacio NUNCA, quiero que si nadie lo marca por defecto me salga valor 0.

Para ello use el codigo que te dije antes:


If Nz(P) = Null Then

P.Value = "0"

End If

Pero no me hace absolutamente nada.

Resumiendo la pregunta: como hago para que un campo de texto o lo que sea tengo valor 0 sin necesidad de escribir 0 que no se quede vacio nunca.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con consulta SQL y casillas de verificación

Publicado por Enrique Heliodoro (1663 intervenciones) el 07/07/2015 15:07:13
Observo (en general) que la teoría es un bien escaso (y la tan denostada ayuda de Access, el mejor vademécum para esa enfermedad)

La función NZ, evalua el dato (que ha de existir como tal)
Tiene DOS parámetros
El primero ==> el dato a evaluar
El segundo ==> lo que debería devolver si es un NULL

Nz(P) <== ¿Qué es esto?

Lo correcto:
Nz(P,"me parece que esto es un nulo")

Si es un nulo devuelve (y con el se habría de comparar) ==> ,"me parece que esto es un nulo"
Si no es un nulo devuelve el valor de 'P' (que nunca será igual a: ,"me parece que esto es un nulo" o lo que se le indique

Como haría yo esa asignación (ojo el resultado tiene que ser un texto por el diseño impuesto)
P= Nz(P,"0")

Si P no es nulo ==> P
Si es nulo ==> "0"

¿Cómo aplicarlo en la practica? ... eso dependerá de la aplicación y su creador (sin mas datos aquí se finalizara por mi parte)

Nota:
Por cierto ¿un campo de texto? .... por diseño o Empty o vacío (cadena de longitud cero) , null ... no es un 'estado natural'

Asi pues lo que habría que 'localizar' es si el campo en cuestión tiene una longitud cero, es mas, un espacio ni es un si ni es un no (ni tiene longitud cero) así que lo que yo aplicaría seria:

Len(Trim(P)) >0

Si se cumple es que 'hay algo' que no es un espacio y pudiera ser un si o un no
Si no se cumple seria un equivalente a un Null (o no hay nada o solo espacios)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar