| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 23 Feb, 2016 1:54 pm Asunto: Comprobar si un valor es nulo |
|
|
Me estoy volviedo loco. Estoy ejecutando este query en Builder 6 contra una base de datos Firebird:
| Código: | SELECT DISTINCT A.Situacion, B.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') AND A.Sexo = 0 ORDER BY Situacion |
que me devuelve este resultado:
| Cita: | SITUACION LITERAL
-2 DESCONOCIDA
0 SITUACIÓN 1
1 SITUACIÓN 2
2 SITUACIÓN 3
3 SITUACIÓN 4
4 Null | Todo esto para cargar un TCheckListBox. Lo que pretendo es que me cargue un único ítem con el valor desconocida, de forma que no haya un ítem vacío. He probado de todo; ahora lo tengo puesto así:
| 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);
} | pero también he probado con
| Cita: | fPersona->Query->FieldByName("Literal")->IsNull
fPersona->Query->FieldByName("Literal")->AsString == ""
fPersona->Query->FieldByName("Literal")->AsString.IsEmpty() | Y siempre me añade al final un ítem con el caption vacío:
 _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 25 Feb, 2016 11:46 pm Asunto: |
|
|
| Código: | else if (cAux != NULL && lPrueba ) |
Intenta asi, ya que los valores los extraes de una consulta que vienen de una tabla y a demas en ella pueden haber valores NULL, entonces usa la misma condición de arriba.
Saludos!
Aunado a esto usa mejor un ciclo while de la siguiente manera
| Código: | fPersona->Query->First();
while( fPersona->Query->Eof == false)
{
cAux = UpperCase(fPersona->Query->FieldByName("Literal")->AsString);
if (lPrueba && (cAux == "DESCONOCIDA" || cAux == NULL))
{
CheckListBox2->Items->Add("Desconocida");
lPrueba = true;
}
else if (cAux != NULL && lPrueba )
CheckListBox2->Items->Add(fPersona->Query->FieldByName("Literal")->AsString);
fPersona->Query->Next();
} |
Con el ciclo for llegas a final de la tabla, pero NO se evalua el final, por lo tanto te incrementa un registro "fantasma" que bien puede ser el que te esté dando problemas. _________________
 |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
|