Array
(
)

Calculos em um campo sem valor...

Gigatel
   - 01 dez 2005

e aí ? blz..tenho esta função

#Código


procedure T_FORM_CLIENTES.FTCLICALCSERVFEITO;
var
i,r: integer;
n: real;
begin
n:= 0;
r:= BD_AM_OSOE.RecordCount;
BD_AM_OSOE.First;
for i:=1 to r do
begin
n:= n + BD_AM_OSOEGS_AMOOEI_VALOR_TOT.asfloat;
BD_AM_OSOE.Next;
end;
Label28.caption:= formatfloat(´R$ ,#,,0.00´,n);
end;


eu tenho um arquivo morto, onde quero somar os valores recebidos só que as vez num exite valor em algum registro, aí temos um erro..aí que vem a dúvida tem como fazer esta função aó ignorar o campo ou uma outra forma de fazer o cálculo ?..flw t+


Massuda
   - 01 dez 2005

Antes de somar, veja se o campo é IsNull (vazio); seria algo assim...#Código

...
for i:=1 to r do
begin
if not BD_AM_OSOEGS_AMOOEI_VALOR_TOT.IsNull then
n:= n + BD_AM_OSOEGS_AMOOEI_VALOR_TOT.asfloat;
BD_AM_OSOE.Next;
...



Emerson
   - 01 dez 2005

olha, não sei porque está dando erro, mas sugiro uma alteração na sua rotina:

#Código

procedure T_FORM_CLIENTES.FTCLICALCSERVFEITO;
var
i: integer;
n: double;
begin
n:= 0;
BD_AM_OSOE.First;
while not BD_AM_OSOE.Eof do
begin
n := n + BD_AM_OSOEGS_AMOOEI_VALOR_TOT.asfloat;
BD_AM_OSOE.Next;
end;
Label28.caption:= formatfloat(´R$ ,#,,0.00´,n);
end;


evite o uso de recordcount. ele varre todo o dataset para contar os registros. depois você varre novamente para fazer a soma. dependendo do número de registros esse processo pode tornar-se muito lento. da forma acima o dataset é varrido uma única vez.

p.s.: não deveria acontecer nenhum erro no cálculo pois, no caso de campos nulos, o designador de tipo sempre traz o menor valor possível.
por exemplo:
AsFloat, AsInteger, AsCurrency trarão 0
AsString será ´´
AsDate será 01/01/1900 ou 31/12/1899 (depende da janela do S.O.)
e assim por diante.


Gigatel
   - 01 dez 2005

Deu certinho...aproveitei as dicas de todos...tirei o recont e implementei a dica do massuda e deu certo, por algum motivo emerson, continuou dando erro mesmo depois de ter usado sua modificação... más aproveitei sua idéia no q diaz respeito ao recont...ficou assim...

#Código


procedure T_FORM_CLIENTES.FTCLICALCSERVFEITO;
var
i: integer;
n: double;
begin
n:= 0;
BD_AM_OSOE.First;
while not BD_AM_OSOE.Eof do
begin
if not BD_AM_OSOEGS_AMOOEI_VALOR_TOT.IsNull then
n := n + BD_AM_OSOEGS_AMOOEI_VALOR_TOT.asfloat;
BD_AM_OSOE.Next;
end;
Label28.caption:= formatfloat(´R$ ,#,,0.00´,n);
end;

e deu certinho

vlw...obrigado..t+