Se não for Thread, me ajudem !!!!!!!
Um exemplo básico, tenho um form com dois botões. O primeiro para atualizar algumas tabelas utilizando transação, e o segundo seria o botão cancelar, para cancelar aquele Looping de atualizações que estava fazendo no clique do primeiro botão.
Sendo que o meu problema é justamente esse, como posso cancelar e/ou manipular a transação através do clique do botão cancelar, pois ele fica desabilitado, ou seja, quando eu clico no primeiro botão ele fica um tempão para atualizar e o cancelar disponível. Mas o botão fica habilitado para eu clicar mas ele só executa depois que eu executar o clique do primeiro botão. O que eu faço ????? Me Ajudem ????
Sendo que o meu problema é justamente esse, como posso cancelar e/ou manipular a transação através do clique do botão cancelar, pois ele fica desabilitado, ou seja, quando eu clico no primeiro botão ele fica um tempão para atualizar e o cancelar disponível. Mas o botão fica habilitado para eu clicar mas ele só executa depois que eu executar o clique do primeiro botão. O que eu faço ????? Me Ajudem ????
Faelcavalcanti
Curtidas 0
Respostas
Tand
10/10/2003
Já que voce não quer Thread, tenta o seguinte:
Application.ProcessMessages()
Coloca este comando após cada inclussão dentro do teu primeiro processo em varios pontos que cada vez que ele executar vai processar o clique no outro botão.
Abraços.
Alexandre
Application.ProcessMessages()
Coloca este comando após cada inclussão dentro do teu primeiro processo em varios pontos que cada vez que ele executar vai processar o clique no outro botão.
Abraços.
Alexandre
GOSTEI 0
Faelcavalcanti
10/10/2003
Na verdade, me desculpe. Acho que me expressei errado. Gostei muito da sua opnião, mas ainda não testei.
Se puderem me ajudar como implementar isso usando Thread agradeço!!!
Se puderem me ajudar como implementar isso usando Thread agradeço!!!
GOSTEI 0
Tand
10/10/2003
Bem com o Thread fica um pouco mais complicado.
Voce vai ter que criar uma Classe herando do Thread
As instruções do seu botão voce vai ter que colocar na procedure Execute
Dentro da Execute voce vai ter que verificar o Status da propriedade Terminated para que quando voce clicar no outro botão e mandar o thread terminar ´MyThread.Terminate()´ Depois de terminado o Thread executa o evento OnThreadDone dentro dele voce coloca as instruções (tipo rollback ou commit da transação) voce pode incluir mais uma propriedade no seu thread para diferenciar o terminated normal do que voce cancela. Para ter apenas uma Function no OnThreadDone. Se quiser fazer algum update na tela usa uma procedure dentro do thread e chama ela através do comando ´Synchronize(UpdateTela);´. Espero que tenha ajudado. Se não entender pode falar.
Abraços.
Voce vai ter que criar uma Classe herando do Thread
type
TMyThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
procedure UpdateTela();
public
end;
As instruções do seu botão voce vai ter que colocar na procedure Execute
Dentro da Execute voce vai ter que verificar o Status da propriedade Terminated para que quando voce clicar no outro botão e mandar o thread terminar ´MyThread.Terminate()´ Depois de terminado o Thread executa o evento OnThreadDone dentro dele voce coloca as instruções (tipo rollback ou commit da transação) voce pode incluir mais uma propriedade no seu thread para diferenciar o terminated normal do que voce cancela. Para ter apenas uma Function no OnThreadDone. Se quiser fazer algum update na tela usa uma procedure dentro do thread e chama ela através do comando ´Synchronize(UpdateTela);´. Espero que tenha ajudado. Se não entender pode falar.
Abraços.
GOSTEI 0
Faelcavalcanti
10/10/2003
Poxa cara. Obrigado. É mais fácil do que ganhar do São Paulo ou do Santos. Na verdade pensava que seria um pouco mais complexo que isso.
Origado, sem ofensas.
Origado, sem ofensas.
GOSTEI 0
Beppe
10/10/2003
Só pra explicar a cahamada via Syncronize, ela pára todos os outros threads. Use-a para, por exemplo, acessar os controles VCL do form, que estão no thread(processo) principal.
Ataliba
Ataliba
GOSTEI 0