Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.05.03;
Скачать: CL | DM;

Вниз

Поиск по дате в БД Access   Найти похожие ветки 

 
Lutdan ©   (2011-04-28 00:28) [0]

Возникла проблема: Мне нужно, чтоб при изменении даты фильтровались данные в 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 и там написать проверку на правильный ввод даты (но как это сделать*?), но хотелось бы именно фильтровать по мере ввода пользователем даты.


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


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

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


 
Sergey13 ©   (2011-04-28 10:58) [2]

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

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

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

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


 
OW ©   (2011-04-28 12:46) [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]


 
Anatoly Podgoretsky ©   (2011-04-28 14:20) [4]

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

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


 
OW ©   (2011-04-28 15:23) [5]


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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2015.05.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.003 c
15-1410689079
Вячеслав
2014-09-14 14:04
2015.05.03
Инструментарий для распределенной работы над проектом


15-1410726603
Юрий
2014-09-15 00:30
2015.05.03
С днем рождения ! 15 сентября 2014 понедельник


15-1411293130
Rouse_
2014-09-21 13:52
2015.05.03
Ole DradDrop


2-1391965921
Вова
2014-02-09 21:12
2015.05.03
Нужен алгоритм


15-1409584351
Ламот
2014-09-01 19:12
2015.05.03
OpenWRT (Ralink RT5350F) и работа с wireless