FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Comprobar si un valor es nulo
Me estoy volviedo loco. Estoy ejecutando este query en Builder 6 contra una base de datos Firebird:
que me devuelve este resultado: Cita:
Código:
for (; !fPersona->Query->Eof; fPersona->Query->Next()) { cAux = UpperCase(fPersona->Query->FieldByName("Literal")->AsString); if (lPrueba && (cAux == "DESCONOCIDA" || cAux == NULL)) { CheckListBox2->Items->Add("Desconocida"); lPrueba = true; } else if (cAux != NULL) CheckListBox2->Items->Add(fPersona->Query->FieldByName("Literal")->AsString); } Cita:
|
#2
|
||||
|
||||
Puedes usar coalesce.
|
#3
|
||||
|
||||
Código PHP:
|
#4
|
||||
|
||||
Hola.
Cita:
Si deseas que cuando sea NULL figure DESCONOCIDA, podes hacer lo que te indicó Casimiro(es mejor) o tambíen: Código PHP:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 23-02-2016 a las 14:34:12. Razón: corregir nombre de query |
#5
|
||||
|
||||
He usado tan pocas veces este comando que nunca me acuerdo de que existe. Es una buena idea.
Si te fijas es una de las cosas que he probado pero tampoco me funciona. No, si el problema no es el resultado obtenido. De hecho cuento con él porque lo he provocado yo. Este si funciona. Muchas gracias a todos |
#6
|
||||
|
||||
Como lo resolviste? IsNull funciona, ahora el caso es como se usa dentro de los condicionales claro
|
#7
|
||||
|
||||
Cita:
Código:
bool lPrueba = false; for (; !fPersona->Query->Eof; fPersona->Query->Next()) if (UpperCase(fPersona->Query->FieldByName("Literal")->AsString) != "DESCONOCIDA") CheckListBox2->Items->Add(fPersona->Query->FieldByName("Literal")->AsString); else if (!lPrueba) { CheckListBox2->Items->Add("Desconocida"); lPrueba = true; } Lo de IsNull si que me ha extrañado que no funcionara porque de hecho le he usado con relativa frecuencia, tanto en BB.DD. Firebird como Paradox. |
#8
|
||||
|
||||
No uso C++ (que afortunado!) pero ya que no te han explicado porque pasa esto, aqui va algo pa que no olvides, y que muchos lenguajes es lo mismo:
Cita:
https://stackoverflow.com/questions/...uit-evaluation Por regla general, los AND y los OR utilizan "short circuit" y siguen la regla de las tablas de verdad. En este caso, si la 1era opcion en AND es verdadera, NO CHEQUEA LA SEGUNDA. Y lo mismo aplica en el OR True And False = True False OR True = True El segundo problema es que UpperCase si te esta volviendo NULL? O cadena vacia?.
__________________
El malabarista. |
#9
|
||||
|
||||
En un AND donde encuentra el primer falso ya no chequea más
En un OR, con un sólo verdadero ya alcanza para que sea verdadero Basicamente (True) AND (True) AND (True) AND (True) AND (False) = False (False) AND (True) AND (True) AND (True) AND (True) = False, solo se evalua el primer condicional (True) OR (True) OR (True) OR (True) OR (False) = True, solo se evalua el primer condicional Tiene cierto "truco", ya que a pesar de que aca estamos hablando de constantes True/False, muchas veces tenemos funciones que devuelven True o False. Y si bien es un error grave que tengan efectos colaterales, es para tener en cuenta, no se debe asumir que siempre se evaluan todas las condiciones; tambien es para tener en cuenta el orden en que encadenamos condiciones, lo propio es poner lo mas rapido primero y dejar lo pesado para el final Se puede configurar el compilador para que haga Full Boolean Evaluation Última edición por AgustinOrtu fecha: 24-02-2016 a las 16:47:15. |
#10
|
||||
|
||||
No se si alguien lo ha comentado ya, pero ¿no puedes añadir la condición a la SQL, en lugar de tratarlo a posteriori?
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#11
|
||||
|
||||
Esa condición no me vale. Fíjate que lo que me interesa es precisamente que salgan los valores nulos para saber que registros están mal grabados y la tabla en la que voy a buscar los literales no está indexada, ni me interesa, ya que es donde se guardan los valores básicos de configuración.
Última edición por Angel.Matilla fecha: 25-02-2016 a las 09:45:11. |
#12
|
||||
|
||||
Hola.
La situación no me termina de quedar clara... Cuando el valor de la columna LITERAL es NULL, ¿ Deseas que el ítem del CheckListBox incluya algún texto como sugiere la imágen de tu primer mensaje ? Si no te interpreté mal y es así, creo que lo mas simple es hacerlo con la sugerencia de Casimiro, ejemplo : Código PHP:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#13
|
||||
|
||||
Cita:
Código:
Query->Close(); Query->SQL->Text = "SELECT DISTINCT A.Situacion, " "COALESCE(B.Literal, 'Desconocida') Literal " "FROM Persona A " "LEFT JOIN Instalacion B " "ON A.Situacion = B.Valor AND B.Etiqueta = 'Situacion' " "WHERE A.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia')"; Query->Open(); bool lPrueba = false; for (; !fPersona->Query->Eof; fPersona->Query->Next()) { if (UpperCase(fPersona->Query->FieldByName("Literal")->AsString) == "DESCONOCIDA") { if (lPrueba) continue; lPrueba = true; } CheckListBox2->Items->Add(fPersona->Query->FieldByName("Literal")->AsString); } |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Comprobar si un campo es nulo | Gabo | C++ Builder | 2 | 08-10-2007 23:08:11 |
Valor nulo en un string | ElDioni | Conexión con bases de datos | 5 | 10-11-2005 09:29:57 |
Valor Nulo o en blanco y nil | vtdeleon | OOP | 1 | 25-11-2004 05:41:50 |
Campo con valor nulo | fjcg02 | Conexión con bases de datos | 4 | 10-11-2004 08:55:07 |
Valor nulo | pache | OOP | 3 | 19-06-2003 08:39:13 |
|