Array
(
)

TADOConnection.Close;

Marioguedes
   - 01 dez 2005

Olá a todos!

Tenho um projeto em Delphi 7 que roda como serviço do Windows.
Por sua vez aciona-se várias Threads que tem objetivos diversos.

Cada uma dessas threads possui diversos TADOConnection apontando para o mesmo banco (quero mudar isto mas devido a diversos fatores, é meio complicado...).

Bom o fato é que eventualmente quando é dado TADOConnection.Close a thread em questão fica no limbo, ou seja, não gera exception e ao mesmo tempo não vai para frente. O software pode ficar o dia todo funcionando, e sem mais nem menos, ocorre o problema.

O chato é que meu software não tem como tomar conhecimento deste fato para tomar uma atitude corretiva.

Alguém já possou por algo parecido? Estou acessando um banco de dados Oracle.

Há algum evento do componente que eu possa tratar?

Muito obrigado!


Rmpena25
   - 03 mar 2006

Mario,

Estou com um problema muito parecido. Não sei se você conseguiu resolver o seu problema mas seria interessante trocarmos umas idéias sobre o problema e podermos nos ajudar!

Entre em contato comigo: rmpena25@yahoo.com.br

Ronaldo Pena.


Thiago Vidal
   - 03 mar 2006

tive alguns problemas semelhantes com threads... fica difícil ajudar sem maiores detalhes, tudo depende da forma como foi programado o MainLoop da thread no método Execute.... mas no meu caso, bastou fazer o loop da seguinte forma:

#Código

procedure Execute;
begin
while ADOConnection1.Active and not Terminated do
begin
// ... Código
end;
end;


Caso o problema seja falha de conexão, e o objetivo seja suspender a atividade da thread até que a conexão retorne, uma sugestão seria:

#Código
Priority := tpIdle;
repeat Application.ProcessMessages
until ADOConnection1.Active or Terminated;
Priority := tpNormal;