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

Вниз

Как заставить TClientDataSet перефильтроваться   Найти похожие ветки 

 
yaJohn ©   (2002-12-11 13:13) [0]

Приветствую великий Олл!
Есть ClientDataSet, который фильтруется по OnFilterRecord.
Меняем условие фильтрации. Говорим ДатаСету First Last или что-то еще, дабы перефильтроваться. Все работает.
Теперь задаем условие фильтрации которому не соответствует ни одна запись. ДатаСет послушно говорит RecordCount=0. И ни на какие попытки переместить курсор более не реагирует.
Т.е. меняем условие фильтрации но в гриде пусто, RecordCount=0. Тишина и покой.
Пример (дурацкий):
procedure TFrmMain.ClientDataSet1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept:=CheckBox1.Checked;
end;
Ну не Refresh же ему делать... Шибко медленно будет... Filtred:=false;Filtred:=true; не помогает.

Меня клинит и глючит. Столкните с мертвой точки. Как заставить этого поганца перефильтроваться?!

Заранее спасибо!


 
Johnmen ©   (2002-12-11 13:44) [1]

Из изложенного не видно проблемы...


 
yaJohn ©   (2002-12-11 15:00) [2]

Проблема в следующем (по примеру):
1)изначально CheckBox1.Checked=true соответственно видим все записи датасета.
2)устанавливаем CheckBox1.Checked=false и делаем, например First. Датасет пуст. Все логично.
3)снова устанавливаем CheckBox1.Checked=true. Логично ожидать появления в датасете всех записей. Однако этого не происходит и никакие манипуляции с датасетом не дают эффекта.


 
Johnmen ©   (2002-12-11 15:11) [3]

>Логично ожидать появления в датасете всех записей.
>Однако этого не происходит ...

Как это определяется ?

>...и никакие манипуляции с датасетом не дают эффекта.

Какие именно ?



 
yaJohn ©   (2002-12-11 15:29) [4]

Определяется визуально в ДБГриде, а так же по RecordCount.
Манипуляции по перемещению курсора First, Last, Next, PRior, а так же манипуляции с
Filtered (таковых я выдумал только две: :=true и :=false.

Насколько я понимаю, при RecordCount=0 OnFilterRecord просто не вызывается....



 
VAleksey ©   (2002-12-11 15:29) [5]

Это шутка что - ли ?
А где св-во Filtered устанавливается ?????????????


 
Johnmen ©   (2002-12-11 15:35) [6]

>yaJohn © (11.12.02 15:29)

Чудеса, да и только...
А если сделать Close-Open для ClientDataSet ? Нормально ?


 
yaJohn ©   (2002-12-11 15:41) [7]

>А где св-во Filtered устанавливается ?????????????
DesignTime. Примерчик - так, от фонаря. На самом деле фильтрация идет, конечно, по полям ДатаСета, а не по чекбоксу.
Шаманство призванное свершить сабж колдуется в OnChange котрола (контролов) которые содержата параметры фильтра.
Close-Open - не лучшая альтернатива Refresh. У меня по тех-заданию медленная сеть и прокачивать всю таблицу кри каждом клике юзера на чекбоксе я просто не могу.
Ну и кроме того, КлиентДатаСет может на момент фильтрации уже содержать дельту, что делает применение Refresh невозможным, а Open-Close - бессмысленным.



 
yaJohn ©   (2002-12-11 15:43) [8]

Мда, повторюсь. Трабла наблюдается ТОЛЪКО при RecordCount=0. Смены фильтров оставляющих в датасете хоть одну запись проходят гладко.


 
Johnmen ©   (2002-12-11 15:50) [9]

>yaJohn © (11.12.02 15:41)

Я разве что-то сказал по поводу необходимости применения Close-Open ? Нет ! Я лишь интересовался результатом эксперимента...
Ну да ладно...:)



 
yaJohn ©   (2002-12-11 15:58) [10]

Я такой эксперимент проводил. Результат - положительный. Однако метод неприемлимый. с.м. выше.



Страницы: 1 вся ветка

Текущий архив: 2003.01.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
1-1786
kingdom
2002-12-19 18:19
2003.01.02
Как послать письмо программно?


1-1793
orion_st
2002-12-20 10:08
2003.01.02
Добавить таймер в TRxTimerList


1-1788
Ospa
2002-12-20 13:26
2003.01.02
FileRead


14-1882
Дремучий
2002-12-13 19:13
2003.01.02
С праздником всех Андреев!


8-1841
Сергей.
2002-09-16 15:35
2003.01.02
Как установить рисунок на рабочий стол?