|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Table.Filter и TDateTime. Есть ли возможность фильтрануть записи по месяцу?
Суть вопроса: Есть локальная база, пользователь один, комп один (т.е. возможностей BDE достаточно). Поля базы (формат Парадокс 7) все, кроме двух Alpha, а эти два поля TimeStamp. Можно ли через свойство Filter компонента Table сделать так, чтобы фильтровались любые записи по этим полям за определенный месяц (допустим январь). Пробовал по моему все (вычисляемые поля не работают, а фильтр типа '.01.*' выдает что символ "." недопустим в описании фильтра). PLZ Help. Очень не хочется переводить Даты в Стринг, лишней писанины много. Я пока по книге лабаю. Поэтому простите за возможно глупый вопрос. Ответы соответственно желательно поподробнее.
Система: ХР SP2, Delphi 7 Enterprize формат TDateTime - dd.mm.yyyy P.S.: Если перевести поля из Date в String, то все работает, уже пробовал. Хотелось бы иметь возможность фильтровать по Date..... |
#2
|
|||
|
|||
Неа, ИМХО. Юзай ClientDataSet вместо TTable - оно удобнее...
|
#3
|
|||
|
|||
Получилось!
Открыл базу в Access, клонировал поле с датами, сохранил. Открыл в Database Desktop, переделал тип поля-клона в Альфа, сохранил. При сохранении Дат в Альфа, получились строки в формате ShortDate (USA) ("Ну, тупые.." М.Задорнов), т.е. m/d/yy. В приложении, св-во Visible этого поля ставлю в false. И все. Фильтрация уже дело вкуса. Я лично запердолил ComboBox со списком месяцев + "все" сверху. И в обработчик OnChange вставил: Цитата:
Спасибо всем кто ответил. |
#4
|
|||
|
|||
Самый эффективный способ фильтра - использование обработчика события OnFilterRecord. Включается, когда свойству Filtered присваивается значение True и обрабатывает каждую запись. В зависимости от параметра Accept типа Boolean запись либо будет показываться, либо нет.
|
#5
|
|||
|
|||
Пользуйтесь функцией trunc,
в данном примере мы проверяем, насколько старо значение в поле POSL_DATA (некая последняя дата). Код:
if trunc(Date)-trunc(Form1.Table1.FieldByName('POSL_DATA').AsDateTime)) > 120 // если дата больше 120 дней, то ... then .. end; Код рабочий. |
#6
|
|||
|
|||
Цитата:
если уж ты начал работу с БД то учи SQL без него всё равно не обойтись... а на счёт фильтрации по дате, так можно сделать вот так.. кидаешь на форму TQuery и пишешь на батоне следующий код Код:
DateStart := StrToDate('01.01.2007'); DateEnd := StrToDate('31.01.2007'); with data.Query1 do begin Close; SQL.Clear; SQL.Add('SELECT * FROM Name_Table WHERE NewDate BETWEEN :D1 and :D2'); SQL.Add('ORDER BY Name'); ParamByName('d1').AsDate := DateStart; ParamByName('d2').AsDate := DateEnd; ExecSQL; Active := True; end; всё очень просто и легко... |