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

(Resolvido) Somar registros banco de dados com critérios


device

Pergunta


Ola amigos.
Ainda levando uma surra com SQL. Então fui por outro caminho.
 

procedureTfrmPrincipal.BotaoCalcularClick(Sender: Tobject);
begin
   vvalor:=0;
   vtotDespesa:=0;
   vmes:=frmPiricipal.ComboMes.Text; // aqui seleciono o mes
   vano:=frmPrincipal.ComboAno.Text; // aqui seleciono o ano
   vItem:=frmPrincipal.ComboItem.Text; 

   frmPrincipal.IBTableDebito.First;
   while not (frmPrincipal.IBTableDebito.Eof)do
   begin
      if(frmPrincipal.IBTableDebito.Locate ('MES; ANO; ITEM', varArrayof([vmes, vano, vitem]),[]))then // Aqui ele encontra a linha que tem o item Valor (string)
         begin
            vvalor:=srttofloat(frmPrincipal.IBTableDebito.FieldByName('VALOR').asString);
            vtotDespesa:=vtotDespesa+vvalor;
            EditSoma.Text:=floattostr(vtotDespesa);
            frmPrincipal.IBTableDebito.Next;
         end;
   end;
end;



A idéia é ir para o começo do banco de dados e usar um while para varrer a soma (campo Valor) definida pelo MES, ANO e ITEM, ate o final da tabela
Por exemplo, seleciono o mes (janeiro), o Ano (2019) o Item (farmacia, por exemplo). Ele vai ate o final e mostra o mvalor durante o mes, quanto foi gasto de farmacia. 

So que não está funcionando bem... So le a primeira linha e fica pulando do while para o If locate, incessantemente (só haviam 3 registros para ler)

Alguma santa alma pode ajudar... Acho que isso fnciona, mas deve ter algum erro aí nessas linhas e não encontro onde

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Sua tabela deve estar ordenada por mes, ano e item para que funcione

veja a modificação no código

procedureTfrmPrincipal.BotaoCalcularClick(Sender: Tobject);
begin
   vvalor:=0;
   vtotDespesa:=0;
   vmes:=frmPiricipal.ComboMes.Text; // aqui seleciono o mes
   vano:=frmPrincipal.ComboAno.Text; // aqui seleciono o ano
   vItem:=frmPrincipal.ComboItem.Text;

   frmPrincipal.IBTableDebito.First;

   if(frmPrincipal.IBTableDebito.Locate ('MES; ANO; ITEM', varArrayof([vmes, vano, vitem]),[]))then // Aqui ele encontra a linha que tem o item Valor (string)
      begin
         while not (frmPrincipal.IBTableDebito.Eof)do
         begin
            vvalor:=srttofloat(frmPrincipal.IBTableDebito.FieldByName('VALOR').asString);
            vtotDespesa:=vtotDespesa+vvalor;
            EditSoma.Text:=floattostr(vtotDespesa);

            if frmPrincipal.IBTableDebito.FieldByName('ITEM').asString <> vItem then exit;
            frmPrincipal.IBTableDebito.Next;
         end;
      end;
end;

abraço

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...