Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск по дате в БД Access [D7, Access]


Lutdan ©   (2011-04-28 00:28:00) 

Возникла проблема: Мне нужно, чтоб при изменении даты фильтровались данные в DBGrid. Реализовал так:

procedure TForm1.sDateEdit1Change(Sender: TObject);
begin
if not (DateToStr(sDateEdit1.Date) = '') then
begin
DataModule4.ADDArhuv1.Filter := 'Paz_Data_Vudachi =''' + datetostr(form1.sDateEdit1.date)+'''';
DataModule4.ADDArhuv1.Filtered := True;

Всё работает, когда я выбираю дату, а вот когда прописываю её (например, не до конца ввёл день 2_.__.____) фильтруется только первая строка в ADOTable, но при вводе полной даты (23.04.2011) всё фильтрует правильно.
Так вот вопрос: Как можно сделать так, что бы фильтровались данные только после полного ввода даты.Пробовал MaskEdit, но там такая же проблема, если не до конца вводить дату.

Ещё вопроc посложнее: Мне нужно как - то отфильтровать данные скажем с Января по Апрель. В Таблице Access дата записана в виде: 03.04.2011. Как вытянуть 04 месяц? Как сделать фильтр скажем 01 по 04 месяц и отобразить данные?

Добавлено 25.04.11, 02:38
Можно конечно сделать через Button и там написать проверку на правильный ввод даты (но как это сделать*?), но хотелось бы именно фильтровать по мере ввода пользователем даты.


OW   (2011-04-28 15:23:00) [1]


> Anatoly Podgoretsky ©   (28.04.11 14:20) [4]

согласен.
Коль дата суть число, то как только что-то введено, интерпретация уже пошла, какая-то дата уже есть.

Однако, тут ситуация сродни той, что как если бы мы заставляли вводить пользователя "православные" десятичные числа побитно. т.е. ты уж, юзер, изволь точно писать, как в компьютере они хранятся,"0101..", а не "5", или 9.

т.е. дискретность ввода некая должна быть.
Таковую обеспечивает присвоение, например, edtAny.dat := 44404;
или программист.


Anatoly Podgoretsky   (2011-04-28 14:20:00) [2]

> OW  (28.04.2011 12:46:03)  [3]

Но ведь это нормально, неполный ввод даты, соответствует справки
Ввод не полный, а дата полная


OW   (2011-04-28 12:46:00) [3]


> Как можно сделать так, что бы фильтровались данные только
> после полного ввода даты

не включать фильтрование при неполном вводе
для этого проверять, например, длину введенного значения
procedure TForm1.sDateEdit1Change(Sender: TObject);
begin
if not (DateToStr(sDateEdit1.Date) = '') then
begin
if (form1.sDateEdit1.СООТВСВОЙСТВО заполнено полностью)
then begin
DataModule4.ADDArhuv1.Filter := 'Paz_Data_Vudachi =''' + datetostr(form1.sDateEdit1.date)+'''';
..
end;

Но сначала конечно см
Sergey13 ©   (28.04.11 10:58) [2]


Sergey13   (2011-04-28 10:58:00) [4]

> [0] Lutdan ©   (28.04.11 00:28)

Используй для даты специализированные контролы, типа DateEdit - там сложнее ввести не то. Или сам контролируй после ввода.
Но сначала конечно см

> [1] Германн ©   (28.04.11 04:18)

это первично.


Германн   (2011-04-28 04:18:00) [5]


> В Таблице Access дата записана в виде: 03.04.2011.

Тебе уже давно АП на "исходниках" сказал, что в БД дата записана в виде действительного числа, а не строки. До сих пор не понятно?
И забудь про свойства Filter и Filtered равно как и о компонентах T(xxx)Table.


Наверх

Титульная страница Поиск, карта сайта Написать письмо