Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

размножение сессий на сервере БД   Найти похожие ветки 

 
denis24   (2004-10-06 17:57) [0]

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


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

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


 
Sergey13 ©   (2004-10-07 09:24) [2]

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


 
Nikolay M. ©   (2004-10-07 09:37) [3]


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

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


> denis24

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


 
Sergey13 ©   (2004-10-07 09:43) [4]

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


 
Nikolay M. ©   (2004-10-07 09:55) [5]

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


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

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


 
Sergey13 ©   (2004-10-07 10:01) [7]

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


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


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

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


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

В БОЛ.


 
denis24   (2004-10-08 11:53) [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;


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

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


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

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


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

>Silver John [11]
Как?


 
xShadow ©   (2004-10-12 09:37) [13]

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


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

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


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

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


 
DiamondShark ©   (2004-10-12 12:46) [16]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.11.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.053 c
9-1088316706
X-Disa
2004-06-27 10:11
2004.11.14
Asteroid Killer


14-1099059159
Kerk
2004-10-29 18:12
2004.11.14
США могут повторить судьбу СССР


14-1098885350
VID
2004-10-27 17:55
2004.11.14
FIBPlus 5.x


1-1098981508
Redlord
2004-10-28 20:38
2004.11.14
listview + ShGetFileInfo


1-1099400578
Strimer
2004-11-02 16:02
2004.11.14
Возможно ли разместить вертикальный текст на кнопке?