Главная страница
    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.046 c
3-1088413983
KIR
2004-06-28 13:13
2004.07.25
Как передать в ХП параметр типа BLOB


14-1088782505
Baron
2004-07-02 19:35
2004.07.25
Губернатор - клоун


14-1088853395
menart
2004-07-03 15:16
2004.07.25
Опять суббота!


4-1087321751
juiceman
2004-06-15 21:49
2004.07.25
перехват сообщения


14-1089096754
Alibaba
2004-07-06 10:52
2004.07.25
Артист





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