ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Thread não Atualiza BD no Windows NT

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Luciano_Umbelino
Novato
Novato


Registrado: Segunda-Feira, 9 de Novembro de 2009
Mensagens: 9

MensagemEnviada: Qui Fev 17, 2011 9:55 am    Assunto: Thread não Atualiza BD no Windows NT Responder com Citação

Sr(a)s, bom dia,
Mais uma vez recorro a vcs, neste caso estou precisando muito e com urgência do seu auxílio. Estou implantando minha aplicação no cliente e está acontecendo um erro muito estranho. O cliente tem Windows 2008 R2 NT, com uma rede cheia de restrições. Teoricamente e pelo que o administrador da rede diz, todas as autorizações foram dadas. Acontece que nesta aplicação tenho uma thread que recebe um arquivo, com os dados desse arquivo txt, ele atualiza uma base de dados FireBird 2.5. Debugando, no cliente (com msgs numéricas) pude ver que acontece exatamente quando a thread vai atulizar o banco de dados. Nos testes que fiz, em diversas máquinas, com XP, Window7, a atualização funciona corretamente, só nesse cliente é que não acontece. Não estou sabendo mais o que fazer, alguem tem alguma pista? Sabe alguma coisa que eu possa fazer para contornar esta situação. No mesmo cliente, direto pela aplicação consigo atualizar uma outra tabela, acho que precisa haver alguma autorização especial para a thread? Será que o sistema encherga ela como uma aplicação independente?
Pessoal estou com maior urgência dessa resposta
Amigos desde já agradeço a sua atenção, qualquer auxílio será muito bem vindo.

Um abraço,

Luciano Umbelino
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fabriciocolombo
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 17 de Julho de 2008
Mensagens: 189

MensagemEnviada: Qui Fev 17, 2011 10:07 am    Assunto: Responder com Citação

Pode estar ocorrendo alguma exceção dentro da thread.

Vc está fazendo algum tratamento de exceções dentro da thread? Está lançando alguma exceção manualmente?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Luciano_Umbelino
Novato
Novato


Registrado: Segunda-Feira, 9 de Novembro de 2009
Mensagens: 9

MensagemEnviada: Qui Fev 17, 2011 11:29 am    Assunto: Thread não Atualiza BD no Windows NT Responder com Citação

fabriciocolombo escreveu:
Pode estar ocorrendo alguma exceção dentro da thread.

Vc está fazendo algum tratamento de exceções dentro da thread? Está lançando alguma exceção manualmente?


Olá Fabricio, grato pela sua atenção.
Amigo, com certeza está havendo uma exceção e é justamente por não estar conseguindo resolver que postei o tópico. Acontece que quando a thread vai atualizar o BD não consegue. Isso só acontece no ambiente deste cliente que é um Windows 2008 R2 NT, já com o XP e W7, não acontece. O meu sentimento é que a Thread por ser um processo quase que apartado, também necessita de autorização. Esse é o problema.
Se tiver alguma dica será de grande auxílio.

Grato,
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fabriciocolombo
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 17 de Julho de 2008
Mensagens: 189

MensagemEnviada: Qui Fev 17, 2011 12:47 pm    Assunto: Responder com Citação

É que as exceções lançadas dentro da thread não são propagadas para a aplicação.

Capture as exceções da thread para mostrar na aplicação. Fiz um exemplo simples.

Código:

  TTeste= class(TThread)
  private
    FOnError: TExceptionEvent; //evento de Callback
    FLastError: Exception; //Ultima exceção gerada

    procedure NotifyError;
  protected
    procedure Execute;override;
  public
    constructor Create(AOnError: TExceptionEvent);
   end;

{ TTeste }

procedure TTeste.Execute;
begin
  inherited;
  try
    //Seu código aqui
    raise Exception.Create('exceção qualquer para simular');
  except
    on E: Exception do
    begin
      FLastError := E;

      Synchronize(NotifyError);
    end;
  end;
end;

constructor TTeste.Create(AOnError: TExceptionEvent);
begin
  Assert(Assigned(AOnError));

  FOnError := AOnError;

  inherited create(false);

  FreeOnTerminate := True;
end;

procedure TTeste.NotifyError;
begin
  FOnError(Self, FLastError);
end;



Onde vc chama a thread, crie um método como esse

Código:

procedure TForm1.OnThreadError(Sender: TObject; Error: Exception);
begin
  //Manipular a exceção
  ShowMessage(Error.Message);
end;


e no construtor da thread passa o método de callback

Código:
TTeste.Create(OnThreadError);


Desse modo vc vai sabe exatamente qual erro está acontecendo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB