Calculos em um campo sem valor...

01/12/2005

0

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

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

Gigatel

Responder

Posts

01/12/2005

Massuda

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; 
...



Responder

01/12/2005

Emerson Nascimento

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

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.


Responder

01/12/2005

Gigatel

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...

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+


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar