Calculos em um campo sem valor...
e aí ? blz..tenho esta função
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+
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
Curtidas 0
Respostas
Massuda
01/12/2005
Antes de somar, veja se o campo é IsNull (vazio); seria algo assim...
... 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; ...
GOSTEI 0
Emerson Nascimento
01/12/2005
olha, não sei porque está dando erro, mas sugiro uma alteração na sua rotina:
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.
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.
GOSTEI 0
Gigatel
01/12/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...
e deu certinho
vlw...obrigado..t+
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+
GOSTEI 0