Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.30;
Скачать: CL | DM;

Вниз

Лог изменений в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
14-99302
AL2002
2002-12-09 17:34
2002.12.30
Сокровища UseNet


3-98982
Alex K
2002-12-10 11:40
2002.12.30
Как здеалть запрос на SQL но компоненте


1-99131
mikl2002
2002-12-18 12:24
2002.12.30
Как осуществить XLS преобразование в XMLDocument e


1-99050
^Sanya
2002-12-17 01:06
2002.12.30
Как правильно переопределить конструктор класса?


1-99087
Hopkins
2002-12-15 19:32
2002.12.30
Как из Delphi вносить изменения в окнах апплетов ?