somar dados do grid a medida que for sendo inserido
Boa tarde,
Estou precisando de uma ajuda, a questão é a seguinte:
Tenho um DBGrid em minha aplicação onde o cliente ira cadastrar os serviços que estao sendo executado, pois minha aplicação é um gerenciador de OS para oficina de carro.
Clica no Botao inserir e adiciona um registro, depois salva e por ai vai.
O que estou precisando que a medida que for inserindo um registro e va adicionando a soma em DBEdit ou DBText, pois essa soma será armazena numa tabela Pai.
Exemplo:
Adicione primeiro registro de R$ 200,00 automaticamente o edit Valor total exibira o Total cadastrado.
Então ao incluir um novo registro de R$ 100,00 ao salva
Estou precisando de uma ajuda, a questão é a seguinte:
Tenho um DBGrid em minha aplicação onde o cliente ira cadastrar os serviços que estao sendo executado, pois minha aplicação é um gerenciador de OS para oficina de carro.
Clica no Botao inserir e adiciona um registro, depois salva e por ai vai.
O que estou precisando que a medida que for inserindo um registro e va adicionando a soma em DBEdit ou DBText, pois essa soma será armazena numa tabela Pai.
Exemplo:
Adicione primeiro registro de R$ 200,00 automaticamente o edit Valor total exibira o Total cadastrado.
Então ao incluir um novo registro de R$ 100,00 ao salva
Flavio Silva
Curtidas 0
Respostas
Joel Rodrigues
26/02/2013
Você pode fazer um loop para varrer o dataset e somar estes valores. Faça isso no evento onAfterPost, que ocorre sempre que é feita uma inserção ou atualização na tabela.
GOSTEI 0
Flavio Silva
26/02/2013
after post de onde?
tabela, grid, dataset
tabela, grid, dataset
GOSTEI 0
Joel Rodrigues
26/02/2013
O afterpost é um evento do dataset.
GOSTEI 0
Thiago Delalibera
26/02/2013
Flávio eu tenho um sistema comercial com controle de OS, para somar eu faço o seguinte, criei a procedure:
procedure TfrmCadOrdemServico.SomaProdutos;
begin
DM.sqlSomaOrdemServico.Close;
DM.sqlSomaOrdemServico.SQL.Text := 'SELECT SUM(PRECOTOTAL) AS RESULTADO FROM PRODUTOSOS WHERE CODIGOOS=' + '''' + IntToStr(CodigoOS) + '''';
DM.sqlSomaOrdemServico.Open;
eSubTotal.Text:= FormatFloat('##,##0.00', DM.sqlSomaOrdemServico.FieldByName('RESULTADO').Value);
end;
O segredo é o seguinte o meu Query "sqlSomaOrdemServico" está conectado na mesma Transaction do Query que esta inserindo os valores no banco e mostrando no dbgrid, ou seja, sempre que você inserir e chamar sua atualização da dbgrid, chame também o "SomaProdutos", basta adaptar as suas necessidades, espero que ajude!
procedure TfrmCadOrdemServico.SomaProdutos;
begin
DM.sqlSomaOrdemServico.Close;
DM.sqlSomaOrdemServico.SQL.Text := 'SELECT SUM(PRECOTOTAL) AS RESULTADO FROM PRODUTOSOS WHERE CODIGOOS=' + '''' + IntToStr(CodigoOS) + '''';
DM.sqlSomaOrdemServico.Open;
eSubTotal.Text:= FormatFloat('##,##0.00', DM.sqlSomaOrdemServico.FieldByName('RESULTADO').Value);
end;
O segredo é o seguinte o meu Query "sqlSomaOrdemServico" está conectado na mesma Transaction do Query que esta inserindo os valores no banco e mostrando no dbgrid, ou seja, sempre que você inserir e chamar sua atualização da dbgrid, chame também o "SomaProdutos", basta adaptar as suas necessidades, espero que ajude!
GOSTEI 0
Francisco Macário
26/02/2013
Olá.
Se você estiver usando ClientDataset use campo calculado.
É uma forma rápida e fácil.
At.
Se você estiver usando ClientDataset use campo calculado.
É uma forma rápida e fácil.
At.
GOSTEI 0
Joni Nunes
26/02/2013
Em todos os exemplos citados, é melhor usar campo calculado, para não ficar abrindo e fechando dataset, o que nesse caso, faz processamento no servidor (buscar dados novamente) e transportar pela rede.
Processando por campo calculado, fica tudo mais rápido.
abraço
Processando por campo calculado, fica tudo mais rápido.
abraço
GOSTEI 0
José
26/02/2013
Tópico concluído.
GOSTEI 0