Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

размножение сессий на сервере БД [D6, sybase]


denis24 ©   (2004-10-06 17:57:00) 

Конекчусь к серверу
создаю временную таблицу с пом query (create table....)
Потом , при подготовке даныых для insert into.... эим же query,
вызываю storedproc где получаю нужное мне значение,закрываю этот storedproc
Заполняю нужные параметры запроса,пытаюсь выполнить- пишет таблица(которую я создал в начале ) не существует.
На дебугере сервера видно что создание табл,хранимая процедура выполняется в одной сессии.А как только вызываю insert into .....в эту времен табл созд вторая сессия.
Что посоветуете?


denis24   (2004-10-12 16:57:00) [1]

To pul
query1.sql.add('commit');
query1.execsql;
не помогает


DiamondShark   (2004-10-12 12:46:00) [2]

Транзакцию открывай.
По умолчанию режим autocommit, так что каждый оператор -- это отдельная транзакция.


Silver John   (2004-10-12 12:39:00) [3]

Если объяснишь суть задачи, напишу тебе сохраненку, как надумаешь, стучись на 196470609


Pul   (2004-10-12 11:22:00) [4]

После создания временной таблицы выполни COMMIT


xShadow   (2004-10-12 09:37:00) [5]

А у тебя создаётся TSession и TDataBase до обращения к БД до этого всего ?


denis24   (2004-10-12 09:21:00) [6]

>Silver John [11]
Как?


Silver John   (2004-10-09 14:51:00) [7]

ИМХО здесь можно вообще отказаться от временной таблицы


Silver John   (2004-10-09 14:46:00) [8]

Закатай все операции в одну хранимую процедуру


denis24   (2004-10-08 11:53:00) [9]

Может я не правильно делаю запросы и вызываю хранимаю процедуру?

query1.sql.add(' if exists (select 1  from  tempdb..sysobjects  where  id = object_id(''#_MyTemp_1'') and type = ''U'') DROP TABLE #_MyTemp_1');
query1.ExecSQL;

query1.close;
query1.sql.Clear;
query1.sql.Add('create table #_MyTemp_1(bin char(16),sc char(14),ost_sc numeric (17,2))');//,egf_cpnc char(6))');
query1.ExecSQL;

query1.Close;
       query1.SQL.Clear;
       query1.sqL.Add('INSERT INTO #_MyTemp_1');
       query1.sql.add(' (bin,sc,ost_sc)');
       query1.SQL.Add(' VALUES (:bin,:sc,:ost_sc)');
       query1.Params.Clear;
       P1 := TParam.Create(query1.Params, ptInput);
       P2 := TParam.Create(query1.Params, ptInput);
       P3 := TParam.Create(query1.Params, ptInput);
       query1.Params[0].Name := 'bin';
       query1.Params[1].Name := 'sc';
       query1.Params[2].Name := 'ost_sc';
         .
         .

query1.UnPrepare ;
query1.ParamByname('bin').Asstring:=n;
query1.ParamByname('sc').Asstring:=Table2.fieldbyname('sc').AsString;
query1.ParamByname('ost_sc').AsFloat:= Get_ost(table2.fieldbyname('sc').AsString);
query1.prepare;
query1.ExecSQL;->вот тут и создается вторая сессия в которой уже нет вышесозданной временной таблицы!!!!

А вот и сам GET_OST

function  Get_ost (acc:String ) :single ;
begin
StoredProc1.UnPrepare;
toredProc1.ParamByName('@rdate').AsString:=FormatDateTime('yyyy-mm-dd',now());
StoredProc1.ParamByName('@acc').AsString:=acc;
StoredProc1.ParamByName('@fl_ost').AsString:='O';
StoredProc1.Prepare;
try
StoredProc1.ExecProc;
finally
begin
result:=StoredProc1.Parambyname('@saldo').Asfloat;
redProc1.close;end;
end;
end;


Nikolay M.   (2004-10-07 11:42:00) [10]


> Sergey13 ©   (07.10.04 10:01) [7]

Интересуюсь, что такое "нормальные" ВТ. Выяснилось, что они мало чем отличаются от ВТ в МС СКЛ.


> Что такое батч?

В БОЛ.


Sergey13   (2004-10-07 10:01:00) [11]

2[5] Nikolay M. ©   (07.10.04 09:55)
Ну и? Я не понял - ты мне возражаешь или просто интересуешься? 8-) Я не знаком ни с МС СКЛ, ни с сайбейсом, поэтому и рекомендация была самого общего плана, которая будет работать везде.


denis24   (2004-10-07 09:56:00) [12]

Сервер норамальный- Sybase.Временная таблица создается на время сесси,потом автом.удаляется.
Что такое батч?


Nikolay M.   (2004-10-07 09:55:00) [13]

В МС СКЛ временная #-таблица тоже существует в рамках сессии.


Sergey13   (2004-10-07 09:43:00) [14]

2[3] Nikolay M. ©   (07.10.04 09:37)
>А что в твоем понимании нормальные временные таблицы?
Например как в Оракле. Создается постоянная таблица со статусом "временная". Данные там могут жраниться либо в течении сессии либо в течении транзакции. Кочилась сессия/транзакция данные удаляются автоматически сервером. Для прикладной программы это обычная таблица.


Nikolay M.   (2004-10-07 09:37:00) [15]


> Sergey13 ©   (07.10.04 09:24) [2]

А что в твоем понимании нормальныевременные таблицы?


> denis24

Что мешает выполнить все в одном батче? И создание ВТ, и вызов ХП, и заполнение ВТ?


Sergey13   (2004-10-07 09:24:00) [16]

>Что посоветуете?
Может не создавать временных таблиц в программе(если сервер не поддерживает нормальныхвременных таблиц)? Уж если шибко надо, то создать постоянную и использовать как временную - например писать туда, помимо прочего, какой нить идентификатор сессии.


denis24   (2004-10-07 09:19:00) [17]

Неужели никто не знает?


Наверх

Титульная страница Поиск, карта сайта Написать письмо