Somar o valor no banco

Delphi

27/09/2012

Olá pessoal, em um form eu tenho um dbedit e 2 dbgrid.
1 dbgrid lista todos os clientes, o dbedit pega o ID do clientes e
serve para lista na tabela de pagamentos todas as movimentações do cliente, até aí tudo bem, a medida q movimento o cursor no primeiro dbgrid, seus pagamentos em aberto e pagos aparecem no 2 dbgrid.

Coloquei 2 edit´s, um para mostrar o total pago e outro para listar o total em aberto, o sql está assim:
SQL_SomaTotal.Close;
SQL_SomaTotal.SQL.Clear;
SQL_SomaTotal.SQL.Add('select FAT_ID, FAT_STATUS, sum(fat_vlrpagto) as TOTAL from FINAN_FATURAMENTO');
SQL_SomaTotal.SQL.Add('WHERE FAT_IDCLIENTE = '+QuotedStr(DBEdit1.Text)+' GROUP BY FAT_ID, FAT_STATUS');
SQL_SomaTotal.Open;

Edit_TotalPAgar.Text := SQL_SomaTotal.FieldByName('TOTAL').AsString;


Eu entendo que o SUM deveria somar todos os valores, mas não está acontecendo isso, ele pega sempre o primeiro valor e atribui ao edit_TotalPagar, ou seja, se eu tenho:
Cliente: 1
Valor 1: 1000
Valor 2: 2000
O valor que é atribuído é o 1000.

Alguém pode me dizer onde estou errando ?

Vlw.
Marcos Barbosa

Marcos Barbosa

Curtidas 0

Respostas

Leonardo Xavier

Leonardo Xavier

27/09/2012

qual componente você esta utilizando para realizar sua consulta?
GOSTEI 0
Alisson Santos

Alisson Santos

27/09/2012

Você debugou para verificar os valores que estão sendo carregados?
pois pelo que pude notar está correto o que está vazendo o que tem que ver é se o seu select está retornando o sum.
Pega o seu select e executa direto no banco e verifica o que ele retorna.
GOSTEI 0
Bruno Leandro

Bruno Leandro

27/09/2012

me parece que o problema é a utilização do campo FAT_ID no select e no order by, removar esse campo do sql e verifique se retorna o valor que voce deseja
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

27/09/2012

Estou usando os SQLQuery da paleta DBEXPRESS, ClienteDataSet, DataSetProvider.
Oh, eu já debuguei mas não estou conseguindo enxergar o erro.

Será que o meu sql está correto ?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

27/09/2012

Como o Bruno falou, deve haver mais de um FAT_ID na consulta, logo, o resultado são dois registros. Dessa forma, o seu código pega apenas o primeiro, que é onde o cursor está posicionado. Dica: você não precisa de pegar o valor do DBEdit, pegue-o direto da query que lista os clientes.
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

27/09/2012

Bruno, se eu retirar ele no GROUP BY me retornará um erro na expressão.
GOSTEI 0
Bruno Leandro

Bruno Leandro

27/09/2012

Na verdade Marcos minha sugestão é da seguinte forma, pois pelo que parece o campo fat_id tem o valor 1,2,3,4 ou seja nao se repete ao utiliza-lo no group by só vai existir ele mesmo

SQL_SomaTotal.Close;
SQL_SomaTotal.SQL.Clear;
SQL_SomaTotal.SQL.Add('select FAT_STATUS, sum(fat_vlrpagto) as TOTAL from FINAN_FATURAMENTO');
SQL_SomaTotal.SQL.Add('WHERE FAT_IDCLIENTE = '+QuotedStr(DBEdit1.Text)+' GROUP BY FAT_STATUS');
SQL_SomaTotal.Open;
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

27/09/2012

eu retirando o FAT_STATUS e o ID_FAT funciona.
GOSTEI 0
Bruno Leandro

Bruno Leandro

27/09/2012

retirando o fat_status ele agrupa os registro que estiverem aberto ou nao, ou seja se eu tiver

fat_id fat_status fat_valor
1 aberto 1000
2 fechado 500
3 aberto 2000

ira retornar 3500 agrupando todos os registros deste cliente
GOSTEI 0
POSTAR