Somar o valor no banco
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:
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.
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
Curtidas 0
Respostas
Leonardo Xavier
27/09/2012
qual componente você esta utilizando para realizar sua consulta?
GOSTEI 0
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.
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
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
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 ?
Oh, eu já debuguei mas não estou conseguindo enxergar o erro.
Será que o meu sql está correto ?
GOSTEI 0
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
27/09/2012
Bruno, se eu retirar ele no GROUP BY me retornará um erro na expressão.
GOSTEI 0
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;
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
27/09/2012
eu retirando o FAT_STATUS e o ID_FAT funciona.
GOSTEI 0
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
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