Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-05-2007
aprendiz2 aprendiz2 is offline
Miembro
 
Registrado: dic 2006
Posts: 70
Poder: 18
aprendiz2 Va por buen camino
NullAsZero en Delphi ?

Alguien seria tan amable de decirme si existe en Delphi alguna variable de entorno que funcione igual a la del Paradox NullAsZero ?

Sobre todo para SQL en Delphi, donde los NULL a veces son un problema, al hacer operaciones aritmeticas "horizontales" ( en el mismo registro ).

Por ejemplo:

Código SQL [-]
Select (Col1 + Col2) as Suma
From MiTabla

asumiendo que Col1 y Col2 son columnas de tipo numerico, y un registro contiene un NULL en cualquiera de esas dos columnas, la Suma seria NULL
para ese registro ( horizontalmente hablando ).


Se trata de que alguna variable de entorno permita interpretar a los NULL como ceros, a opcion del programador.

Muchas gracias, Saludos a todos !!!!
Responder Con Cita
  #2  
Antiguo 24-05-2007
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Buenos dias.
Lo que pides es una función SQL, no de Delphi.
Si usas FireBird 1.5 o superior lo puedes hacer con la instruccion COALESCE

Ejp:
Código SQL [-]
Select COALESCE(Col1 + Col2, 0) as Suma
From MiTabla
si uno de ellos (col1 o col2) es null, el resultado será CERO.


Código SQL [-]
Select (COALESCE(Col1, 0) + COALESCE(Col2, 0)) as Suma
From MiTabla
Si cualquiera de ellos es NULL, se sumará CERO
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...

Última edición por defcon1_es fecha: 24-05-2007 a las 12:53:07.
Responder Con Cita
  #3  
Antiguo 24-05-2007
aprendiz2 aprendiz2 is offline
Miembro
 
Registrado: dic 2006
Posts: 70
Poder: 18
aprendiz2 Va por buen camino
Gracias por la informacion

Muchas gracias, Defcon1_es !

Estoy trabajando con el SQL que viene con Delphi ( version 5 ), usando tablas tipo Paradox / BDE.

( Entiendo le llaman Local SQL al ).

Sio alguien sabe de alguna forma de lograr interpretar los NULL como ceros, le ruego me enseñe como poder hacerlo.


Muchas gracias !!! Saludos !!!
Responder Con Cita
  #4  
Antiguo 25-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues el SQL local me parece que no cuenta con Coalesce o equivalente. Si ha de hacerse con SQL podrías intentar algo como

Código SQL [-]
select a,b,a+b
from tabla
where a is not null and b is not null

union all

select a,b,b
from tabla
where a is null and b is not null

union all

select a,b,a
from tabla
where a is not null and b is null

union all

select a,b,0
from tabla
where a is null and b is null

aunque lo veo bastante chapucero.

Podrías intentarlo del lado del cliente agregando un campo calculado al Table que uses, por ejemplo:

Código Delphi [-]
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
  DataSet['suma'] :=
    DataSet.FieldByName('a').AsInteger +
    DataSet.FieldByName('b').AsInteger;
end;

// Saludos
Responder Con Cita
  #5  
Antiguo 25-05-2007
aprendiz2 aprendiz2 is offline
Miembro
 
Registrado: dic 2006
Posts: 70
Poder: 18
aprendiz2 Va por buen camino
Gracias !!

"Al Leon se le reconoce por las garras !"

Es increible !!!! Roman siempre encuentra una solucion ingeniosa y elegante !!!!

Con mucho respeto lo llamare G.M.Roman de ahora en adelante. ( G.M. --> Grand Master ).

Si usted estuviese en Borland, estoy seguro que Delphi seria mucho mejor, y definitivamente mejor documentado !!!

Mi admiracion y gran respeto para usted, por su inteligencia, conocimiento, facilidad de expresion y tanta paciencia !!!

Le deseo siempre lo mejor !!!
Responder Con Cita
  #6  
Antiguo 25-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
La consulta anterior- como dije -es bastante chapucera. Aquí te pongo otra, igual de chapucera pero quizá más eficiente y manejable:

Código SQL [-]
select
  a,b,
  cast(cast(a as char(10)) || '' as float) +
  cast(cast(b as char(10)) || '' as float) suma
from tabla

suponiendo aquí, que a y b son de tipo NUMERIC. El CAST interno,

Código SQL [-]
cast(a as char(10)) || ''

fuerza el valor NULL a ser una cadena, de manera que el CAST exterior ya lo convierte a 0. Si el valor no es NULL, el doble CAST simplemente convierte a cadena y de vuelta a número sin alterar nada.

De esta manera nos evitamos los UNION y nos permite agregar más columnas a la suma. Con el método del UNION, por cada columna extra, se requeriría agregar otro tanto de consultas, es decir, con n columnas se tendrían que usar 2^n consultas en la unión.

Por otra parte, yo prefiero que sigas llamándome roman, que ése es mi nombre. Lo demás, si bien agradezco el halago, sólo son palabras. Aquí somos todos iguales.

// Saludos
Responder Con Cita
  #7  
Antiguo 25-05-2007
aprendiz2 aprendiz2 is offline
Miembro
 
Registrado: dic 2006
Posts: 70
Poder: 18
aprendiz2 Va por buen camino
Muy bonita solucion !!

Roman, muy bonita solucion !!!.
Con esto queda mas que resuelto el problema !

Otra vez le agradezco !!!

Saludos y les deseo lo mejor !

PD: Tengo otra pregunta acerca de SQL, pero mejor la pongo en otro hilo, porque no tiene nada que ver con esto.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta Delphi 6, Delphi 2005 y Delphi 2006 Leviatan Varios 6 18-08-2007 16:02:08


La franja horaria es GMT +2. Ahora son las 17:00:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi