Форум: "Базы";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
ВнизВыполнение запроса с помощью TOracleQuery (DOA) в потоке. Найти похожие ветки
← →
Plt (2004-07-01 16:47) [0]Запускается приложение, конектюсь к базе. У TOracleSession свойство ThreadSafe = true. Передаю сессию в поток. Но пока не выполнится поток невозможно открыть новую форму!! В форму тоже передается сессия. Делаю так:
TSAMSesThread = class(TThread)
private
ExecQry: TOracleQuery;
HotSAM : string;
Ses : TOracleSession;
protected
procedure Execute; override;
procedure SaveAction;
public
procedure InitSAMSes(aSes : TOracleSession);
end;
procedure TSAMSesThread.InitSAMSes(aSes: TOracleSession);
begin
FreeOnTerminate := True;
Ses := aSes;
ExecQry := TOracleQuery.Create(nil);
ExecQry.Session := Ses;
with ExecQry do
begin
SQL.Clear;
SQL.Add(".....");
end;
Resume;
end;
procedure TSAMSesThread.Execute;
begin
try
ExecQry.Execute;
with ExecQry do
begin
while not Eof do
begin
HotSAM := HotSAM + Format("%s [¹%d Îïèñàíèå: %s]",[FieldAsString("sam"),FieldAsInteger("dev_id"),FieldAsString("dev_dsc")]) + ",";
Next;
end;
if RowCount > 0 then
Synchronize(SaveAction);
end;
finally
ExecQry.Free;
end;
end;
← →
Reindeer Moss Eater © (2004-07-01 16:50) [1]Видимо виноват Syncronize;
Либо у двух Query выполняющихся в разных потоках одна и та же сесия
← →
Plt (2004-07-01 16:59) [2]Пробывал создавать для каждого потока свой TOracleSession и убирал Synhronize, задержка осталась.
← →
Reindeer Moss Eater © (2004-07-01 17:02) [3]Создавать два TOracleSession мало.
Надо что бы запросы основного потока и вторичного использовали разные сессии
← →
Reindeer Moss Eater © (2004-07-01 17:06) [4]А еще не виден код основного потока, создающего нить.
Мало ли там чего может быть. Например waitfor
← →
Plt (2004-07-01 17:10) [5]В новом варианте:
SAMSesThread := TSAMSesThread.Create(True);
SAMSesThread.InitSAMSes(ARM_Session); и все без Waitfor
procedure TSAMSesThread.InitSAMSes(aSes: TOracleSession; aLang: TJanLanguage);
begin
FreeOnTerminate := True;
Lang := aLang;
OraSes := TOracleSession.Create(nil);
OraSes.LogonUsername := aSes.LogonUsername;
OraSes.LogonPassword := aSes.LogonPassword;
OraSes.LogonDatabase := aSes.LogonDatabase;
OraSes.LogOn;
ExecQry := TOracleQuery.Create(nil);
ExecQry.Session := OraSes;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.062 c