Deletar no banco o que o grid aponta?

Firebird

31/01/2004

É o seguinte estou fazendo uma aplicação com interbase, onde a mesma tem um cadastro de pedidos de produtos. Esse cadastro funciona da seguinte maneira:

#Inseri os itens com o seu custo e quantidade.
Cada vez que insiro um item ele me dá um total de quanto vai me sair esse pedido em reais, automáticamente.

Problema.
No momento em que deleto um item, tenho que jogar um ´last´ na tabela para que o sistema pegue o último valor inserido e o retire do valor total porém, se eu quizer clicar em um item que esteja no meio do dbgrid, ele não vai apontar para esse item no banco, ouseja ele vai deletar, mas vai atualizar o total do pedido de forma incorreta. pois o valor que ele vai pegar para subtrair do total vai ser ou o primeiro ou o último.

Como faço para apontar no banco o item que eu estiver clicando no dbgride ?

que não esteja tirar ssempre o último e


Valdiney

Valdiney

Curtidas 0

Respostas

Pedih

Pedih

31/01/2004

É o seguinte estou fazendo uma aplicação com interbase, onde a mesma tem um cadastro de pedidos de produtos. Esse cadastro funciona da seguinte maneira: #Inseri os itens com o seu custo e quantidade. Cada vez que insiro um item ele me dá um total de quanto vai me sair esse pedido em reais, automáticamente. Problema. No momento em que deleto um item, tenho que jogar um ´last´ na tabela para que o sistema pegue o último valor inserido e o retire do valor total porém, se eu quizer clicar em um item que esteja no meio do dbgrid, ele não vai apontar para esse item no banco, ouseja ele vai deletar, mas vai atualizar o total do pedido de forma incorreta. pois o valor que ele vai pegar para subtrair do total vai ser ou o primeiro ou o último. Como faço para apontar no banco o item que eu estiver clicando no dbgride ? que não esteja tirar ssempre o último e



olá
como vc tá mostrando registros num grid, provavelmente estes ja devem estar filtrados por uma sql. Eu faço assim em meus projetos :

evento apos deletar ( .delete)
var Reg : TBookmark;
SomaGeral : Currency;
begin
Reg := cdsEntrada.GetBookmark; // pega registro corrente
cdsEntrada.DisableControls; // desarma os controles visuais
cdsEntrada.First;
SomaGeral := 0;
while not cdsEntrada.Eof do
begin
SomaGeral := SomaGeral + cdsEntradaSomaItem.Value;
cdsEntrada.Next;
end;
cdsEntrada.GotoBookmark(Reg); // volta para o registro q estava
cdsEntrada.EnableControls; // ativa os controles
seuEdit_ou_seuLabel := FormatCurr(´#,,0.00´, SomaGeral);
end;


Espero ter ajudado.
pedih@uol.com.br, pedih_rp@yahoo.com.br


GOSTEI 0
Luppy

Luppy

31/01/2004

Mais uma sugestão:
Vc poderia usar uma query separada pra totalizar o pedido:

QueryTotal.Close;
QueryTotal.Sql.Clear;
QueryTotal.Sql.Add(´sum(ValorUnitario*Quantidade) as ValorTotalPedido´);
QueryTotal.Sql.Add(´where CodigoPedido = :CodigoAtual´);
QueryTotal.ParamByName(´CodigoAtual´).AsInteger := ´seu código atual´;
QueryTotal.Open;

Atualize a query nos evendos After Insert, Edit e Delete da tabela Itens.


Se for usar da forma como o pedih sugeriu, não esqueça de liberar o ponteiro da memória:
cdsEntrada.GotoBookmark(Reg); // volta para o registro q estava
cdsEntrada.FreeBookmark(Reg); // Limpa o Bookmark da mem.


Abraço.


GOSTEI 0
Luppy

Luppy

31/01/2004

Atualize a query nos evendos After Insert, Edit e Delete da tabela Itens.


Desculpe, no After Post e Delete.


GOSTEI 0
POSTAR