Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

Выполнение запроса с помощью 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;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.029 c
3-1088139310
nik7777
2004-06-25 08:55
2004.07.25
Репликация между серверами FireBird 1.0.2


1-1089802187
Pest
2004-07-14 14:49
2004.07.25
блокировка alt f4


1-1089136713
Программатор
2004-07-06 21:58
2004.07.25
Универсальный редактор свойств


14-1089177548
Ega23
2004-07-07 09:19
2004.07.25
Ещё раз к вопросу о драйверах


3-1088971224
Max Zyuzin
2004-07-05 00:00
2004.07.25
BDE и Referential Integrity





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский