Jump to content
Fórum Script Brasil
  • 0

Somatória


Guest Vitor Eduardo
 Share

Question

Guest Vitor Eduardo

Olá, bom dia

tenho uma cds com a seguinte estrutura:

idifl - Integer

debitoifl - float

creditoifl - float

saldoifl - float

Eu gostaria de criar dois campos para armazenar a somatória dos campos debito e credito, com os quais usaria para calcular o saldo. Estes cálculos, soma do campo, e cálculo do saldo seriam efetuados toda vez que o usuário adicionar um registro na cds. Para tornar o cálculo mais difícil o campo idifl deve ter o mesmo valor nos registros calculados.

Exemplo:

idifl       creditoifl       debitoifl       saldoifl
------------------------------------------------
1          10,00                              10,00
1                              5,00            5,00
2          30,00                              30,00
2          70,00                            100,00
2                              20,00          80,00

Veja que o valor do campo saldo é gerado a cada registro adicionado levando-se em conta o valor adicionados no débito ou crédito e principalmente idifl. Note que não toma o saldo de 5,00 para o cálculo do saldo no registro novo, por causa do idifl.

digamos que agora eu deseja-se adicionar a sguinte linha:

idifl - 2

debitoifl - 30,00

o saldoifl - terá o resultado de 50,00

Como Faço?

Espero teu contato.

Obrigado

Vitor Eduardo

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0
Guest --felipe --
Olá, bom dia

tenho uma cds com a seguinte estrutura:

idifl - Integer

debitoifl - float

creditoifl - float

saldoifl - float

Eu gostaria de criar dois campos para armazenar a somatória dos campos debito e credito, com os quais usaria para calcular o saldo. Estes cálculos, soma do campo, e cálculo do saldo seriam efetuados toda vez que o usuário adicionar um registro na cds. Para tornar o cálculo mais difícil o campo idifl deve ter o mesmo valor nos registros calculados.

Exemplo:

idifl creditoifl debitoifl saldoifl

------------------------------------------------

1 10,00 10,00

1 5,00 5,00

2 30,00 30,00

2 70,00 100,00

2 20,00 80,00

Veja que o valor do campo saldo é gerado a cada registro adicionado levando-se em conta o valor adicionados no débito ou crédito e principalmente idifl. Note que não toma o saldo de 5,00 para o cálculo do saldo no registro novo, por causa do idifl.

digamos que agora eu deseja-se adicionar a sguinte linha:

idifl - 2

debitoifl - 30,00

o saldoifl - terá o resultado de 50,00

Como Faço?

Espero teu contato.

Obrigado

Vitor Eduardo

não entendi cara, mas tem 2 jeitos de você fazer isso:

- através de triggers no seu banco de dados

- inserir o calculo no evento OnChange.

vamos supor que o saldoifl seja (idifl*debitoifl), e supondo tambem que no seu form de registro você use os componentes:

DBEdit1 - idifl

DBEdit2 - debitoifl

DBEdit3 - saldoifl

no evento OnChange do DBEdit1 e DBEdit2:

procedure TPrincipalForm.DBEdit1Change(Sender: TObject);
begin
  if trim(DBEdit1.text)<>'' and trim(DBEdit2.text)<>'' then
    DBEdit3.text:=floattostr(strtofloat(DBEdit1.text)*strtofloat(DBEdit2.text));
end;

procedure TPrincipalForm.DBEdit2Change(Sender: TObject);
begin
  if trim(DBEdit1.text)<>'' and trim(DBEdit2.text)<>'' then
  DBEdit3.text:=floattostr(strtofloat(DBEdit1.text)*strtofloat(DBEdit2.text));
end;

se não conseguir fazer o calculo da uma explicadinha melhor que eu tento ajuda

abraços

Link to comment
Share on other sites

  • 0
- inserir o calculo no evento OnChange.

vamos supor que o saldoifl seja (idifl*debitoifl), e supondo tambem que no seu form de registro você use os componentes:

DBEdit1 - idifl

DBEdit2 - debitoifl

DBEdit3 - saldoifl

no evento OnChange do DBEdit1 e DBEdit2:

procedure TPrincipalForm.DBEdit1Change(Sender: TObject);
begin
  if trim(DBEdit1.text)<>'' and trim(DBEdit2.text)<>'' then
    DBEdit3.text:=floattostr(strtofloat(DBEdit1.text)*strtofloat(DBEdit2.text));
end;

procedure TPrincipalForm.DBEdit2Change(Sender: TObject);
begin
  if trim(DBEdit1.text)<>'' and trim(DBEdit2.text)<>'' then
  DBEdit3.text:=floattostr(strtofloat(DBEdit1.text)*strtofloat(DBEdit2.text));
end;

se não conseguir fazer o calculo da uma explicadinha melhor que eu tento ajuda

abraços

felipe, vai aqui uma dica para você também:

Quando utilizar componentes data-aware não use a propriedade Text como exemplificado. Duas razões:

1) acaba tendo que fazer uso de funções auxiliares;

2) se estivermos falando de valores formatados como "2.530,50", a função de conversão vai falhar. você teria que antes transformá-la em "2530.50".

Então, dê preferência em utilizar os campos do CDS direto, como no exemplo:

if CDSContasDebitoifl.IsNull then // equivale a testar " text='' " (na maioria das vezes)

CDSContasSaldoifl.Value := CDSContasSaldoifl.Value -CDSContasDebitoifl.Value;

ou usando o tipo retornado forçado (.AsInteger, .AsFloat,...) porque se a variável tiver nula ele será convertido para o valor correspondente (neste caso zero):

CDSContasSaldoifl.AsFloat := CDSContasSaldoifl.AsFloat -CDSContasDebitoifl.AsFloat;

Abraços

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...