Calculos em um campo sem valor...
01/12/2005
0
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+
Gigatel
Posts
01/12/2005
Massuda
... 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; ...
01/12/2005
Emerson Nascimento
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.
01/12/2005
Gigatel
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+
Clique aqui para fazer login e interagir na Comunidade :)