![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно отвязать TADODataSet от сервера? [D7, MSSQL]
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]
> выполнить запрос, отвязать его от базы и отдать его в другой
> поток на обработку, а текущий поток пусть выполняет следующий
> запрос.
А если по-русски?
Что значит "отвязать" и "отдать его в другой поток"? И каков тайный смысл сих манипуляций?