Форум: "Базы";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
ВнизЛог изменений в TClientDataSet Найти похожие ветки
← →
Goobit (2002-12-09 13:19) [0]Кто-нибудь знает как заставить TClientDataSet не сохранять историю изменений для отката? Пробовал LogChanges := false, но при добавлении через Append..Post и после некоторого времени Delete, он все равно не чистит память! Плиз, хелп!
← →
KA_ (2002-12-09 13:24) [1]Подтверждение изменений освобождает эту память :)
← →
BorisUK (2002-12-09 13:25) [2]На сколько я понял Append и Post на локале изменяют только кешированный набор данных
при вызове метода ApplayUpdates данные синхронезируются с набором данных на сервере...
После этого возможность отмены кажись отсутствует и память очишяется.
ИМХО, но логично какжется :)
← →
Goobit (2002-12-09 14:49) [3]Я забыл упомянуть, что мой 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 14:56) [4]Не те компоненты используешь значит..
Велосипед не изобретай а делай как надо!
← →
KA_ (2002-12-09 15:00) [5]В D5 у меня тоже были похожие проблемы. поставь второй UpdatePack. А лучше перейди на версию по-новее.
← →
Diouzshev (2002-12-09 15:26) [6]Используй RX MemoryTable (названия точно не помню)
← →
Goobit (2002-12-09 16:23) [7]2BorisUK ©: К сожалению я не участвовал в начале проекта и теперь уже поздно что-либо кардинально менять. Кроме того, это действительно ошибка в MIDAS (если никак нельзя подобную функцию отключить), которая в конечном итоге приводит к переполнению памяти и закрытию приложения. Во всяком случае в хелпе написано, что при LogChanges = false должно все прекрасно работать без провайдера.
2KA_: Пробовал в D7 - тот же эффект.
2Diouzshev: Было бы здорово, только он не поддерживает фильтра. TClientDataSet был изначально и выбран из-за этой возможности при хранении всей таблицы в памяти. Можно, конечно было бы поискать еще подобные компоненты, но хотелось бы по-человечески заюзать уже сделанное...
Спасибо всем за советы, если не получится отучить MIDAS есть память :), то, конечно, придется искать другой компонент...
← →
KA_ (2002-12-10 08:57) [8]Для D7 есть какой-то update, исправляющий эти утечки. Но он доступен только зарегистрированным пользователям. см. borland.com
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c