Como somar coluna do dbgrid, e mostra num edit?
Olá galera blz?
Estou precisando somar uma coluna do dbgrid depois de fazer uma busca, e mostrar o resultado num edit ou label.
Pesquisei mais não achei, os código que eu vi, são sempre para somar duas ou mais tabelas.
Tenho uma tabela de vendas com esses campos (ID_Vendas, Empresa, Data, Valor).
Sendo que o campo Valor é DOUBLE PRECISION.
Estou usando FireBird 1.5.2 mais Delphi 7.
Estou fazendo uma consulta assim:
Essa pesquisa vai me retornar:
Empresa X, Data 27/03/2006, Valor 150,00
Empresa X, Data 27/03/2006, Valor 100,00
Gostaria de mostrar num edit ou label, a soma dos dois campo (Valor).
Desde já agradeço.
Estou precisando somar uma coluna do dbgrid depois de fazer uma busca, e mostrar o resultado num edit ou label.
Pesquisei mais não achei, os código que eu vi, são sempre para somar duas ou mais tabelas.
Tenho uma tabela de vendas com esses campos (ID_Vendas, Empresa, Data, Valor).
Sendo que o campo Valor é DOUBLE PRECISION.
Estou usando FireBird 1.5.2 mais Delphi 7.
Estou fazendo uma consulta assim:
if combobox1.Text = ´Empresa´then begin DM_Geral.IBDSEmpresa.Close; DM_Geral.IBDSEmpresa.SelectSQL.Clear; DM_Geral.IBDSEmpresa.SelectSQL.Add(´Select * From Vendas´); DM_Geral.IBDSEmpresa.SelectSQL.Add(´Where Upper(Empresa) Like:Empresa´); DM_Geral.IBDSEmpresa.ParamByName(´Empresa´).AsString:= UpperCase(Edit1.text)+´¬´; DM_Geral.IBDSEmpresa.Open;
Essa pesquisa vai me retornar:
Empresa X, Data 27/03/2006, Valor 150,00
Empresa X, Data 27/03/2006, Valor 100,00
Gostaria de mostrar num edit ou label, a soma dos dois campo (Valor).
Desde já agradeço.
Vitoreduardo
Curtidas 0
Respostas
Rogick
27/03/2006
O método q eu uso, não é o + bonito mas dá pro gasto.
É assim:
Espero ter ajudado, qq coisa posta d novo. :wink:
É assim:
... var vrTotal: Currency; begin ... // Após o Open do DataSet ou no Evento AfterOpen... with DM_Geral.IBDSEmpresa do begin DataSource1.DataSet := nil; // Desvinculado DataSource First; // Desnecessário, só por legibilidade vrTotal := 0; while not Eof do begin vrTotal := vrTotal + FieldByName(´VALOR´).AsCurrency; Next; end; First; DataSource1.DataSet := DM_Geral.IBDSEmpresa; end; Edit1.Text := Format(´¬.2n´, [vrTotal]); // Joga o valor formatado na Edit ...
Espero ter ajudado, qq coisa posta d novo. :wink:
GOSTEI 0
Martins
27/03/2006
if combobox1.Text = ´Empresa´then begin DM_Geral.IBDSEmpresa.Close; DM_Geral.IBDSEmpresa.SelectSQL.Clear; DM_Geral.IBDSEmpresa.SelectSQL.Add(´Select Sum(Valor) as ValorX From Vendas´); DM_Geral.IBDSEmpresa.SelectSQL.Add(´Where Upper(Empresa) Like:Empresa´); DM_Geral.IBDSEmpresa.ParamByName(´Empresa´).AsString:= UpperCase(Edit1.text)+´¬´; DM_Geral.IBDSEmpresa.Open;
Assim vc soma usando SQL.
Se entendi errado, me perdoe.
Boa sorte!!!
GOSTEI 0
Rogick
27/03/2006
Vou explicar melhor:
Esta função simplemente varre o DataSet incrementando os registros do campo VALOR na variável e depois joga o valor calculado na edit.
Eu disse que não era bonito, e não funciona bem quando conjunto de dados é muito grande(fica lento às vezes), mas dá pro gasto.
Esta função simplemente varre o DataSet incrementando os registros do campo VALOR na variável e depois joga o valor calculado na edit.
Eu disse que não era bonito, e não funciona bem quando conjunto de dados é muito grande(fica lento às vezes), mas dá pro gasto.
GOSTEI 0
Vitoreduardo
27/03/2006
O Martins blz?
Eu tinha feito assim como vc falo, mais acontece o seguinte erro(Field ´ID_Vendas´ not found).
Do jeito que o Rogick fez até funcionou mais só pro campo data, pro campo Empresa não, pois o tipo de consulta que eu fiz eu não preciso digitar todo o nome da Empresa, então funcionou mais só se eu digitar a primeira letra, quando digito a segunda letra da (Access violation).
Outro problema com o código do Rogick;
Quando eu faço a primeira consulta por data da certo, mais quando limpo o edit e faço uma nova pesquisa da (Access violation).
Código:
Eu tinha feito assim como vc falo, mais acontece o seguinte erro(Field ´ID_Vendas´ not found).
Do jeito que o Rogick fez até funcionou mais só pro campo data, pro campo Empresa não, pois o tipo de consulta que eu fiz eu não preciso digitar todo o nome da Empresa, então funcionou mais só se eu digitar a primeira letra, quando digito a segunda letra da (Access violation).
Outro problema com o código do Rogick;
Quando eu faço a primeira consulta por data da certo, mais quando limpo o edit e faço uma nova pesquisa da (Access violation).
Código:
var vrTotal: Currency; begin if combobox1.Text = ´Data´then begin DM_Geral.IBDSConsultaVendas.Close; DM_Geral.IBDSConsultaVendas.SelectSQL.Clear; DM_Geral.IBDSConsultaVendas.SelectSQL.Add(´Select * From Vendas´); DM_Geral.IBDSConsultaVendas.SelectSQL.Add(´Where Upper(Data) Like:Data´); DM_Geral.IBDSConsultaVendas.ParamByName(´Data´).AsDate := StrToDate(Edit1.text); DM_Geral.IBDSConsultaVendas.Open; with DM_Geral.IBDSConsultaVendas do begin DM_Geral.IBDSConsultaVendas := nil; vrTotal := 0; while not Eof do begin vrTotal := vrTotal + FieldByName(´VALOR´).AsCurrency; Next; end; First; DM_Geral.IBDSConsultaVendas := DM_Geral.IBDSConsultaVendas; end; DBText3.Caption := Format(´¬.2n´, [vrTotal]); end; end;
GOSTEI 0
Martins
27/03/2006
[b:d4c062bbb7]vitoreduardo[/b:d4c062bbb7], vamos tentar com o código abaixo Ok!
Veja se assim funciona, pois no código anterior o ID_Vendas não estaria presente na instrução SQL, agora os campos indicados por vc estão lá, teste por favor.
boa sorte!
if combobox1.Text = ´Empresa´then begin DM_Geral.IBDSEmpresa.Close; DM_Geral.IBDSEmpresa.SelectSQL.Clear; DM_Geral.IBDSEmpresa.SelectSQL.Add(´Select ID_Vendas, Empresa, Data, Sum(Valor) From Vendas´); DM_Geral.IBDSEmpresa.SelectSQL.Add(´Where Upper(Empresa) Like:Empresa´); DM_Geral.IBDSEmpresa.ParamByName(´Empresa´).AsString:= UpperCase(Edit1.text)+´¬´; DM_Geral.IBDSEmpresa.Open;
Veja se assim funciona, pois no código anterior o ID_Vendas não estaria presente na instrução SQL, agora os campos indicados por vc estão lá, teste por favor.
boa sorte!
GOSTEI 0
Vitoreduardo
27/03/2006
Martins, não funcionou.
Ocorre o seguinte erro:(Invalid expression in the select list (not contained in either an aggregate function or the Group by clause)´.
Eu até tinha tentado dessa forma mais não obtive sucesso.
Esse Edit1.text é onde eu vou digitar o nome da empresa, então eu tenho que jogar o resultado da sama em outro lugar, num edit ou label.
Mais eu já fiz isso e o erro continua.
Ocorre o seguinte erro:(Invalid expression in the select list (not contained in either an aggregate function or the Group by clause)´.
Eu até tinha tentado dessa forma mais não obtive sucesso.
if combobox1.Text = ´Empresa´then begin DM_Geral.IBDSEmpresa.Close; DM_Geral.IBDSEmpresa.SelectSQL.Clear; DM_Geral.IBDSEmpresa.SelectSQL.Add(´Select ID_Vendas, Empresa, Data, Sum(Valor) From Vendas´); DM_Geral.IBDSEmpresa.SelectSQL.Add(´Where Upper(Empresa) Like:Empresa´); DM_Geral.IBDSEmpresa.ParamByName(´Empresa´).AsString:= UpperCase(Edit1.text)+´¬´; DM_Geral.IBDSEmpresa.Open;
Esse Edit1.text é onde eu vou digitar o nome da empresa, então eu tenho que jogar o resultado da sama em outro lugar, num edit ou label.
Mais eu já fiz isso e o erro continua.
GOSTEI 0
Martins
27/03/2006
Amigo, esse erro acontece quando vc compila ou quando vc executa a ação no projeto?
Hj aqui tá complicado para pensar, vou ficar de castigo até mais tarde. Amigo, acredito q vc terá q fazer um sub-select para conseguir o q deseja, não posso nem testar pois não tenho o FB nessa máquina, apenas Ib6 q vem com o programa da Caixa - CEF.
Selec Campos, (Select Sum(Campo) from Tabela Where Codicao ) from Tabela Where Condicao.
Boa sorte!
Hj aqui tá complicado para pensar, vou ficar de castigo até mais tarde. Amigo, acredito q vc terá q fazer um sub-select para conseguir o q deseja, não posso nem testar pois não tenho o FB nessa máquina, apenas Ib6 q vem com o programa da Caixa - CEF.
Selec Campos, (Select Sum(Campo) from Tabela Where Codicao ) from Tabela Where Condicao.
if combobox1.Text = ´Empresa´then begin DM_Geral.IBDSEmpresa.Close; DM_Geral.IBDSEmpresa.SelectSQL.Clear; DM_Geral.IBDSEmpresa.SelectSQL.Add(´Select ID_Vendas, Empresa, Data,(Select Sum(Valor) as Valores From Vendas where Upper(Empresa) Like: empresa) as Valor from Vendas ´); DM_Geral.IBDSEmpresa.SelectSQL.Add(´Where Upper(Empresa) Like:Empresa´); DM_Geral.IBDSEmpresa.ParamByName(´Empresa´).AsString:= QuotedStr(UpperCase(Edit1.text))+´¬´; DM_Geral.IBDSEmpresa.Open;
Labelx.Caption := FormatFloat(´R$ #,0.00´, Dm_Geral.IBDSEmpresa.FieldByName(´Valores´).AsFloat);
Boa sorte!
GOSTEI 0
Vitoreduardo
27/03/2006
Blz Martins
Eu consegui aqui, pelo menos uma parte.
Vou continuar tentando aqui e posto o resultado.
valeu
Eu consegui aqui, pelo menos uma parte.
Vou continuar tentando aqui e posto o resultado.
valeu
GOSTEI 0
Martins
27/03/2006
Blz Martins
Eu consegui aqui, pelo menos uma parte.
Vou continuar tentando aqui e posto o resultado.
valeu
Certo, poste o q falta arrumar, q nós veremos isso, boa sorte!
GOSTEI 0
Georgecvenancio
27/03/2006
Caro colega, acrescentando ao que nosso colega Martins escreveu:
if combobox1.Text = ´Empresa´then
begin
DM_Geral.IBDSEmpresa.Close;
DM_Geral.IBDSEmpresa.SelectSQL.Clear;
DM_Geral.IBDSEmpresa.SelectSQL.Add(´Select ID_Vendas, Empresa, Data, Sum(Valor) From Vendas´);
DM_Geral.IBDSEmpresa.SelectSQL.Add(´Where Upper(Empresa) Like:Empresa´);
//Aqui está a mudança
DM_Geral.IBDSEmpresa.SelectSQL.Add(´Group by ID_Vendas,Empresa´);
DM_Geral.IBDSEmpresa.ParamByName(´Empresa´).AsString:= UpperCase(Edit1.text)+´¬´;
DM_Geral.IBDSEmpresa.Open;
if combobox1.Text = ´Empresa´then
begin
DM_Geral.IBDSEmpresa.Close;
DM_Geral.IBDSEmpresa.SelectSQL.Clear;
DM_Geral.IBDSEmpresa.SelectSQL.Add(´Select ID_Vendas, Empresa, Data, Sum(Valor) From Vendas´);
DM_Geral.IBDSEmpresa.SelectSQL.Add(´Where Upper(Empresa) Like:Empresa´);
//Aqui está a mudança
DM_Geral.IBDSEmpresa.SelectSQL.Add(´Group by ID_Vendas,Empresa´);
DM_Geral.IBDSEmpresa.ParamByName(´Empresa´).AsString:= UpperCase(Edit1.text)+´¬´;
DM_Geral.IBDSEmpresa.Open;
GOSTEI 0
Rogick
27/03/2006
O Vitor, acho o q vc fez tá certo, só que não endenteu a questão do [b:52e31bdda4]DataSource.Data[/b:52e31bdda4] receber [b:52e31bdda4]nil[/b:52e31bdda4]. Você estava jogando para nil o próprio componente(TIBQuery eu acho), quando vc deveria jogar para nil a propriedade [i]DataSet[i] do DataSource que está ligando o [b:52e31bdda4]IBDSConsultaVendas[/b:52e31bdda4] a [b:52e31bdda4]DBGrid[/b:52e31bdda4]. Isso é opicional, só para o usuário não ver o DBGrid ´rolando´ até o final e depois voltar para o início. E isso funciona para qualquer query, desde que tenha o campo valor, e para otimizar o código, vc pode colocá-lo no Evento [b:52e31bdda4]AfterOpen[/b:52e31bdda4] do TIBQuery ou criar uma procedure para isso.
Posta aqui o nome do [b:52e31bdda4]DataSource[/b:52e31bdda4] que vc tá usando para eu te mandar o código como ele pode ficar.
Posta aqui o nome do [b:52e31bdda4]DataSource[/b:52e31bdda4] que vc tá usando para eu te mandar o código como ele pode ficar.
GOSTEI 0
Martins
27/03/2006
Tantos códigos e nada certo, faltava apenas pensar e verificar q faltava colocar um group by, para agruparmos.
Teste com o código abaixo, testei ontem na casa de um colega q roda Firebird e funcionou, fiz uma tabela com a estrutura passada por vc.
Chame no Label com o código.
Boa sorte!!!
Teste com o código abaixo, testei ontem na casa de um colega q roda Firebird e funcionou, fiz uma tabela com a estrutura passada por vc.
select Empresa, Id_Vendas, Sum(Valor) from testes where Id_vendas = 2 group by Empresa, Id_Vendas;
if combobox1.Text = ´Empresa´then begin DM_Geral.IBDSEmpresa.Close; DM_Geral.IBDSEmpresa.SelectSQL.Clear; DM_Geral.IBDSEmpresa.SelectSQL.Add(´Select ID_Vendas, Empresa, Data, Sum(Valor) as Valores From Vendas where Upper(Empresa) Like: empresa Group by ID_Vendas, Empresa, Data ´); DM_Geral.IBDSEmpresa.SelectSQL.Add(´Where Upper(Empresa) Like:Empresa´); DM_Geral.IBDSEmpresa.ParamByName(´Empresa´).AsString:= QuotedStr(UpperCase(Edit1.text))+´¬´; DM_Geral.IBDSEmpresa.Open;
Chame no Label com o código.
Labelx.Caption := FormatFloat(´R$ #,0.00´, Dm_Geral.IBDSEmpresa.FieldByName(´Valores´).AsFloat);
Boa sorte!!!
GOSTEI 0
Martins
27/03/2006
Tantos códigos e nada certo, faltava apenas pensar e verificar q faltava colocar um group by, para agruparmos.
Estou falando dos códigos q postei ontem as pressas, quanto aos códigos dos demais colegas, não me considero apto a julgá-los, refiro-me expressamente aos meus.
Teste com o código abaixo, testei ontem na casa de um colega q roda Firebird e funcionou, fiz uma tabela com a estrutura passada por vc.
select Empresa, Id_Vendas, Sum(Valor) from testes where Id_vendas = 2 group by Empresa, Id_Vendas;
Fiz um teste no IbExpert somente para verificar resultados, nada muito importante, nem igual a sua realidade.
:wink:
GOSTEI 0
Odacir
27/03/2006
Mas o colega que fez a pergunta, gostaria de mostrar todos os registros da consulta no DBGrid, e a somatória da coluna em questão em um Edit.
Com o SQL mostrado, teria de ser feito duas consultas ao banco de dados. Uma para mostrar os dados no grid, e a outra apenas para fazer o somatório, correto?
Um campo calculado, não resolveria o problema mais fácil?
Com o SQL mostrado, teria de ser feito duas consultas ao banco de dados. Uma para mostrar os dados no grid, e a outra apenas para fazer o somatório, correto?
Um campo calculado, não resolveria o problema mais fácil?
GOSTEI 0
Martins
27/03/2006
Mas o colega que fez a pergunta, gostaria de mostrar todos os registros da consulta no DBGrid, e a somatória da coluna em questão em um Edit.
Com o SQL mostrado, teria de ser feito duas consultas ao banco de dados. Uma para mostrar os dados no grid, e a outra apenas para fazer o somatório, correto?
Um campo calculado, não resolveria o problema mais fácil?
É uma Opção sim, com certeza.
GOSTEI 0
Emerson Nascimento
27/03/2006
O método q eu uso, não é o + bonito mas dá pro gasto.
É assim:
Espero ter ajudado, qq coisa posta d novo. :wink:
... var vrTotal: Currency; begin ... // Após o Open do DataSet ou no Evento AfterOpen... with DM_Geral.IBDSEmpresa do begin DataSource1.DataSet := nil; // Desvinculado DataSource First; // Desnecessário, só por legibilidade vrTotal := 0; while not Eof do begin vrTotal := vrTotal + FieldByName(´VALOR´).AsCurrency; Next; end; First; DataSource1.DataSet := DM_Geral.IBDSEmpresa; end; Edit1.Text := Format(´¬.2n´, [vrTotal]); // Joga o valor formatado na Edit ...
eu usaria o método do Rogick, mas com uma pequena alteração:
with DM_Geral.IBDSEmpresa do begin DisableControls; First; // Desnecessário, só por legibilidade vrTotal := 0; while not Eof do begin vrTotal := vrTotal + FieldByName(´VALOR´).AsCurrency; Next; end; First; EnableControls; end; Edit1.Text := Format(´¬.2n´, [vrTotal]); // Joga o valor formatado na Edit
outra coisa: há alguma restrição quanto ao uso de clientdataset? seria bem mais simples criar campos agregados no clientdataset...
GOSTEI 0
Martins
27/03/2006
[quote:f25b48d7ab=´Rogick´]O método q eu uso, não é o + bonito mas dá pro gasto.
É assim:
Espero ter ajudado, qq coisa posta d novo. :wink:
... var vrTotal: Currency; begin ... // Após o Open do DataSet ou no Evento AfterOpen... with DM_Geral.IBDSEmpresa do begin DataSource1.DataSet := nil; // Desvinculado DataSource First; // Desnecessário, só por legibilidade vrTotal := 0; while not Eof do begin vrTotal := vrTotal + FieldByName(´VALOR´).AsCurrency; Next; end; First; DataSource1.DataSet := DM_Geral.IBDSEmpresa; end; Edit1.Text := Format(´¬.2n´, [vrTotal]); // Joga o valor formatado na Edit ...
eu usaria o método do Rogick, mas com uma pequena alteração:
with DM_Geral.IBDSEmpresa do begin DisableControls; First; // Desnecessário, só por legibilidade vrTotal := 0; while not Eof do begin vrTotal := vrTotal + FieldByName(´VALOR´).AsCurrency; Next; end; First; EnableControls; end; Edit1.Text := Format(´¬.2n´, [vrTotal]); // Joga o valor formatado na Edit
outra coisa: há alguma restrição quanto ao uso de clientdataset? seria bem mais simples criar campos agregados no clientdataset...[/quote:f25b48d7ab]
Olá [color=darkblue:f25b48d7ab][b:f25b48d7ab]Emerson[/b:f25b48d7ab][/color:f25b48d7ab], mesmo atarefado, vc arrumou um tempo para contribuir com a comunidade, é sempre muito bom tê-lo participando dos tópicos.
Pensei q conseguiria com SQL :lol:
Estou esquecendo q podemos encontrar soluções por caminhos alternativos :oops:
GOSTEI 0
Vitoreduardo
27/03/2006
Fala galera
Fiz desse jeito:
E para pesquisar entre datas fiz assim:
Agora preciso fazer para pesquisar por Empresa e entre data, tipo primeiro eu escolho a empresa e depois pesquiso entre data para aquela empresa.
Estou usando os componentes (IBDataBase,IBDataSet, IBTransaction, DataSource).
Vou tentar aqui e posto o resultado.
valeu
Fiz desse jeito:
if combobox1.Text = ´Empresa´then begin DM_Geral.IBDSEmpresa.Close; DM_Geral.IBDSEmpresa.SelectSQL.Clear; DM_Geral.IBDSEmpresa.SelectSQL.Add(´Select ID_Vendas, Empresa, Data,Valor, Sum(Valor) From Vendas´); DM_Geral.IBDSEmpresa.SelectSQL.Add(´Where Upper(Empresa) Like:Empresa´); DM_Geral.IBDSEmpresa.SelectSQL.Add(´Group by ID_Vendas,Empresa,Data,Valor´); DM_Geral.IBDSEmpresa.ParamByName(´Empresa´).AsString:= UpperCase(Edit1.text)+´¬´; DM_Geral.IBDSEmpresa.Open; with DM_Geral.IBDSEmpresa do begin DisableControls; First; vrTotal := 0; while not Eof do begin vrTotal := vrTotal + FieldByName(´VALOR´).AsCurrency; Next; end; First; EnableControls; end; Edit2.Text := Format(´¬.2n´, [vrTotal]); end; end;
E para pesquisar entre datas fiz assim:
var vrTotal: Currency; begin inherited; DM_geral.IBDSConsultaVendas.Close; dm_geral.IBDSConsultaVendas.ParamByName(´Datavenda1´).AsDate := DateTimePicker1.Date; dm_geral.IBDSConsultaVendas.ParamByName(´Datavenda2´).AsDate := DateTimePicker2.Date; dm_geral.IBDSConsultaVendas.Prepare; dm_geral.IBDSConsultaVendas.Open; with DM_Geral.IBDSEmpresa do begin DisableControls; First; vrTotal := 0; while not Eof do begin vrTotal := vrTotal + FieldByName(´VALOR´).AsCurrency; Next; end; First; EnableControls; end; Edit2.Text := Format(´¬.2n´, [vrTotal]); end; end;
Agora preciso fazer para pesquisar por Empresa e entre data, tipo primeiro eu escolho a empresa e depois pesquiso entre data para aquela empresa.
Estou usando os componentes (IBDataBase,IBDataSet, IBTransaction, DataSource).
Vou tentar aqui e posto o resultado.
valeu
GOSTEI 0
Vitoreduardo
27/03/2006
Fala galera
Fiz desse jeito:
E para pesquisar entre datas fiz assim:
Agora preciso fazer para pesquisar por Empresa e entre data, tipo primeiro eu escolho a empresa e depois pesquiso entre data para aquela empresa.
Estou usando os componentes (IBDataBase,IBDataSet, IBTransaction, DataSource).
Vou tentar aqui e posto o resultado.
valeu
if combobox1.Text = ´Empresa´then begin DM_Geral.IBDSEmpresa.Close; DM_Geral.IBDSEmpresa.SelectSQL.Clear; DM_Geral.IBDSEmpresa.SelectSQL.Add(´Select ID_Vendas, Empresa, Data,Valor, Sum(Valor) From Vendas´); DM_Geral.IBDSEmpresa.SelectSQL.Add(´Where Upper(Empresa) Like:Empresa´); DM_Geral.IBDSEmpresa.SelectSQL.Add(´Group by ID_Vendas,Empresa,Data,Valor´); DM_Geral.IBDSEmpresa.ParamByName(´Empresa´).AsString:= UpperCase(Edit1.text)+´¬´; DM_Geral.IBDSEmpresa.Open; with DM_Geral.IBDSEmpresa do begin DisableControls; First; vrTotal := 0; while not Eof do begin vrTotal := vrTotal + FieldByName(´VALOR´).AsCurrency; Next; end; First; EnableControls; end; Edit2.Text := Format(´¬.2n´, [vrTotal]); end; end;
var vrTotal: Currency; begin inherited; DM_geral.IBDSConsultaVendas.Close; dm_geral.IBDSConsultaVendas.ParamByName(´Datavenda1´).AsDate := DateTimePicker1.Date; dm_geral.IBDSConsultaVendas.ParamByName(´Datavenda2´).AsDate := DateTimePicker2.Date; dm_geral.IBDSConsultaVendas.Prepare; dm_geral.IBDSConsultaVendas.Open; with DM_Geral.IBDSEmpresa do begin DisableControls; First; vrTotal := 0; while not Eof do begin vrTotal := vrTotal + FieldByName(´VALOR´).AsCurrency; Next; end; First; EnableControls; end; Edit2.Text := Format(´¬.2n´, [vrTotal]); end; end;
Alguém sabe como colocar um pesquisa simples por data no evento OnChange do edit, é que eu vi um sistema assim e gostaria de fazer assim sem presisar clicar num botão.
GOSTEI 0
Jander Almeida
27/03/2006
procedure TFrmFinanceiroConsult.btn1Click(Sender: TObject);
var
somar:Currency;
begin
DM.QRYFINANCEIRO.Close;
DM.QRYFINANCEIRO.SQL.Clear;
DM.QRYFINANCEIRO.SQL.add('SELECT C.NOME,P.CODPEDIDO,NPARCELA,VLPARCELA,VENCIMENTO FROM PEDIDO P, CLIENTES C,FINANCERIO F WHERE P.CODCLIENTE = C.CODCLIENTE AND F.CODPEDIDO = P.CODPEDIDO AND (P.CODPEDIDO <> 0)');
//***********************************************//
if edNPed.Text <> '' Then
begin
DM.QRYFINANCEIRO.SQL.add(' AND (P.CODPEDIDO ='+ edNPed.Text +')');
end;
//************************************************//
if ed_NomeCliente.Text <> '' Then
begin
DM.QRYFINANCEIRO.SQL.add(' AND (C.NOME LIKE '+ QuotedStr('%'+ ed_NomeCliente.Text + '%')+')');
DM.QRYFINANCEIRO.SQL.Add('ORDER BY P.CODPEDIDO');
end;
//***********************************************//
if dtInicial.Text <> ' / / ' Then
begin
DM.QRYFINANCEIRO.SQL.add(' AND (F.VENCIMENTO >= :pDtIni )');
DM.QRYFINANCEIRO.Parameters.ParamByName('pDtIni').DataType := ftDate;
DM.QRYFINANCEIRO.Parameters.ParamByName('pDtIni').Value := dtInicial.Text;
end;
//**********************************************//
if dtFinal.Text <> ' / / ' Then
begin
DM.QRYFINANCEIRO.SQL.add(' AND (VENCIMENTO <= :pDtFin )');
DM.QRYFINANCEIRO.Parameters.ParamByName('pDtFin').DataType := ftDate;
DM.QRYFINANCEIRO.Parameters.ParamByName('pDtFin').Value := dtFinal.Text;
end;
//**********************************************//
DM.QRYFINANCEIRO.Open;
//**********************************************//
if DM.QRYFINANCEIRO.RecordCount = 0 Then
begin
ShowMessage('Nenhuma OS Foi Encontrado!');
end;
begin
with DM.QRYFINANCEIRO do
begin
DM.DSQFINANCERIO.DataSet:=nil;
somar:=0;
//DM.QRYFINANCEIRO.First;
while not Eof do
begin
somar:=somar+FieldByName('VLPARCELA').AsCurrency;
Next;
end;
First;
DM.DSQFINANCERIO.DataSet:= DM.QRYFINANCEIRO;
end;
edTotal.Text:=FormatFloat('R$ ##,0.00',somar);
end;
end;
var
somar:Currency;
begin
DM.QRYFINANCEIRO.Close;
DM.QRYFINANCEIRO.SQL.Clear;
DM.QRYFINANCEIRO.SQL.add('SELECT C.NOME,P.CODPEDIDO,NPARCELA,VLPARCELA,VENCIMENTO FROM PEDIDO P, CLIENTES C,FINANCERIO F WHERE P.CODCLIENTE = C.CODCLIENTE AND F.CODPEDIDO = P.CODPEDIDO AND (P.CODPEDIDO <> 0)');
//***********************************************//
if edNPed.Text <> '' Then
begin
DM.QRYFINANCEIRO.SQL.add(' AND (P.CODPEDIDO ='+ edNPed.Text +')');
end;
//************************************************//
if ed_NomeCliente.Text <> '' Then
begin
DM.QRYFINANCEIRO.SQL.add(' AND (C.NOME LIKE '+ QuotedStr('%'+ ed_NomeCliente.Text + '%')+')');
DM.QRYFINANCEIRO.SQL.Add('ORDER BY P.CODPEDIDO');
end;
//***********************************************//
if dtInicial.Text <> ' / / ' Then
begin
DM.QRYFINANCEIRO.SQL.add(' AND (F.VENCIMENTO >= :pDtIni )');
DM.QRYFINANCEIRO.Parameters.ParamByName('pDtIni').DataType := ftDate;
DM.QRYFINANCEIRO.Parameters.ParamByName('pDtIni').Value := dtInicial.Text;
end;
//**********************************************//
if dtFinal.Text <> ' / / ' Then
begin
DM.QRYFINANCEIRO.SQL.add(' AND (VENCIMENTO <= :pDtFin )');
DM.QRYFINANCEIRO.Parameters.ParamByName('pDtFin').DataType := ftDate;
DM.QRYFINANCEIRO.Parameters.ParamByName('pDtFin').Value := dtFinal.Text;
end;
//**********************************************//
DM.QRYFINANCEIRO.Open;
//**********************************************//
if DM.QRYFINANCEIRO.RecordCount = 0 Then
begin
ShowMessage('Nenhuma OS Foi Encontrado!');
end;
begin
with DM.QRYFINANCEIRO do
begin
DM.DSQFINANCERIO.DataSet:=nil;
somar:=0;
//DM.QRYFINANCEIRO.First;
while not Eof do
begin
somar:=somar+FieldByName('VLPARCELA').AsCurrency;
Next;
end;
First;
DM.DSQFINANCERIO.DataSet:= DM.QRYFINANCEIRO;
end;
edTotal.Text:=FormatFloat('R$ ##,0.00',somar);
end;
end;
GOSTEI 0