quot;Comandoquot; não funciona no evento ontime do compone
20/03/2003
0
Quando eu quero fazer qualquer alteração(Adicionar, Editar e Remover Registro) no banco, eu utilizo o comando ´TSqlClientDataSet(DataSource1.DataSet).ApplyUpdates(0)´.
A questão eh este comando funciona perfeitamente no evento onclique de um buttom, mas no evento ontimer do timer não funciona...
Ja tentei faser de tudo, mas naum funcionou.
Se alguem puder me ajudar... :o [color=darkblue:4f193dbf43][/color:4f193dbf43]
Andersoncp
Posts
20/03/2003
Carlos Filho
Infelizmente o mercado pede apenas que programadores saibam programar aplicações de banco de dados, isso é bom, mas termina deixando alguns programadores bitolados, o que parece não ser seu caso.
Vamos ao seu problema...
Não tenho certeza absoluta, mas acho que vai dar certo se dentro do evento onTimer, antes do seu comando você colocar a seguinte linha:
Application.ProcessMessages;
você também pode tentar por esse comando APÓS a sua linha de codigo caso antes não der certo.
O comando acima ´diz´ para o windows processar mensagens pendentes imediatamente. Certas vezes um comando qualquer parece sobrescrever certas mensagens impedindo que estas sejam processadas.
Isso pode ajudar....
Também pode ajudar você aumentar o tempo do timer...
um timer de 250 é suficiente!
Se essa dica der certo me avise por favor!
20/03/2003
Andersoncp
aparece uma mensagem EDataBaseError´Record not found or changed by anoter user´
Ta dificil o negocio... :(
20/03/2003
Anonymous
Infelizmente o mercado pede apenas que programadores saibam programar aplicações de banco de dados, isso é bom, mas termina deixando alguns programadores bitolados, o que parece não ser seu caso.
Vamos ao seu problema...
Não tenho certeza absoluta, mas acho que vai dar certo se dentro do evento onTimer, antes do seu comando você colocar a seguinte linha:
Application.ProcessMessages;
você também pode tentar por esse comando APÓS a sua linha de codigo caso antes não der certo.
O comando acima ´diz´ para o windows processar mensagens pendentes imediatamente. Certas vezes um comando qualquer parece sobrescrever certas mensagens impedindo que estas sejam processadas.
Isso pode ajudar....
Também pode ajudar você aumentar o tempo do timer...
um timer de 250 é suficiente!
Se essa dica der certo me avise por favor![/quote:77172f5b06]
Lê de novo e vê se entende desta vez antes de ficar querendo se aparecer:
Interrupts the execution of an application so that Windows can respond to events.
procedure ProcessMessages;
Description
Call ProcessMessages to permit Windows to process these events at the time ProcessMessages is called. The ProcessMessages method cycles the Windows message loop until it is empty and then returns control to the application.
Note:Neglecting message processing affects only the application calling ProcessMessages, not other applications. In lengthy operations, calling ProcessMessages periodically will allow the application to respond to paint and other messages.
Note:ProcessMessages does not allow the application to go idle, whereas HandleMessages does.
22/03/2003
Carlos Filho
Lê de novo e vê se entende desta vez antes de ficar querendo se aparecer:
Interrupts the execution of an application so that Windows can respond to events.
procedure ProcessMessages;
Description
Call ProcessMessages to permit Windows to process these events at the time ProcessMessages is called. The ProcessMessages method cycles the Windows message loop until it is empty and then returns control to the application.
Note:Neglecting message processing affects only the application calling ProcessMessages, not other applications. In lengthy operations, calling ProcessMessages periodically will allow the application to respond to paint and other messages.
Note:ProcessMessages does not allow the application to go idle, whereas HandleMessages does.[/quote:4af1e58ac3]
Putz... Vocês desse fórum estão mal acostumados demais...
Se alguem escreve algo bem explicado vocês logo pensam que é pq tá querendo aparecer...
Pelo visto o nosso amigo anonimo não sabe o que diz, pois trocando em miúdos, o que tá escrito em inglês é exatamente o que eu expliquei...
além disso, você não tem nada a ver com a questão, visto que não propôs nenhuma resposta, apenas criticou e ainda por cima não teve coragem de se identificar... Fica na tua ou dá uma solução pro problema do rapaz que é o melhor que você faz....
PS.: eu também poderia ter copiado e colado a ajuda do Delphi como vc fez, mas não sou tão idiota a esse ponto...
22/03/2003
Carlos Filho
1 - coloque um componente Application Events no seu form.
2 - no evento onMessage desse componente digite:
begin if Msg.message = wm_Timer then begin Case Msg.wParam of 111: begin //<<< Colque aqui seu código... >>> end; end; Handled := True; end; end;
3 - Em algum lugar do seu código (onShow por exemplo) coloque a chamada:
SetTimer(Application.handle,111,20,nil);
a função acima configura um timer com Identificação = 111 e com tempo de 20 milissegundos. No lugar do 20 acima vc deve por o tempo em milissegundos do seu timer. A cada mensagem de timer com ID = 111 o código mostrado no passo 2 será executado.
Para parar o timer escrito dessa forma use :
KillTimer(Application.Handle,111);
onde o 111 é o ID do timer que você quer parar...
Isso faz o mesmo efeito de um timer, mas sem usar funções de callback
qualquer outra dúvida manda uma resposta no fórum.
se continuarem enchendo o saco (comentário do visitante) pode mandar um mail pra mim. Eu quero ajudar.!
Clique aqui para fazer login e interagir na Comunidade :)