Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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;
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
6-1848
nickolayLI
2002-10-21 07:16
2003.01.02
найти тачку в сети с заданным портом


14-1910
VEG
2002-12-15 12:46
2003.01.02
Где можно зарегистрировать свой товарный знак?


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


14-1916
F1
2002-12-15 13:27
2003.01.02
Точка в полигоне!!!


14-1859
MaximatorVeter
2002-12-12 13:34
2003.01.02
Горяченькими!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский