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

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

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]

Не уже ли никто помочь не может? :)


Наверх

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