Jump to content
Fórum Script Brasil
  • 0

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


Question


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 to post
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to post
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.



  • Forum Statistics

    • Total Topics
      148692
    • Total Posts
      644525
×
×
  • Create New...