Cálculo com afterpost. Preciso de opiniões

Delphi

18/09/2011

Bom dia,
em uma tela do sistema, tenho 3 tabelas : movimento, movimento_itens e saldo, sendo que movimento e movimento_itens em master-detail. Com elas trabalho de forma

tranquila. Porém preciso puxar um saldo de um determinado usuário e atualiza-lo. Comecei a utilizar o afterpost para fazer isso, mas no evento keydown do dbgrid uso a seguinte função :
case Key of
vk_return: // Enter pelo Tab
begin
with dbgrd2 do
begin
if (SelectedIndex < (fieldcount - 1)) then // Se o item atual do DbGrid não for o último campo

SelectedIndex := SelectedIndex + 1 // aumenta o item em 1
else // caso contrario
begin
cdsMovVale.Next; // move para o proximo registro da tabela
SelectedIndex := 0; // seleciona o primeiro campo
if cdsMovVale.eof then
if cdsMovVale.State dsbrowse then
cdsMovVale.Append;
end;
end;
end;

end;

isso faz com que o evento afterpost seja disparado 2 vezes, uma quando o item é gravado na tabela movimento_itens e outra quando nessa função acima dispara o append para criar outra linha. Já tentei tirar o append, mas quando preciso adicionar mais um item o dbgrid da o append automaticamente.

O que voces me aconselham a fazer, estou meio parado nisso a algum tempo.

Agradeço desde já

Alexandre Torres
Alexandre Torres

Alexandre Torres

Curtidas 0

Respostas

Ricardo Pereira

Ricardo Pereira

18/09/2011

voce pode mandar a tela e as 3 tabelas para que eu possa montar o cenario???
se tiver posso tentar lhe ajudar.
se nao.
tenta criar uma variavel global chamada
inicializou : boolean;

no create da tela coloca inicializou := false;

e faz o seguinte teste na sua função

if inicializou then
exit;

inicializou:= true;

e no afterpost do seu dataset de saldo depois voce seta
o inicializou:= false; novamente..

att. Ricardo silva

ricardo@sysworldti.com.br
GOSTEI 0
Alexandre Torres

Alexandre Torres

18/09/2011

voce pode mandar a tela e as 3 tabelas para que eu possa montar o cenario???
se tiver posso tentar lhe ajudar.
se nao.
tenta criar uma variavel global chamada
inicializou : boolean;

no create da tela coloca inicializou := false;

e faz o seguinte teste na sua função

if inicializou then
exit;

inicializou:= true;

e no afterpost do seu dataset de saldo depois voce seta
o inicializou:= false; novamente..

att. Ricardo silva

ricardo@sysworldti.com.br


Muito obrigado pela participação mas minha bronca é ter uma opção que pelo que percebi, não seja o afterpost para atualizar esse determinado campo.
Vou ver se consigo aqui mandar a estrutura da tabela.

Agradeço

Alexander Torres
GOSTEI 0
Alexandre Torres

Alexandre Torres

18/09/2011

Ainda não consegui estar na frente do meu micro para mandar a estrutura das tabelas, mas no meu modo de ver isso é pouco relevante pois o que quero é uma opção de pegar o saldo do usuário da tabela SALDO e atualiza-lo quando adiciono algum item no movimento. Como falei no primeiro post estava usando o afterpost mas ele é disparado duas vezes por conta da função de mudar campos no dbgrid.

E aí alguem tem alguma outra opnião?

Agradeço desde já.

Alexandre Torres
GOSTEI 0
Alexandre Torres

Alexandre Torres

18/09/2011

Ta feia a coisa, ainda não consegui resolver meu problema então vou voltar a posta-lo e tentar ser mais específico.

em uma tela do sistema, tenho 3 tabelas : movimento, movimento_itens e saldo, sendo que movimento e movimento_itens em master-detail. Com elas trabalho de forma tranquila fazendo o cálculo dos itens adicionados com um campo aggregate. Porém preciso puxar um saldo(tabela saldo) de um determinado usuário e atualiza-lo conforme for adicionando itens. Comecei a utilizar o afterpost para fazer isso, mas no evento keydown do dbgrid uso a seguinte função :
Código:

case Key of 
vk_return: // Enter pelo Tab 
begin 
with dbgrd2 do 
begin 
if (SelectedIndex < (fieldcount - 1)) then // Se o item atual do DbGrid não for o último campo 

SelectedIndex := SelectedIndex + 1 // aumenta o item em 1 
else // caso contrario 
begin 
cdsMovVale.Next; // move para o proximo registro da tabela 
SelectedIndex := 0; // seleciona o primeiro campo 
if cdsMovVale.eof then 
if cdsMovVale.State <> dsbrowse then 
cdsMovVale.Append; 
end; 
end; 
end; 

end; 


isso faz com que o evento afterpost seja disparado 2 vezes, uma quando é dado o post na tabela movimento_itens e outra quando nessa função acima dispara o append para criar outra linha. Já tentei tirar o append, mas quando preciso adicionar mais um item o dbgrid da o append automaticamente.

O que voces me aconselham a fazer, estou meio parado nisso a algum tempo.

Agradeço desde já

Alexandre Torres
GOSTEI 0
POSTAR