Não consigo somar coluna do DbGrid com Select Sum

Delphi

26/03/2007

Olá, estou tentando fazer com que um DbGrid exiba dados de acordo com o filtro mas, também quero somar uma coluna. Não quero usar o While pois vai demorar mais. Veja o código:

FormPrincipal.Compras.Filtered := False;
FormPrincipal.Compras.Close;
FormPrincipal.Compras.SQL.Clear;
FormPrincipal.Compras.Sql.Text:= ´Select Data,SUM(Quant) as Total,Produto,Marca,Modelo,Fornecedor from Compras where DATA between #´ + EditVencInicial.Text + ´ and ´ + EditVencFinal.Text +´´;
FormPrincipal.Compras.SQL.Add(´ order by ´+ComboBoxOrdenar.Text);

FormPrincipal.Compras.Open;
FormPrincipal.Compras.First;
FormPrincipal.DataSourceCompras.Enabled:= True;
LabelTotal.Caption := FloatToStr(Total);

Provavelmente deve ter um erro na utilização do código mas, procurei muito na net sem sucesso antes de recorrer a este fórum.

Preciso também somar a coluna ´Valor´ mas é do tipo TEXT, como faço ?

Obrigado!


Delfai

Delfai

Curtidas 0

Respostas

Delfai

Delfai

26/03/2007

Esquecí de dizer, uso o banco Access + AdoQuery + Delphi 7


GOSTEI 0
Delfai

Delfai

26/03/2007

Olá, ainda não consegui; alguem pode me ajudar?

Faço assim e filtra mas não soma:

Obs.: O campo Valor é tipo TEXTO, então uso VAL() para converter.

FormPrincipal.DataSourceCompras.Enabled:= False;
FormPrincipal.Compras.Filtered := False;
FormPrincipal.Compras.Close;
FormPrincipal.Compras.SQL.Clear;
FormPrincipal.Compras.Sql.Text:= ´Select Data,Docto,Quant,Código,Descrição,Valor,Produto,Marca,Modelo,Fornecedor,SUM(VAL(Valor)) AS Total from Compras where Data Between cdate(´+QuotedStr(EditVencInicial.Text)+´) and cdate(´+QuotedStr(EditVencFinal.Text)+´)´;

FormPrincipal.Compras.SQL.Add(´ Group By Data,Docto,Quant,Código,Descrição,Valor,Produto,Marca,Modelo,Fornecedor´);
FormPrincipal.Compras.SQL.Add(´ Order By ´+ComboBoxOrdenar.Text);

FormPrincipal.DataSourceCompras.Enabled:= True;
LabelTotal.Caption := FormatFloat(´#,0.00´,Total);

Será um erro de sintaxe ou o ADOQuery com Access não suporta essa função?

Desde já agradeço


GOSTEI 0
Rjun

Rjun

26/03/2007

[b:b22ab903dd]Duas observações[/b:b22ab903dd]

:arrow: Definir como TEXTO um campo que irá armazenar valores numéricos é pedir para ter problema.

:arrow: Não teria que ter um [b:b22ab903dd]Group By[/b:b22ab903dd] na sua instrução SQL?


GOSTEI 0
Delfai

Delfai

26/03/2007

O Order By tem sim. O estranho é que eu consigo fazer com que apareça no label o valor da linha, veja abaixo que multiplico a quant que é INTEGER pelo Valor que é TEXTO sem usar VAL() e aparece o resultado correto porém não quero o resultado da linha e sim da coluna, veja

FormPrincipal.DataSourceCompras.Enabled:= False;
FormPrincipal.Compras.Filtered := False;
FormPrincipal.Compras.Close;
FormPrincipal.Compras.SQL.Clear;
FormPrincipal.Compras.Sql.Text:= ´Select Data,Docto,Quant,Código,Descrição,Valor,Produto,Marca,Modelo,Fornecedor,SUM(Quant * Valor) AS Total from Compras where Data Between cdate(´+QuotedStr(EditVencInicial.Text)+´) and cdate(´+QuotedStr(EditVencFinal.Text)+´)´;

FormPrincipal.Compras.SQL.Add(´ Group By Data,Docto,Quant,Código,Descrição,Valor,Produto,Marca,Modelo,Fornecedor´);
FormPrincipal.Compras.SQL.Add(´ Order By ´+ComboBoxOrdenar.Text);

FormPrincipal.Compras.Close;

FormPrincipal.DataSourceCompras.Enabled:= True;
LabelTotal.Caption := FormatFloat(´#,0.00´,FormPrincipal.Compras.FieldByName(´Total´).AsFloat); // Aqui se trata do campo criado virtualmente, podendo ser exibido no DbGrid com o valor total ( Quant * Valor) = AQUI FUNCIONA mas não quero o calculo da linha, quero o total da coluna ´Total´, eu poderia consegui com o While not FormPrincipal.Compras.eof mas, com muitos registros vai demorar muito.

No exemplo anterior, eu tinha criado a variavel Total, neste aqui eu não declarei variável nenhuma, o Total agora é o campo virtual.

Eu não necessito que fique agrupado usando o Group By, só quero filtrar entre datas e mostrar o total comprado neste período.

Pode me ajudar? grato!


GOSTEI 0
POSTAR