quot;Comandoquot; não funciona no evento ontime do compone

20/03/2003

0

Estou fazendo uma agendinha... estou usando o DBExpress.
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

Andersoncp

Responder

Posts

20/03/2003

Carlos Filho

Esse tipo de pergunta é cabulosa e pouca gente vai se aventurar em responder, visto que esse tipo de problema só acontece quando alguem (eu ou você por exemplo) tenta fazer algo um pouco mais inovador ou facilitador para os usuários, ou no meu caso, para mim mesmo....

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!


Responder

20/03/2003

Andersoncp

cara continua dando o pau...

aparece uma mensagem EDataBaseError´Record not found or changed by anoter user´

Ta dificil o negocio... :(


Responder

20/03/2003

Anonymous

[quote:77172f5b06=´Ðerek Wildstar´]Esse tipo de pergunta é cabulosa e pouca gente vai se aventurar em responder, visto que esse tipo de problema só acontece quando alguem (eu ou você por exemplo) tenta fazer algo um pouco mais inovador ou facilitador para os usuários, ou no meu caso, para mim mesmo....

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.


Responder

22/03/2003

Carlos Filho

[quote:4af1e58ac3=´Anônimo´]

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...


Responder

22/03/2003

Carlos Filho

Como a ultima dica não solucionou, faça o seguinte:
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.!


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar