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

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

Как заставить TClientDataSet перефильтроваться [D5]


yaJohn ©   (2002-12-11 13:13:00) 

Приветствую великий Олл!
Есть 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;не помогает.

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

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


yaJohn   (2002-12-11 15:58:00) [1]

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


Johnmen   (2002-12-11 15:50:00) [2]

>yaJohn © (11.12.02 15:41)

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


yaJohn   (2002-12-11 15:43:00) [3]

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


yaJohn   (2002-12-11 15:41:00) [4]

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


Johnmen   (2002-12-11 15:35:00) [5]

>yaJohn © (11.12.02 15:29)

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


yaJohn   (2002-12-11 15:29:00) [6]

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

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


VAleksey   (2002-12-11 15:29:00) [7]

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


Johnmen   (2002-12-11 15:11:00) [8]

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

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

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

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


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

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


Johnmen   (2002-12-11 13:44:00) [10]

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


Наверх

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