![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
размножение сессий на сервере БД [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]Неужели никто не знает?