|
Вопрос # 3 209/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Пытался сделать простой фильтр таблицы, выскочила ошибка, почему ведь все как в книге. Чего нет в книге.
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим- procedure TForm1.FormCreate(Sender: TObject);
- begin
- ADOTable1.Filter:= '';
- ADOTable1.FilterOptions:= [foCaseInsensitive];
- ADOTable1.Filtered:= false;
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- ADOTable1.Filtered:= true;
- if CheckBox1.Checked then ADOTable1.Filter:=
- 'Date> ' + DateToStr(DateTimePicker1.Date) +
- 'AND Date< ' + DateToStr(DateTimePicker2.Date);
- if CheckBox1.Checked then ADOTable1.Filter:= '';
- end;
 |
Вопрос задал: 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) + '#';
Ответ #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.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|