![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ClientDataSet и память? [D6]
Max_ © (2003-09-15 11:07:00)
У меня цепочка ADOQuery->DataSetProvider->ClientDataSet->DataSource->DBGrid
Пишу динамически Select"ы и частично данные кешируются, когда делаю Fetch! Через некоторое время увидел, что комп начал тормозить! Включил TaskManager и увидел, что моя прога занимает не 3Mb, а 160Mb :( Начал эксперементировать и понял, что ClientDataSet не освобождает локальный кэш при запуске нового запроса! Я уж подумал: может это ADOQuery виноват, но там СursorType ыставлен в clUseServer! ClientDataSet закрываю перед каждым запросом, ADOQuery- тоже! Пробывал ClientDataSet1.Data:=null - не помогает! Как быть?
Arm79 (2003-09-15 18:37:00) [1]
Я не шучу. Тоже был удивлен. А насчет dbExpress - настоятельно рекомендую.
Vlad (2003-09-15 18:13:00) [2]
Ребяты, я точно помню, что в D5, например, даннные в дбгриде отражаются нормально с UseServer
Причем никаких апгрейдов для ADO не ставил, все было в стандартной комплектации.
Вы чё-то шутите по-моему.
Arm79 (2003-09-15 18:02:00) [3]
Зачем мудрить. Установи на clUseClient, просто записи возвращай не все. Либо измени запрос, либо количество возвращаемых записей в св-вах компонента. Что-то типа PacketRecord или что-то в этом духе. Зачем нагрузку валить на сервер? Если упорно нужно ClientDataset, то рекомендую dbExpress.
Max_ (2003-09-15 16:50:00) [4]
Taк я не говорю, что данные не отображаются! Отображаются, но только в CursorType=clUseClient (когда всё валит на клиента)
Arm79 (2003-09-15 16:25:00) [5]
Только не надо говорить, что данные от ADOQuery не отображаются! :-)
Max_ (2003-09-15 16:16:00) [6]
ClientDataSet, что б в Grid"e данные показывать! :)
Arm79 (2003-09-15 15:52:00) [7]
Зачем тебе тогда ClientDataSet, если все изменения идут на сервер?
> Уверен, я его в runtim"e выставляю
Ты проверь после открытия БД
Max_ (2003-09-15 15:49:00) [8]
2 кэша тогда, когда ADO CursorType=clUseClient, а у меня один кэш- ClientDataSet! Уверен, я его в runtim"e выставляю!
Arm79 (2003-09-15 14:41:00) [9]
1 - зачем тебе 2 кэша(ADO-шный и ClientDataSet)?
2 - Ты уверен, что СursorType=clUseServer? Посмотри в runtime
Max_ (2003-09-15 14:33:00) [10]
База Oracle! Цепочка ADOQuery->DataSetProvider->ClientDataSet->DataSource->DBGrid! ADOQuery и ADOConnection свойство СursorType=clUseServer!
Код самый обыкновенный:
procedure Button1Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(Memo1.Text); //я не открываю ADOQuery - //это делает Provider через ClientDataSet
ClientDataSet1.Close;
ClientDataSet1.Open;
end;
Arm79 (2003-09-15 14:19:00) [11]
Поподробнее, какая СУБД. Лучше текст проги. Можно на мыло
Max_ (2003-09-15 14:17:00) [12]
пробывал- тоже самое!
Arm79 (2003-09-15 14:04:00) [13]
Посылает все обновленные записи на сервер. -1 - количество допустимых ошибок, те в нашем случае ни одной. А так все держиться в локальном кэше.
Max_ (2003-09-15 13:59:00) [14]
Нет не пробывал! ClientDataSet1.ApplayUpdates(-1) случайно не Delt"у посылает на сервер?
Arm79 (2003-09-15 13:53:00) [15]
А пробовал ClientDataSet1.ApplayUpdates(-1)?
Max_ (2003-09-15 11:42:00) [16]
Не уже ли никто помочь не может? :)