Fórum Thread + TADOConnection #393952
19/01/2011
0
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
Curtir tópico
+ 0Posts
19/01/2011
Leonardo Xavier
sqlConexao := TADOConnection.Create(SELF);
Gostei + 0
19/01/2011
Emerson Nascimento
http://chrisbensen.blogspot.com/2007/06/delphi-tips-and-tricks_26.html
Gostei + 0
19/01/2011
Carlos Souza
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)