| 
| 
 | Вопрос # 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.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |