Мне нужно сделать долгосрочную задачу в фоновом режиме.Я использую OmniThreadLibrary , но это может помочь мне.
Я использую драйвер dbexpress + mssql.Я могу подключиться нормально, когда находится в основном потоке, но получаю:
Project Project1.exe поднял класс исключения TDBXError с сообщением «Ошибка DBX: не удалось правильно инициализировать драйвер.Клиентская библиотека может отсутствовать, неправильно установлена, неверной версии или драйвер может отсутствовать в системном пути. '.
Соединения создаются в каждом потоке, а не в общем модуле данных:
type
TdbManager = class(TObject)
private
{ private declarations }
FCon: TSQLConnection;
public
{ public declarations }
procedure Open(Driver:String; aparams:TStringList);overload;
procedure Close;
constructor Create;
destructor Destroy;override;
end;
constructor TdbManager.Create;
begin
inherited Create;
FCon := TSQLConnection.Create(nil);
end;
procedure TdbManager.Open(Driver: String; aparams: TStringList);
var
i: Integer;
key:string;
begin
FCon.DriverName := Driver;
for i := 0 to params.Count - 1 do
begin
key := params.Names[i];
FCon.Params.Values[key] := params.Values[key];
end;
LogMsg('Open DB '+ Driver + ': ' + FHost + '\' + FDatabase);
FCon.Open;
LogMsg('Done.');
end;
И фоновое задание выполняется:
procedure TBackupPlan.OnScheduleTrigger(Sender: TScheduledEvent);
begin
Parallel.Async(procedure
begin
ExecuteDataTask( Sender.Name );
end);
end;
procedure TBackupPlan.ExecuteDataTask(const Name: String);
var
db:TdbManager;
begin
db := nil;
db := TSqlServerManager.Create;
db.Open(self.Driver, options);
result := db;
end;
Если я выполню это напрямую, откройте ок.Если я использую Parallel.Async
, получите ошибку.Что здесь происходит?