Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) calcular itens selecionados de um campo


vms

Pergunta

ola pessoal

tenho uma tabela paradox com os seguintes campos

departamento(A)

valor($)

no departamento tem os seguintes itens:

compra

venda

tenho varias compras e venda durante o mes

como faço pra calcular total só da compra e o total so de venda

e colocar em Edit

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Vai um exemplo bem simples ... digamos que a minha query se chama QDepart, e que na minha tabela tenha os campos : compras e vendas

procedure TForm1.Button1Click(Sender: TObject);
var i : integer; valComp, valVend : real;
begin
   valComp := 0;
   valVend := 0;
   for i := 1 to QDepart.recordcount do
      begin
         valComp := valComp + QDepartCompras.Value;
         valVend := valVend + QDepartVendas.Value;
      end;

   Edit1.Text := 'Total das Compras : R$ ' + format(%d,[valComp]);
   Edit2.Text := 'Total das Vendas : R$ ' + format(%d,[valVend]);
end;

OBS: isto é apenas uma idéia de como fazer....

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

ola jhonas

acho que me expressei errado

a dica é interessante, mas não era bem isso

a tabela é assim!

Departamento|A|Valor|$

durante o mes compro varios produtos p/ os departamentos

Departamento - Valor

Manutenção - 50,00

Projeto - 100,00

Projeto - 150,00

Zeladoria - 20,00

Zeladoria - 30,00

...

no mes inteiro vou ter varias compras dessa

queria fazer a soma apenas de Projeto

Apenas de Zeladoria

Link para o comentário
Compartilhar em outros sites

  • 0
queria fazer a soma apenas de Projeto

Apenas de Zeladoria

amigo ... o raciocínio é o mesmo ( é só adaptar a idéia ao seu código ) .... não tem mistério

procedure TForm1.Button1Click(Sender: TObject);
var i : integer; valComp0, valComp1 : real;
begin
   valComp0 := 0;
   valComp1 := 0;

   for i := 1 to QDepart.recordcount do
      begin
         if QDepartDepartamento.Value = 'Projeto' then
            valComp0 := valComp0 + QDepartValor.Value;

         if QDepartDepartamento.Value = 'Zeladoria' then
             valComp1 := valComp1 + QDepartValor.Value;

         QDepart.Next;
      end;

   Edit1.Text := 'Total das Compras (Departamento Projetos) : R$ ' + format(%d,[valComp0]);
   Edit2.Text := 'Total das Compras (Departamento Zeladoria) : R$ ' + format(%d,[valComp1]);
end;

OBS: existem outras maneiras de se obter o mesmo resultado

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Beleza Jhonas!

era exatamente isso que eu queria, mas ta dando erro

no primeiro click, soma normalmente, mas se clico denovo

um Edit zera (0) e o outro fica com um valor enorme.

outro erro ta no formato

[Error]UPTest.pas(98): Illegal character in input file: '%' ($25)

[Error] UPTest.pas(98): There is no overloaded version of 'Format' that can be called with these arguments

fiz uma alteração pra dar "certo"

o que pode ta errado?

fiz dessa forma.

procedure TForm1.ToolButton4Click(Sender: TObject);
var
  i : integer;
  valComp0, valComp1 : real;
begin
  valComp0 := 0;
  valComp1 := 0;
  for i := 1 to DM.Q1.recordcount do
  begin
    if DM.Q1Departamento.Value = Edit3.Text then
      valComp0 := valComp0 + DM.Q1Valor.Value;
    if DM.Q1Departamento.Value = 'ZELADORIA' then
      valComp1 := valComp1 + DM.Q1Valor.Value;
    DM.Q1.Next;
    Edit1.Text := 'Total Dep. Projetos ) : R$ ' + floattostr(valComp0);
    Edit2.Text := 'Total Dep. Zeladoria) : R$ ' + floattostr(valComp1);
//Edit1.Text := 'Total Dep. Projetos ) : R$ ' + format(%d,[valComp0]);
//Edit2.Text := 'Total Dep. Zeladoria) : R$ ' + format(%d,[valComp1]);
  end;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Modifique desta maneira

procedure TForm1.ToolButton4Click(Sender: TObject);
var
    i : integer;
    valComp0, valComp1 : real;
begin
    valComp0 := 0;
    valComp1 := 0;

    for i := 1 to DM.Q1.recordcount do
       begin
           if DM.Q1Departamento.Value = Edit3.Text then
              valComp0 := valComp0 + DM.Q1Valor.Value;

           if DM.Q1Departamento.Value = 'ZELADORIA' then
              valComp1 := valComp1 + DM.Q1Valor.Value;
          
           DM.Q1.Next;

       end;

       Edit1.Text := 'Total Dep. Projetos ) : R$ ' + format('%d',[valComp0]);
       Edit2.Text := 'Total Dep. Zeladoria) : R$ ' + format('%d',[valComp1]);
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

estou usando delphi 3, 5 e 7 ... funciona

voce pode tentar desta outra maneira

Edit1.Text := 'Total Dep. Projetos : R$ ' + FormatFloat('#,##0.00',valComp0);

Edit2.Text := 'Total Dep. Zeladoria : R$ ' + FormatFloat('#,##0.00',valComp1);

procure no help do delphi por Format strings

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

ola jhonas

desde já agradeço pela paciencia

mas esses format's não estao funcionando.

na verdade o format não é muito importante agora,

queria resolver o outro problema.

quando clico uma vez no button o calculo vai

correto mas quando clico outra vez o edit zera (0)

o que pode ser?

porque dessa forma não consigo atualizar

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas, permita-me uma parte nesta discussão.

queria resolver o outro problema.

quando clico uma vez no button o calculo vai

correto mas quando clico outra vez o edit zera (0)

o que pode ser?

vms, ao identar seu código lá no post#5, observei que algum problema com a soma realmente você pode ter.

Observe que você não está posicionando o dataset no primeiro registro antes de percorrer todos os existentes. Assim, na primeira vez o dataset está posicionado no registro inicial e, ao ler os próximos (via Next), voce vai movendo o dataset até seu último registro. Mas, em uma segunda vez, o dataset está no último registro e você vai somando o valor atual (o último, onde ficou na operação anterior) "n" vezes (n=RecordCount) - logo não está correto.

Outra coisa, observada, é que você não seguiu exatamente a idéia que o colega Jhonas colocou no post#4. Lá ele lhe exemplificou colocando a atribuição do somatório aos edits, apenas após a conclusão do loop - o correto.

Assim, segue aquele código corrigido nestes termos:

procedure TForm1.ToolButton4Click(Sender: TObject);
var
  i : integer;
  valComp0, valComp1 : real;
begin
  valComp0 := 0;
  valComp1 := 0;

// A cada click do botão, você tem que realizar a soma 
// a partir do registro inicial, então, você deve posicionar
// o dataset no registro inicial
  DM.Q1.First;

  for i := 1 to DM.Q1.recordcount do
  begin
    if DM.Q1Departamento.Value = Edit3.Text then
      valComp0 := valComp0 + DM.Q1Valor.Value;
    if DM.Q1Departamento.Value = 'ZELADORIA' then
      valComp1 := valComp1 + DM.Q1Valor.Value;
    DM.Q1.Next;
  end;

// Estes edits recebem o total após a conclusão da soma, portanto
// esta atribuição TEM que ficar fora do loop!!!
  Edit1.Text := 'Total Dep. Projetos ) : R$ ' + floattostr(valComp0);
  Edit2.Text := 'Total Dep. Zeladoria) : R$ ' + floattostr(valComp1);
end;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

deu certo galera

o erro de zerar no segundo clik foi corrigido

com a dica do micheus, mas ainda continuava um erro,

so atualizava uma vez, se eu alterasse o valor ele não

atualizava mais, so se reabrir o programa, então substitui

a query por uma table e deu certo

valeu pessoal.

special thanks for Jhonas end Micheus!

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...