Главная страница
    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
3-1088603725
Lesica
2004-06-30 17:55
2004.07.25
BDE транслирует поле типа MONEY в DECIMAL


14-1089303768
Sergey Kaminski
2004-07-08 20:22
2004.07.25
MemProof


14-1088829649
Василий Семенов
2004-07-03 08:40
2004.07.25
Какие форум/форумы на ваш взгляд заслуживают внимания?


1-1089622430
pavel_pavel
2004-07-12 12:53
2004.07.25
Копирование объектов


4-1086796374
DelphiN!
2004-06-09 19: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
Английский Французский Немецкий Итальянский Португальский Русский Испанский