Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.01.2007, 19:06
bormental bormental вне форума
Прохожий
 
Регистрация: 07.01.2007
Сообщения: 3
Репутация: 10
По умолчанию 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  
Старый 12.01.2007, 17:56
YCH.Del YCH.Del вне форума
Прохожий
 
Регистрация: 07.12.2006
Сообщения: 22
Репутация: 10
По умолчанию

Неа, ИМХО. Юзай ClientDataSet вместо TTable - оно удобнее...
Ответить с цитированием
  #3  
Старый 13.01.2007, 09:18
bormental bormental вне форума
Прохожий
 
Регистрация: 07.01.2007
Сообщения: 3
Репутация: 10
Радость

Получилось!
Открыл базу в Access, клонировал поле с датами, сохранил. Открыл в Database Desktop, переделал тип поля-клона в Альфа, сохранил. При сохранении Дат в Альфа, получились строки в формате ShortDate (USA) ("Ну, тупые.." М.Задорнов), т.е. m/d/yy. В приложении, св-во Visible этого поля ставлю в false. И все. Фильтрация уже дело вкуса. Я лично запердолил ComboBox со списком месяцев + "все" сверху. И в обработчик OnChange
вставил:
Цитата:
table.Filtered:=false;
if combo1.ItemIndex<>0 then
begin
table.Filter:='(<имя поля> = ' + quotedstr(inttostr(combo1.ItemIndex+'/*')
+ ')';
table.Filtered:=true;
end;
"Замечательно выходит.." (Винни Пух и все, все, все)

Спасибо всем кто ответил.
Ответить с цитированием
  #4  
Старый 20.01.2007, 14:29
ilang ilang вне форума
Новичок
 
Регистрация: 11.12.2006
Сообщения: 68
Репутация: 10
По умолчанию

Самый эффективный способ фильтра - использование обработчика события OnFilterRecord. Включается, когда свойству Filtered присваивается значение True и обрабатывает каждую запись. В зависимости от параметра Accept типа Boolean запись либо будет показываться, либо нет.
Ответить с цитированием
  #5  
Старый 07.02.2007, 15:59
Evgeny Evgeny вне форума
Прохожий
 
Регистрация: 10.09.2006
Сообщения: 3
Репутация: 10
Хорошо

Пользуйтесь функцией trunc,
в данном примере мы проверяем, насколько старо значение в поле POSL_DATA (некая последняя дата).


Код:
if  trunc(Date)-trunc(Form1.Table1.FieldByName('POSL_DATA').AsDateTime)) > 120  // если дата больше 120 дней, то ...
  then
  ..
end;

Код рабочий.
Ответить с цитированием
  #6  
Старый 08.02.2007, 14:10
dron-s dron-s вне форума
Прохожий
 
Регистрация: 08.02.2007
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Можно ли через свойство Filter компонента Table сделать так, чтобы фильтровались любые записи по этим полям за определенный месяц (допустим январь).
через TTable вообще не советую...
если уж ты начал работу с БД то учи 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;
вот и всё...
всё очень просто и легко...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:40.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter