Конференция "Базы" » Поиск по дате в БД Access [D7, Access]
 
  • 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.
  • Sergey13 © (28.04.11 10:58) [2]
    > [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;
    или программист.
 
Конференция "Базы" » Поиск по дате в БД Access [D7, Access]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]