Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 209

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Пытался сделать простой фильтр таблицы, выскочила ошибка, почему ведь все как в книге. Чего нет в книге.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. begin
  3. ADOTable1.Filter:= '';
  4. ADOTable1.FilterOptions:= [foCaseInsensitive];
  5. ADOTable1.Filtered:= false;
  6. end;
  7.  
  8. procedure TForm1.Button1Click(Sender: TObject);
  9. begin
  10. ADOTable1.Filtered:= true;
  11. if CheckBox1.Checked then ADOTable1.Filter:=
  12. 'Date> ' + DateToStr(DateTimePicker1.Date) +
  13. 'AND Date< ' + DateToStr(DateTimePicker2.Date);
  14. if CheckBox1.Checked then ADOTable1.Filter:= '';
  15. end;


demyan Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: demyan (статус: Посетитель)
Вопрос отправлен: 19 сентября 2009, 23:19
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич

Здравствуйте, demyan!
Предпоследняя строчка

if CheckBox1.Checked then ADOTable1.Filter:= '';

Отменяет все старания, сделанные предыдущей:

if CheckBox1.Checked then ADOTable1.Filter:=
  'Date> ' + DateToStr(DateTimePicker1.Date) +
  'AND Date< ' + DateToStr(DateTimePicker2.Date);

Кстати, обычно даты заключаются в специальные символы типа решеток, апострофов и т.п. Например:

if CheckBox1.Checked then ADOTable1.Filter:=
  'Date > #' + DateToStr(DateTimePicker1.Date) +
  '# AND Date < #' + DateToStr(DateTimePicker2.Date) + '#';

Также более "красиво" использовать оператор BETWEEN (надеюсь, он поддерживается в фильтрах):

if CheckBox1.Checked then ADOTable1.Filter:=
  'Date BETWEEN #' + DateToStr(DateTimePicker1.Date) +
  '# AND #' + DateToStr(DateTimePicker2.Date) + '#';

Ответ отправил: Косолапов Дмитрий Юрьевич (статус: 8-ой класс)
Время отправки: 20 сентября 2009, 10:29

Ответ #2. Отвечает эксперт: Егор

Здравствуйте, demyan!
При выдаче ошибки в дельфи не надо сразу закрывать окно, нужно нажать Ctrl+C, тогда сообщение об ошибке скопируется в буфер обмена. Это сообщение потом можно будет дать яндексу с дополнительными словами, типа "ошибка", "почему не работает" и т.п. - будет много нужных ссылок.
Ввёл в яндекс "что за ошибка почему FilterOptions are not supported" - поход по первой же ссылке выдал:

"FilterOptions в ADO не поддерживается, о чем и говорит сообщение об ошибке. А оператор like можно использовать и на клиенте в свойстве Filter"

взято с delphikingdom (http://www.delphikingdom.com/asp/answer.asp?IDAnswer=61921).
Не поддерживается это свойство и для TADOQuery.

Т.е. строчку

ADOTable1.FilterOptions:= [foCaseInsensitive];
нужно из проекта убрать.

Ну и то, что написал Косолапов Дмитрий Юрьевич, тоже верно.

Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 20 сентября 2009, 19:22


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 21 сентября 2009, 19:54; участников в обсуждении: 1.

19 сентября 2009, 23:22: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Программирование баз данных (БД) модератором Ерёмин А.А.

Егор

Егор (статус: 10-ый класс), 21 сентября 2009, 19:54 [#1]:

На будущее - нужно обязательно в вопросе указывать, что за ошибка. Мы не телепаты и можем посоветовать совсем не то решение, не от той проблемы.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:15
Выполнено за 0.03 сек.