Форум: "Базы";
Текущий архив: 2003.01.02;
Скачать: [xml.tar.bz2];
ВнизКак заставить TClientDataSet перефильтроваться Найти похожие ветки
← →
yaJohn (2002-12-11 13:13) [0]Приветствую великий Олл!
Есть ClientDataSet, который фильтруется по OnFilterRecord.
Меняем условие фильтрации. Говорим ДатаСету First Last или что-то еще, дабы перефильтроваться. Все работает.
Теперь задаем условие фильтрации которому не соответствует ни одна запись. ДатаСет послушно говорит RecordCount=0. И ни на какие попытки переместить курсор более не реагирует.
Т.е. меняем условие фильтрации но в гриде пусто, RecordCount=0. Тишина и покой.
Пример (дурацкий):
procedure TFrmMain.ClientDataSet1FilterRecord(DataSet: TDataSet;
Ну не Refresh же ему делать... Шибко медленно будет...
var Accept: Boolean);
begin
Accept:=CheckBox1.Checked;
end;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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c