Всем доброго дня! Проблема в следующем.
Было обычное приложение, в котором был некий функционал, который создавал поток (потоки), которые в свою очередь внутри себя создавал ADO-шные контролы (ADOConnection, ADOStoredProc и т.д.) и все прекрасно работало. Решил переделать все в сервис.
Внутри сервиса создал класс потока:
TThreadLoad = Class(TThread)
private
connect: TADOConnection;
//Объявление других ADO-шных контролов
prov,user,base,serv,pass,sport,str1,us_id,sqnt,sqnt_update,fname,req,send,
req_update,req_update_current,constr,log_mess:string;
qnt,qnt_update:integer;
ini:tinifile;
f: textfile;
procedure WriteLog(strLog:string);
protected
procedure Execute; override;
end;
из ServiceExecute(Sender: TService) создаю поток и запускаю его:
var
path,fname:string;
begin
path:=ExtractFilePath(ParamStr(0));
fname:=path+'log.txt';
if fileexists(fname) then
begin
AssignFile(f, fname);
Reset(f);
append (f);
Writeln (f,datetimetostr(now)+chr(9)+'Запуск загрузки');
CloseFile(f) ;
end;
with TThreadLoad.Create(True) do
begin
Resume;
end;
Далее код попытки подключения к серверу БД в самом потоке:
procedure TThreadLoad.Execute;
var
path:string;
begin
inherited;
try
FreeOnTerminate := True;
CoInitialize(nil);
path:=ExtractFilePath(ParamStr(0));
if fileExists(path+'connect.ini') then
begin
ini:=tinifile.Create(path+'connect.ini');
prov:=ini.ReadString('SQL Server','Provider',' ');
us_id:=ini.ReadString('SQL Server','Logid',' ');
base:=ini.ReadString('SQL Server','Database',' ');
serv:=ini.ReadString('SQL Server','ServerName',' ');
pass:=ini.ReadString('SQL Server','LogPassword',' ');
constr:='Provider='+prov+';User ID='+us_id+';Initial Catalog='+base+';Data Source='+serv+';Password='+pass;
connect:=TADOConnection.Create(nil);
connect.ConnectionString:=constr;
try
connect.Open(); //На этой строке программа молча вылетает
log_mess:=datetimetostr(now)+chr(9)+'Зацепились к базе...';
WriteLog(log_mess);
// Далее основная логика, но до нее ход не доходит
except
on e:exception do
begin
WriteLog(e.Message);
end;
end;
end;
finally
CoUnInitialize;
end;
на строке connect.Open(); процесс просто прерывается и вылетает, не говоря ни слова. Повторюсь, что в обычном "оконном варианте" все работает норм.
Подскажите, плз, в чем грабли и куда копать? Заранее благодарен!