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

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

Как правильно отвязать TADODataSet от сервера? [D7, MSSQL]


Страницы:   1 2

Zelius ©   (2004-03-29 17:47:00) 

Есть многопоточное серверное приложение, которое постоянно запрашивает базу данных. Мысль была такая, выполнить запрос, отвязать его от базы и отдать его в другой поток на обработку, а текущий поток пусть выполняет следующий запрос. Как я это делаю:

 ReadUserDataASP.Open;
 UnbindedDS := TADODataSet.Create(nil);
 UnbindedDS.Clone(ReadUserDataASP);
 UnbindedDS.Connection := nil;

дальше я этот UnbindedDS передаю в другой поток. Все работало, но тут стало вылезать сообщение "Could not continue scan with nolock due to data movement". Я так понимаю, что раз эта ошибка вылезает, то значит моя затея с отвязывание не удалась. Прошу совета, как правильно отвязываться наборы данных. Спасибо.


Delirium   (2004-03-30 13:26:00) [21]

"хотелось бы обойтись без лишних потоков" - что-то я не понял, где в функции CopyRecordSet хоть какая-то связь с потоками?


Zelius   (2004-03-30 13:17:00) [22]


> Delirium ©

хотелось бы обойтись без лишних потоков, ведь должен же быть способ :)


> sniknik ©

попробовал, но оказывается это не работает с процедурами, которые возвращают больше одного рекордсета :(


sniknik   (2004-03-29 18:02:00) [23]

скорее проблема на передаче в поток. (а раньше работало, данных меньше было)

еще попробуй nil не коннекту склонированного датасета присвавать а рабочему
типа
UnbindedDS := TADODataSet.Create(nil);
UnbindedDS.Connection := Connection1;
UnbindedDS.CommandText:= ReadUserDataASP.CommandText;
UnbindedDS.Open;
UnbindedDS.Connection := nil;

(оно же там чтото делает на отсоеденении, а если было нил и нил присваивается ... скорее всего проигнорирует (сам в коде посмотри))


Delirium   (2004-03-29 18:01:00) [24]

> Zelius ©   (29.03.04 17:47)  
С.м. function CopyRecordSet(RecordSet:_RecordSet):_RecordSet;
из http://delphibase.endimus.com/?action=viewfunc&topic=basemssql&id=10112


Delirium   (2004-03-29 17:58:00) [25]

UnbindedDS.Clone(ReadUserDataASP); - это не копирование рекордеста, а всего лишь новый экземпляр курсора к одим и тем-же данным


Nikolay M.   (2004-03-29 17:58:00) [26]


> выполнить запрос, отвязать его от базы и отдать его в другой
> поток на обработку, а текущий поток пусть выполняет следующий
> запрос.

А если по-русски?
Что значит "отвязать" и "отдать его в другой поток"? И каков тайный смысл сих манипуляций?


Страницы:   1 2

Наверх

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