Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

natiii

[Resolvido] Soma de campos do DBGrid e colocar num Edit

Recommended Posts

Olá amigos,

 

Estou tentando somar todos os campos da coluna 'Valor' de um DBGrid e o resultado quero que apareça automaticamente em um Edit.

Lembrando que eu não estou usando DataModule. Estou usando AdoQuery.

Se alguém souber e puder ajudar, desde já agradeço.

Estou precisando disso urgente :)

 

[]'s http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Logo após dar o OPEN na query você pode ou fazer um While na Query e ir somando...

 

ou então fazer um comando SUM em uma query para pegar o valor somado...

 

ou então no evento do grid você já ir somando...

 

E ai depois é só jogar no Edit... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

se tiver jeito...

faça um select sum manualmente...

eu faço usando o dbexpress...naum sei se no ado da essa possibilidade pq nunca mexi com ele!!!

 

segue abaixo um exemplo!!

 

var   alocados				: integer;   sqlAuxiliar			  : TSQLQuery;begin   sqlAuxiliar:=TSQLQuery.Create(Self);   with sqlAuxiliar do begin	  SQLConnection:=dmBASE.Conexao;	  SQL.Clear;	  SQL.Add('SELECT SUM(COMPITAL_QUANTIDADE) AS TOTAL FROM COMPRAFROTA_ITEM_ALOCACAO');	  SQL.Add('   WHERE PES_DOCTO		= :PES_DOCTO		AND					  ');	  SQL.Add('		 COMP_NOTA_SERIE  = :COMP_NOTA_SERIE  AND					  ');	  SQL.Add('		 COMP_NOTA_NUMERO = :COMP_NOTA_NUMERO AND					  ');	  SQL.Add('		 EQTP_CODIGO	  = :EQTP_CODIGO	  AND					  ');	  SQL.Add('		 EQUI_CODIGO	  = :EQUI_CODIGO							   ');		 ParamByName('PES_DOCTO').AsString:=edPes_Docto.Text;		 ParamByName('COMP_NOTA_SERIE').AsString:=edSerie.Text;		 ParamByName('COMP_NOTA_NUMERO').AsInteger:=StrToInt(edNumeroNF.Text);		 ParamByName('EQTP_CODIGO').AsInteger:=StrToInt(edTpEq_Codigo.Text);		 ParamByName('EQUI_CODIGO').AsInteger:=StrToInt(edEquiCodigo.Text);	  Open;		 alocados:=FindField('TOTAL').AsInteger;	  Close;   end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos,

 

Eu tentei fazer com esse código, quando faço a pesquisa pelo CDC e pela Data de Vencimento, aparece no DbGrid juntamente com o valor, mas esse valor deveria aparecer no Edit e está aparecendo 0,00. Não sei mais o que pode ser...

Essa soma deveria servir para no caso: Se tiver um CDC com uma data de vencimento com varias faturas, essas faturas apareceriam no DBGrid, e o campo Vamor deveria ser somado e aparecer no Edit.

VEjam o código, se puderem ajuar, agradeço muito....

 

procedure TFormCobrancas.Button1Click(Sender: TObject);

 

begin

 

with AdoQueryCobranca do

begin

filter:= 'CDC =' + EditCdcCobranca.Text + ' and DataVencimento =' + EditDataVencCobranca.Text;

If not filtered then

filtered:= true;

 

with AdoQuerySoma do

//Essa AdoQuerySoma tem como campo o Total q guarda a soma

begin

Close;

SQL.Text:= 'select sum(Valor) as Total from Faturas where Status <>''PG'' and CDC = ' + EditCdcCobranca.text + ' and DataVencimento = ' + EditDataVencCobranca.Text;

Open;

EditSomaValores.Text:= FormatFloat(',0.00', Fieldbyname('Total').AsFloat);

end;

end;

end;

 

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente desta forma....

 

SQL.add( 'select sum(Valor) as Total from Faturas where Status <> :stat and CDC = :cdc and DataVencimento = :data');   ParamByName('stat').AsString:='PG';   ParamByName('cdc').AsString:= EditCdcCobranca.text;    ParamByName('data'):= EditDataVencCobranca.Text;Open   EditSomaValores.Text:=IntTOStr(FindField('Total').asfloat;Close;

post os resultados!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usei o código:

 

AdoQuerySoma.Close;

AdoQuerySoma.SQL.Add('select sum(Valor) as Total from Faturas where Status <> :STATUS and cdc = :CDC and vencimento = :VENCTO');

AdoQuerySoma.Parameters.ParamByName('STATUS').Value:= 'PG';

AdoQuerySoma.Parameters.ParamByName('CDC').Value := StrToInt(EditCdcCobranca.Text);

AdoQuerySoma.Parameters.ParamByName('VENCTO').Value := StrToDate(EditDataVencCobranca.Text);

AdoQuerySoma.Open;

EditSoma.Text:= FormatFloat(',0.00', AdoQuerySoma.Fieldbyname('Total').AsFloat);

 

 

 

Mas na hora da pesquisa está dando erro, diz que: Caracteres encontrados após o final da instrução SQL.

 

 

Por favor, me ajudem!

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Natiii

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usei o código: AdoQuerySoma.Close; AdoQuerySoma.SQL.Add('select sum(Valor) as Total from Faturas where Status <> :STATUS and cdc = :CDC and vencimento = :VENCTO'); AdoQuerySoma.Parameters.ParamByName('STATUS').Value:= 'PG'; AdoQuerySoma.Parameters.ParamByName('CDC').Value := StrToInt(EditCdcCobranca.Text); AdoQuerySoma.Parameters.ParamByName('VENCTO').Value := StrToDate(EditDataVencCobranca.Text); AdoQuerySoma.Open; EditSoma.Text:= FormatFloat(',0.00', AdoQuerySoma.Fieldbyname('Total').AsFloat); Mas na hora da pesquisa está dando erro, diz que: Caracteres encontrados após o final da instrução SQL.Por favor, me ajudem! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Natiii

Teria como colocar o seu comando SQL ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria como colocar o seu comando SQL ?

 

 

Bem, o comando sql que coloquei foi na propriedade SQL do AdoQuery, foi assim:

 

select sum(Valor) as Total from Faturas where Status <> 'PG';

 

Mas aí tirei o ponto e vírgula da propriedade e o erro que apareceu foi:

Erro de sintaxe, na expressão de consulta 'Status <> 'PG' . Select sum(Valor) as Total from Faturas where Status <> ? and cdc = ? and vencimento = ?

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos! Consegui!

 

O problema era uma grande besteira que eu não prestei atenção...

 

O erro dizia que faltava um ou mais parâmetros, então olhei que o campo Vencimento que havia colocado na verdade era DataVencimento. Aii que raiva! Passei varios dias e não percebi! Bom, de qualquer forma, muito obrigada pela ajuda, me ajudou bastante.

Meu código ficou da seguinte forma:

 

 

AdoQuerySoma.Close;

AdoQuerySoma.SQL.Add('select sum(Valor) as Total from Faturas where Status <> :STATUS and cdc = :CDC and DataVencimento = :VENCTO');

AdoQuerySoma.Parameters.ParamByName('STATUS').Value:= 'PG';

AdoQuerySoma.Parameters.ParamByName('CDC').Value := EditCdcCobranca.Text;

AdoQuerySoma.Parameters.ParamByName('VENCTO').Value := StrToDate(EditDataVencCobranca.Text);

AdoQuerySoma.Open;

EditSoma.Text:= FormatFloat(',0.00', AdoQuerySoma.Fieldbyname('Total').AsFloat);

 

end;

 

 

OBS.: Em AdoQuerySoma.Parameters.ParamByName('CDC').Value := EditCdcCobranca.Text; ficou apenas := EditCdcCobranca.Text sem o StrToInt pq o CDC no banco é Texto, quando ele ia procurar o inteiro, procurava por exemplo o numero '97' e lá no banco estava CDC '0000097' como texto.

 

 

 

Obrigada e até a próxima!

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu notei e to morrendo de raiva, é que o SUM do SQL não segue o Filter do componente ClientDataSet por exemplo

:(

ou seja..se você filtrar os dados pelo Filter, o sum nao atualiza segundo o filtro

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu notei e to morrendo de raiva, é que o SUM do SQL não segue o Filter do componente ClientDataSet por exemplo

:(

ou seja..se você filtrar os dados pelo Filter, o sum nao atualiza segundo o filtro

:(

 

Ah sim, no caso você apenas esta refinando as informações, fazendo o filtro e tirando eles de exibição...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.