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

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

Лог изменений в TClientDataSet [D5]


Goobit ©   (2002-12-09 13:19:00) 

Кто-нибудь знает как заставить TClientDataSet не сохранять историю изменений для отката? Пробовал LogChanges := false, но при добавлении через Append..Post и после некоторого времени Delete, он все равно не чистит память! Плиз, хелп!


KA_   (2002-12-10 08:57:00) [1]

Для D7 есть какой-то update, исправляющий эти утечки. Но он доступен только зарегистрированным пользователям. см. borland.com


Goobit   (2002-12-09 16:23:00) [2]

2BorisUK ©: К сожалению я не участвовал в начале проекта и теперь уже поздно что-либо кардинально менять. Кроме того, это действительно ошибка в MIDAS (если никак нельзя подобную функцию отключить), которая в конечном итоге приводит к переполнению памяти и закрытию приложения. Во всяком случае в хелпе написано, что при LogChanges = false должно все прекрасно работать без провайдера.

2KA_: Пробовал в D7 - тот же эффект.

2Diouzshev: Было бы здорово, только он не поддерживает фильтра. TClientDataSet был изначально и выбран из-за этой возможности при хранении всей таблицы в памяти. Можно, конечно было бы поискать еще подобные компоненты, но хотелось бы по-человечески заюзать уже сделанное...

Спасибо всем за советы, если не получится отучить MIDAS есть память :), то, конечно, придется искать другой компонент...


Diouzshev   (2002-12-09 15:26:00) [3]

Используй RX MemoryTable (названия точно не помню)


KA_   (2002-12-09 15:00:00) [4]

В D5 у меня тоже были похожие проблемы. поставь второй UpdatePack. А лучше перейди на версию по-новее.


BorisUK   (2002-12-09 14:56:00) [5]

Не те компоненты используешь значит..
Велосипед не изобретай а делай как надо!


Goobit   (2002-12-09 14:49:00) [6]

Я забыл упомянуть, что мой ClientDS используется исключительно в локальном режиме (без провайдера), поэтому ApplyUpdates ни к чему не приводит. Там есть еще один метод: MergeLogUpdates. Он в принципе работает, но только когда между Post"ом и Delete"ом нет сдвига курсора: если вставить между ними ClientDS.RecNo := 1, то память продолжает расти. Очень простой тест:

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
Button1.Enabled := false;
for i:=0 to 999 do begin
cdsBug.Append;
cdsBug["ID"] := 1;
cdsBug["Name"] := "BUUUUUUUUUUG!!!!";
cdsBug.Post;
cdsBug.Delete;
end;
Button1.Enabled := true;
end;

Я пытался вставлять в разные места всякие извращения и ничего не помогает: в мониторе виртуальная память продолжает расти.


BorisUK   (2002-12-09 13:25:00) [7]

На сколько я понял Append и Post на локале изменяют только кешированный набор данных
при вызове метода ApplayUpdates данные синхронезируются с набором данных на сервере...
После этого возможность отмены кажись отсутствует и память очишяется.
ИМХО, но логично какжется :)


KA_   (2002-12-09 13:24:00) [8]

Подтверждение изменений освобождает эту память :)


Наверх

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