-
Lutdan © (28.04.11 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 и там написать проверку на правильный ввод даты (но как это сделать*?), но хотелось бы именно фильтровать по мере ввода пользователем даты. -
Германн © (28.04.11 04:18) [1]
> В Таблице Access дата записана в виде: 03.04.2011.
Тебе уже давно АП на "исходниках" сказал, что в БД дата записана в виде действительного числа, а не строки. До сих пор не понятно?
И забудь про свойства Filter и Filtered равно как и о компонентах T(xxx)Table. -
> [0] Lutdan © (28.04.11 00:28)
Используй для даты специализированные контролы, типа DateEdit - там сложнее ввести не то. Или сам контролируй после ввода.
Но сначала конечно см
> [1] Германн © (28.04.11 04:18)
это первично. -
OW © (28.04.11 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 © (28.04.11 14:20) [4]> OW (28.04.2011 12:46:03) [3]
Но ведь это нормально, неполный ввод даты, соответствует справки
Ввод не полный, а дата полная -
OW © (28.04.11 15:23) [5]
> Anatoly Podgoretsky © (28.04.11 14:20) [4]
согласен.
Коль дата суть число, то как только что-то введено, интерпретация уже пошла, какая-то дата уже есть.
Однако, тут ситуация сродни той, что как если бы мы заставляли вводить пользователя "православные" десятичные числа побитно. т.е. ты уж, юзер, изволь точно писать, как в компьютере они хранятся,"0101..", а не "5", или 9.
т.е. дискретность ввода некая должна быть.
Таковую обеспечивает присвоение, например, edtAny.dat := 44404;
или программист.