GARANTIR DESCONTO

Fórum Thread + TADOConnection #393952

19/01/2011

0

Pessoal estou com um problema ...

Tenho uma aplicação que é responsável pelo envio de e-mails de um sistema. Explicando melhor, tenho uma aplicação principal onde todo o e-mail que necessita ser enviado é salvo em uma tabela de EMAILS.

Esta minha aplicação de tempos em tempos se conecta ao banco, seleciona os e-mails e os envia.

Este processo é feito por meio de threads utilizando DBX para conexão com o Banco.

Porém, como migrei de BD (Firebird para MSSQL 2005), mudei tambem o componente de acesso de DBX para ADO e para minha surpresa esta aplicação não funciona mais.

Na Thread tenho a variável: [b]sqlConexao : TADOConnection;[/b]

E um procedimento de conexão com o banco assim:

function ConectaBancoDados : Boolean;
var
  i : Integer;
begin
  // Configura o mesmo para um conexão a uma base de dados ...
  sqlConexao := TADOConnection.Create(Nil);
  Try
    // Inseri os parâmetros de conexão no componente ...
    sqlConexao.Connected         := False;
    sqlConexao.LoginPrompt       := False;
    sqlConexao.ConnectionTimeout := 60;
    sqlConexao.ConnectionString  := 'Provider=SQLNCLI.1;Password=' + DadosBancoCSC.Senha +
                                    ';Persist Security Info=True;User ID=' + DadosBancoCSC.Usuario +
                                    ';Initial Catalog=' + DadosBancoCSC.Banco +
                                    ';Data Source=' + DadosBancoCSC.Host + ';';

    // Tenta estabelecer uma conexão com o banco (3 tentativas) ...
    For i := 1 To 4 Do
    begin
      Try
        sqlConexao.Connected := False;
        sqlConexao.Connected := True;

        Break;
      Except
        On E : Exception Do
        begin
          if i < 4 then
          begin
            GerarLog('CONEXÃO BANCO ' + IntToStr(i) + '° TENTATIVA', E.Message);
            Sleep(30000);
          end
          else
            GerarLog('ERRO CONEXÃO BANCO', E.Message);
        End;
      End;
    end;
  Finally
    Result := sqlConexao.Connected;
  End;
end;

Logo na linha de criação da variável de conexão:
sqlConexao := TADOConnection.Create(Nil); recebo a seguinte mensagem: CoInitialize has not been called

O engraçado é que com DBX funcionava normal, quando mudei de TSQLConnection para TADOConnection lascou tudo !!

Alguem sabe o que pode ser ??

Valeu
Carlos Souza

Carlos Souza

Responder

Posts

19/01/2011

Leonardo Xavier

ja tentou utilizar


sqlConexao := TADOConnection.Create(SELF);
Responder

Gostei + 0

19/01/2011

Emerson Nascimento

veja essa dica:

http://chrisbensen.blogspot.com/2007/06/delphi-tips-and-tricks_26.html



Responder

Gostei + 0

19/01/2011

Carlos Souza

Pessoal consegui resolver o problema e vou colocar aqui a solução...

Antes da criação do ADOConnection, coloquei o seguinte comando:

[b]CoInitializeEx(nil, 0);[/b]

O parâmetro 0 indica: COINIT_MULTITHREADED (usado na utilização de Threads)

E ao final da execução do código coloquei:

[b]CoInitializeEx(Nil, CoReleaseServerProcess)[/b]

Na verdade não consegui entender direito a função deste procedimento (pois só achei material em inglês), mas vou pesquisar e entender direito o motivo da utilização destes comandos.

Valeu
Responder

Gostei + 0

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

Aceitar