Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.036 c
14-1088911799
Григорьев Антон
2004-07-04 07:29
2004.07.25
А кто за статьи на этом сайте отвечает?


1-1089787498
TransparentGhost
2004-07-14 10:44
2004.07.25
TComboBox - не могу использовать Canvas.


1-1089544367
DelphiNew
2004-07-11 15:12
2004.07.25
Удаление в TreeView


14-1089174057
leonidus
2004-07-07 08:20
2004.07.25
Идея


3-1088685364
Ceval
2004-07-01 16:36
2004.07.25
Подскажите как с помощью ADOTable связать две таблицы ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский