Jump to content
Fórum Script Brasil
  • 0

Como Somar valores no DbGrid


robinhocne

Question

Tenho um formulário de libro caixa que mostra os dados que foram lançados do dia, mas gostaria de colocar no fim do DbGrid que mostra os valores creditados a soma total do dia no caso somar o que está lancado no dia atual e mostrar o saldo total do caixa do respectivo mês.

MAs ai eu queria saber como posso fazer, se eu coloco um outro dbgrid mostrando ou coloco edits para mostrar esses resultados, e como eu faço isso quer dizer os dados?

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

robinhocne, acredito ficar legal você colar em edits, mostrando os totais da sua consulta.

essa rotina varre a query calculando os valores, o "FormatFloat" Formata para mascara de moeda para exibir em um edit.

falou.

Var
Valor : Real;
begin
  Valor := 0;
  Query1.First;
  While not Query1.Eof Do
  Begin
   Valor := Valor + Query1.FieldByName('Valor').AsFloat;
   Query1.Next;
  End;
  Edit1.Text := FormatFloat('##0.00',Valor);

end;

Link to comment
Share on other sites

  • 0
robinhocne, acredito ficar legal você colar em edits, mostrando os totais da sua consulta.

essa rotina varre a query calculando os valores, o "FormatFloat" Formata para mascara de moeda para exibir em um edit.

falou.

Var
Valor : Real;
begin
  Valor := 0;
  Query1.First;
  While not Query1.Eof Do
  Begin
   Valor := Valor + Query1.FieldByName('Valor').AsFloat;
   Query1.Next;
  End;
  Edit1.Text := FormatFloat('##0.00',Valor);

end;
Ok, Erso: Fiz dessa maneira:
procedure Tfrmcai.TotalCaixa;
Var
Valor : Real;
begin
  Valor := 0;
  DtmIza.QryIza.First;
  While not DtmIza.QryIza.Eof Do
  Begin
   Valor := Valor + DtmIza.QryIza.FieldByName('Valor').AsFloat;
   DtmIza.QryIza.Next;
  End;
  TxtTlDia.Text := FormatFloat('##0.00',Valor);

end;

Fiz uma procedure para total de caixa.

No Banco de dados na tabela de lancamentos só tenho o campo valor, que assimfica armazenado os valores lançados e baixados.

O DtmIza é o meu banco de dados e a QryIza e minha IbQuery que faço a conexão com o banco de dados, e o TxtTlDia é o Edit para mostrar o valor somado do dia:

Agora como eu vou fazer a soma dos valores lançados do dia:

Coloquei três campos que queria retorna para o usuário seria o:

Saldo do Dia > no caso as somas de lancamento que foi feito no dia

Saldo Anterior > no caso o saldo do dia Anterior

Saldo Total do Caixa > no caso o saldo somado do Saldo do Dia e Do anteiror

Preciso de ajudas!? :unsure:

Link to comment
Share on other sites

  • 0

Opa!!!

Acredito q você deva ter uma campo com a data do registro

exe: "Valor + DtmIza.QryIza.FieldByName('DATA').AsDateTime" você pode verificar se essa data é do dia d hj

e se for você soma em uma variavel separada so para os valores correspondente a hj!!

=/- assim:

Var
Valor : Real;
Valor_Dia :Real;
begin
  Valor := 0;
  Valor_Dia := 0;
  Query1.First;
  While not Query1.Eof Do
  Begin
   Valor := Valor + Query1.FieldByName('Valor').AsFloat;
   Query1.Next;

    If  Query1.FieldByName('DATA').AsDateTime = Now Then
         Valor_dia := Valor_dia + Query1.FieldByName('Valor').AsFloat; //Aqui so somara os dias d hj.

  End;
  Edit1.Text := FormatFloat('##0.00',Valor);

end;

ps: Eu não testei a rotina pode ter algum erro de sintaxe, mas a logica funciona legal!! uso muito calculos dessa forma!!!

Link to comment
Share on other sites

  • 0
...

soma.commantext:=select sum(valor) as total from tabela where condicoes

...

ntotal.caption:=soma.fieldbyname('total').assstring;

só para não gerar confusão para o robinhcne, vamos esclarecer que o relevante no exemplo é o SELECT, ou seja fazer um SUM na tabela em questão, com os campos desejados e filtrando na cláusula WHERE as informações necessárias como a data desejada.

É que commandtext é propriedade dos componente TClientDataSet e TADOCommand (por exemplo) e o robinhocne utiliza componentes ZeosLIb.

Abraços

Link to comment
Share on other sites

  • 0
...

soma.commantext:=select sum(valor) as total from tabela where condicoes

...

ntotal.caption:=soma.fieldbyname('total').assstring;

só para não gerar confusão para o robinhcne, vamos esclarecer que o relevante no exemplo é o SELECT, ou seja fazer um SUM na tabela em questão, com os campos desejados e filtrando na cláusula WHERE as informações necessárias como a data desejada.

É que commandtext é propriedade dos componente TClientDataSet e TADOCommand (por exemplo) e o robinhocne utiliza componentes ZeosLIb.

Abraços

Eu Utilizo os componentes do InterBase.

Consegui resolver!

Fiz dessa maneira:

Coloquei para vizualizar no edit mesmo:

With QryTotais do
      Begin
         QryTotais.Close;
         QryTotais.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo =  1 and pagamento = Current_date';
         QryTotais.Open;
      end;
 With QryTotais2 do
      Begin
         QryTotais2.Close;
         QryTotais2.Sql.Text := ' Select sum(valor) as "-" From Lancamento where tipo = 0 and pagamento = Current_date';
         QryTotais2.Open;
      End;
     TxtTlDia.text := ( (FloatToStr((QryTotais.FieldByName('+').AsFloat) - (QryTotais2.FieldByName('-').AsFloat)) ));

     // Saldo Total
 With QrySaldo do
      Begin
         QrySaldo.Close;
         QrySaldo.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo = 1 ';
         QrySaldo.Open;
      end;
 With QrySaldo2 do
      Begin
         QrySaldo2.Close;
         QrySaldo2.Sql.Text := ' Select sum(valor) as "-" From Lancamento where tipo = 0';
         QrySaldo2.Open;
      End;
     TxtSoma.text := ( (FloatToStr((QrySaldo.FieldByName('+').AsFloat) - (QrySaldo2.FieldByName('-').AsFloat)) ));

     // Para quando for negativo mostrar em vermelho o saldo do dia
     If StrToInt(TxtTlDia.text) < 0 Then
        TxtTlDia.font.color := ClRed
     Else
        TxtTlDia.font.color := clBlack;

     // Para quando for negativo mostrar em vermelho o saldo do Total
     If StrToInt(TxtSoma.text) < 0 Then
        TxtSoma.font.color := ClRed
     Else
        TxtSoma.font.color := clBlack;
Mas gostaria de atribuir mais duas vizualizações para o Usuário, só preciso de ajuda para terminar! Pois queria mostrar em outro edit o saldo do mes anterior o saldo total do mes anterior, sei que mais ou menos fica assim, só preciso de ajuda para que como eu faço para ele somar só o do mes anterior: No bando de dados eu tenho o campo pagamento que me fala qual o dia do que foi pago ou quitado!
With QrySaldo do
      Begin
         QrySaldo.Close;
         QrySaldo.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo = 1 and pagamento = ....?';
         QrySaldo.Open;
      end;
 With QrySaldo2 do
      Begin
         QrySaldo2.Close;
         QrySaldo2.Sql.Text := ' Select sum(valor) as "-" From Lancamento where tipo = 0 and pagamento = ....?';
         QrySaldo2.Open;
      End;
     TxtSoma.text := ( (FloatToStr((QrySaldo.FieldByName('+').AsFloat) - (QrySaldo2.FieldByName('-').AsFloat)) ));
E também para somar o total do mes que já foi lancado, tipo somar o do decorrente mes:
With QrySaldo do
      Begin
         QrySaldo.Close;
         QrySaldo.Sql.Text := 'Select sum(Valor)as "+" From Lancamento where tipo = 1 and pagamento = ....?';
         QrySaldo.Open;
      end;
 With QrySaldo2 do
      Begin
         QrySaldo2.Close;
         QrySaldo2.Sql.Text := ' Select sum(valor) as "-" From Lancamento where tipo = 0 and pagamento = ....?';
         QrySaldo2.Open;
      End;
     TxtSoma.text := ( (FloatToStr((QrySaldo.FieldByName('+').AsFloat) - (QrySaldo2.FieldByName('-').AsFloat)) ));

Resolvido

Edited by robinhocne
Link to comment
Share on other sites

  • 0

Bom Dia, preciso d um auxilio, avalie a possibilidade de me ajudar...

Possuo um DGrid onde exibo as consultas sql de um CAIXA, DataSet (ZQuery), onde constam as colunas COD, DESCRIÇÂO, R$ LANÇ, R$ TOTAL, TIPO (Despesa ou RECEITA), quero visualizar como extrato bancario, quando eu gero uma consulta geral com todos os lançamentos, tudo OK, o problema é quando eu filtro por um periodo (data) ou tipo (despesa ou receita), pois não estou conseguindo atualiza-la a cada lançamento, alguma sugestão?...segue acima o modelo de visualização do DBGRID...

CREATE TABLE `caixa` (

`CX_cd` int(10) NOT NULL auto_increment,

`CX_dtAtual` date NOT NULL,

`CX_desc` varchar(50) NOT NULL,

`CX_valLan` float(8,2) NOT NULL,

`CX_saldo` float(8,2) NOT NULL,

`CX_tipo` varchar(10) NOT NULL,

`CX_obs` text,

`COR_cd` int(10) default NULL,

`USU_cd` int(10) default NULL,

`MOT_cd` int(10) default NULL,

PRIMARY KEY (`CX_cd`),

UNIQUE KEY `CX_cd` (`CX_cd`),

KEY `COR_cd` (`COR_cd`),

KEY `USU_cd` (`USU_cd`),

KEY `MOT_cd` (`MOT_cd`),

CONSTRAINT `caixa_fk` FOREIGN KEY (`COR_cd`) REFERENCES `corridas` (`COR_cd`) ON DELETE NO ACTION ON UPDATE CASCADE,

CONSTRAINT `caixa_fk1` FOREIGN KEY (`USU_cd`) REFERENCES `usuarios` (`USU_cd`) ON DELETE NO ACTION ON UPDATE CASCADE,

CONSTRAINT `caixa_fk2` FOREIGN KEY (`MOT_cd`) REFERENCES `motocicletas` (`MOT_cd`) ON DELETE NO ACTION ON UPDATE CASCADE

) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1 AVG_ROW_LENGTH=16384 COMMENT='InnoDB free: 3072 kB; (`COR_cd`) REFER `me/corridas`(`COR_cd';

Exemplo1: Correto assim...

Cód Data Lanç. Descrição R$ Valor R$ Saldo Tipo

8 12/11/2011 DESPESA R$ 10,00 R$ 42,00 DESPESA

9 12/11/2011 DESPESA1 R$ 2,00 R$ 40,00 DESPESA

10 12/11/2011 RECEITA R$ 10,00 R$ 50,00 RECEITA

11 12/11/2011 RECEITA1 R$ 5,00 R$ 55,00 RECEITA

12 12/11/2011 DESPESA2 R$ 5,00 R$ 50,00 DESPESA

13 12/11/2011 RECEITA2 R$ 15,00 R$ 65,00 RECEITA

Exemplo 2: ERRADO assim...

Cód Data Lanç. Descrição R$ Valor R$ Saldo Tipo

8 12/11/2011 DESPESA R$ 10,00 R$ 42,00 DESPESA

9 12/11/2011 DESPESA1 R$ 2,00 R$ 40,00 DESPESA

12 12/11/2011 DESPESA2 R$ 5,00 R$ 50,00 DESPESA

Exemplo 2: Correto seria assim...

Cód Data Lanç. Descrição R$ Valor R$ Saldo Tipo

8 12/11/2011 DESPESA R$ 10,00 R$ 42,00 DESPESA

9 12/11/2011 DESPESA1 R$ 2,00 R$ 40,00 DESPESA

12 12/11/2011 DESPESA2 R$ 5,00 R$ 35,00 DESPESA

https://byfiles.storage.live.com/y1p3yroDqa...ERTO.png?psid=1

https://byfiles.storage.live.com/y1pxXIxOKJ...RADO.png?psid=1

_________________

Gilson de Souza Carvalho

Celular: (62) 9669 2000

E-mail/MSN: gaucho.gilson@hotmail.com

Skype: gaucho.gilson

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.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.6k
×
×
  • Create New...