![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Лог изменений в 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]Подтверждение изменений освобождает эту память :)