ODAC, возникает 2-е сессии ... почему?

копосов нв

Собственно вопрос в теме ...Delphi6ODAC 5.10.0.5 NetВ программе использую один OraSessionВ чём может быть проблема?-----------------------------------------------------------Информация – это то, чем я пользуюсь для принятия решений.Бернерс-Ли
8 ответов

копосов нв

Попробуй включить оракловую трассировку и посмотри, что делает вторая сессия. Напимер, в Oracle есть пакет для отладки dbms_debug, который для работы требует второй сессии.


копосов нв

Current Statement 1-ой сессии
<b>BEGIN</b>
 :<b>1</b> := DBMS_LOB.getlength (:<b>2</b>);
<b>END</b>;
а вот второй
<b>BEGIN</b>
 DBMS_ALERT.waitany (:NAME, :MESSAGE, :status, :TIMEOUT);
<b>END</b>;
-----------------------------------------------------------Информация – это то, чем я пользуюсь для принятия решений.Бернерс-Ли


копосов нв

<b>constructor</b> TOraAlerter.Create(Owner: TComponent);
<b>begin</b>

....

 WaitSQL := TOraSQL.Create(<b>nil</b>);
 WaitSQL.Session := InternalSession;
....
<b>procedure</b> TOraAlerter.Start;
...
 WaitSQL.SQL.Text := 'begin ' + SQL + 'DBMS_ALERT.WaitAny(:Name, :Message, :Status, :TimeOut); end;';
...
Вопросы ?


копосов нв

<b>constructor</b> TOraAlerter.Create(Owner: TComponent);
<b>begin</b>

....

 WaitSQL := TOraSQL.Create(<b>nil</b>);
 WaitSQL.Session := InternalSession;
....
<b>procedure</b> TOraAlerter.Start;
...
 WaitSQL.SQL.Text := 'begin ' + SQL + 'DBMS_ALERT.WaitAny(:Name, :Message, :Status, :TimeOut); end;';
...
Вопросы ?
Ага понял OraAlerter виноват создаёт ещё одну сесию...но вот в чём дело alert используется в другом модуле(форме), которая не инициализируется при старте приложения?


копосов нв

Проведите ликбез: я понимаю если бы вторая сесия возникала на создание новой формы в run-time а не пристарте приложения. Да и вот действия с OraAlert в создаваемой форме:на FormShowOraPipe.Events := 'send_mess_numpirgal_' + IntToStr( FormPIR2PIR.varSessionID );после определённого действия выполняю{необходимо для перехвата сообщения от триггера} {вызываю после внешнего commit} if not OraPipe.Active then OraPipe.Start;нигде не делаю (FormClose)OraPipe.Stop;-----------------------------------------------------------Информация – это то, чем я пользуюсь для принятия решений.Бернерс-Ли


копосов нв

up-----------------------------------------------------------Информация – это то, чем я пользуюсь для принятия решений.Бернерс-Ли


копосов нв

up-----------------------------------------------------------Информация – это то, чем я пользуюсь для принятия решений.Бернерс-Ли
Что up ???? Тебе же ткнули в код - работа c TOraAlerter порождает вторую сессию в принудительном порядке (см. создание отдельных InternalSession под каждый TOraAlerter) ! Собственно как ты вообще собрался работать с DBMS_ALERT (или тебе просто поговорить хочется)?


копосов нв

Что up ???? Тебе же ткнули в код - работа c TOraAlerter порождает вторую сессию в принудительном порядке (см. создание отдельных InternalSession под каждый TOraAlerter) ! Собственно как ты вообще собрался работать с DBMS_ALERT (или тебе просто поговорить хочется)?
злой человек ... мы выяснили почему вторая сессия ...вопрос в другом, управление сессией для alert'a как-то можно взять под контроль (я же писал что oraalert живёт на run-time создаваемой форме)