| 
| 
 | Вопрос # 2 918/ вопрос открыт / | 
 |  Здравствуйте!Делаю в Delphi БД. Библиотека доступа - BDE. Таблица - DBGrid...
 Хочу сделать фильтр:
 В форме есть MaskEdit. В таблице среди столбцов есть столбец "Дата".
 Как сделать так, чтобы после ввода даты в MaskEdit в таблице отобразились записи с такой же датой, как и в MaskEdit?
 
|  |   Вопрос задал: EzDuk (статус: Посетитель)Вопрос отправлен: 16 июня 2009, 04:29
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 13; последнее сообщение — 18 июня 2009, 18:18; участников в обсуждении: 2. 
|   | Мережников Андрей (статус: Абитуриент), 16 июня 2009, 20:21 [#1]:1. какой формат у поля "Дата"? 2. Для ввода даты лучше использовать TDateTimePicker а не  MaskEdit
 3. с чем связан выбор BDE - это устаревшая технология?
 |  
|   | EzDuk (статус: Посетитель), 16 июня 2009, 20:32 [#2]:1. Если имеется в виду свойство FieldKind, то fkData 2. Хорошо, буду знать. (тогда как с помощью TDateTimePicker сделать фишку такую?)
 3. Я студент. Просто мне дали такое задание.
 |  
|   | Мережников Андрей (статус: Абитуриент), 16 июня 2009, 21:28 [#3]:можно использовать событие OnFilterRecord для компонента TTable, который связан с DBGrid для отображения. Вводите в модуле переменную типа TDateTime (например fltDate).
 В событии OnFilterRecord пишете Accept:=(<поле дата>.value=fltDate);
 В событии OnChange для компонента TDateTimePicker (хотя лучше это делать на отдельную кнопку, которую можно назвать "Установить фильтр") пишите:
 Table1.filtered:=false;
 fltDate:=DateTimePicker1.date;
 Table1.filtered:=true;
 |  
|   | EzDuk (статус: Посетитель), 16 июня 2009, 21:46 [#4]:"Вводите в модуле переменную типа TDateTime (например fltDate)" Можно пояснить дословно, как это делается?
 |  
|   | Мережников Андрей (статус: Абитуриент), 17 июня 2009, 05:32 [#5]:Как пишите программу не зная как объявляются переменные??? С этого начинается любая книга по программированию.
 Можно сделать, например, так:
 В объявлении модуля в секции public добавляете строку:
 fltDate:TDateTime;
 |  
|   | EzDuk (статус: Посетитель), 17 июня 2009, 08:57 [#6]:ну вот так вот получается(( Вот всё сделал. Только в событии OnFilterRecord в строке
 Accept:=(Table1stringfield.value=fltDate);
 Ошибка incopatible types:'String' and 'TDateTime'.
 Извините, что сам исправить не могу... у меня просто знаний не хватает...
 |  
|   | Мережников Андрей (статус: Абитуриент), 17 июня 2009, 16:47 [#7]:сообщение о том, что несовпадение типов переменных. Что за поле такое Table1stringfield??? Как называется поле в таблице, в котором хранится дата? |  
|   | EzDuk (статус: Посетитель), 17 июня 2009, 16:58 [#8]:Такое имя поля. Это имя я нашёл здесь: Двойным щелчком левой кнопки мыши нажал на Table1, открылось окошко маленькое с названиями столбцов таблицы. Там я выбрал название ДАТА. И в ObjectInspector посмотрел на свойство Name. Там и было написано... или в другом месте смотреть надо?
 |  
|   | Мережников Андрей (статус: Абитуриент), 17 июня 2009, 18:14 [#9]:никогда не называйте поля в таблицах какой-бы то ни было базы данных русскими буквами. Используйте только латинские буквы. Если еще не поздно, то переименуйте все поля. Проверьте еще раз тип поля - судя по тому, что Вы написали - поле Дата у Вас типа string, а не типа ftDateTime. Для того, чтобы проверить тип поля В списке FieldDefs для Table1 выберите соответствующее поле и посмотрите значение свойства DataType.
 У Вас книга какая-нибудь по Delphi есть под руками?
 |  
|   | EzDuk (статус: Посетитель), 17 июня 2009, 22:06 [#10]:книги 3 штуки, но необходимой информации не нашёл. Всё, разобрался с типами данных.... Запускаю программу. Добавляю записи. Выбираю в TDateTimePicker необходимую дату и после этого все записи в таблице пропадают, да же, дата которых совпадает с выбранной датой. как быть?
 |  
|   | Мережников Андрей (статус: Абитуриент), 18 июня 2009, 05:09 [#11]:проверьте в TDateTimePicker свойство Time. Надо установить его в 0. |  
|   | Мережников Андрей (статус: Абитуриент), 18 июня 2009, 05:12 [#12]:или подключите (пропишите в строке uses) модуль DateUtils и используйте функцию DateOf. fltDate:=DateOf(DateTimePicker1.date);
 |  
|   | EzDuk (статус: Посетитель), 18 июня 2009, 18:18 [#13]:Спасибо вам) во всём я разобрался. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |