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