Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2007, 20:32   #1
Elm0
ObjectPascal,CISCO
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 294
По умолчанию Фильтрация по динамич.перемен.

Дана таблица в которой есть поля отображ-е время(точнее год)
Пример:Текущий год, прошедший, год завершения.
Нужно фильтровать по вышеуказанным данным.То есть нужно получить текущую дату сравнить ее с той которую надо отбирать..

Очень признателен за помощь!!!Да хранит Вас Господь!!!
Elm0 вне форума Ответить с цитированием
Старый 16.12.2007, 21:42   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вы не могли бы членораздельно выразить свою мысль?
Цитата:
Дана таблица в которой есть поля отображ-е время(точнее год)
У вас год запоминается в поле какого типа? Time? Date? Char? Varchar?
Цитата:
Пример:Текущий год, прошедший, год завершения.
У вас в таблице запоминаются текущий и прошедший год???
Бред какой-то...
Цитата:
нужно получить текущую дату сравнить ее с той которую надо отбирать..
При чем тут дата, когда у вас запоминается только год?
Текущая дата в Дельфи определяется просто - Now... или Date...
Разберитесь в своих мыслях и задайте корректный вопрос, ибо ваша формулировка предполагает длительное гадание...
mihali4 вне форума Ответить с цитированием
Старый 16.12.2007, 22:47   #3
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию

Мой способ получения текущей даты:

Код:
var mm:tsystemtime; nn:tdate;

datetimetosystemtime(now,mm);
nn:=encodedate(mm.wYear,mm.wMonth,mm.wDay);
//dtp - DateTimePicker
dtp.Date:=nn;
Если нужно сравнить год, обращаемся к wYear и далее делаем что нам нужно.
Cyn4uk вне форума Ответить с цитированием
Старый 17.12.2007, 19:23   #4
Elm0
ObjectPascal,CISCO
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 294
По умолчанию

mihali4, извините пожалуйста, виноват, просто очень спешил=)

Попробуем так, в таблице есть колонка типа String, которая хранит дату(в чч.мм.гггг формате)(только не смейтесь над типом!!!=)).
Нужно, путем сравнения с текущей датой, отфильтровать данные в таблице таким образом- "в этот год","прошедшие года","след.год" тобишь -
case CurrentDate of
TableDate(Даты из таблицы)=CurrentDate:Фильтр
И т.д.....

Спасибо!!!
Elm0 вне форума Ответить с цитированием
Старый 17.12.2007, 20:50   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Смешного ничего нет - значит, вам так удобнее.
Пусть ваше поле с датой зовут Event_Date.
Тогда:
Код:
var d,m,y: Word;
begin
DecodeDate(Now,y,m,d);
//фильтруем за текущий год
Table1.Filter:='Event_Date>=01.01.'+IntToStr(y)+' and Event_Date<=31.12.'+IntToStr(y);
//фильтруем за предыдущие года
Table1.Filter:='Event_Date<01.01.'+IntToStr(y);
//фильтруем за последующие года
Table1.Filter:='Event_Date>31.12.'+IntToStr(y);
Все это - в предположении, что под "текущей датой" вы имеете в виду именно ее, т.е. сегодняшнюю дату. Ибо мало ли что...
mihali4 вне форума Ответить с цитированием
Старый 18.12.2007, 17:39   #6
Elm0
ObjectPascal,CISCO
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 294
По умолчанию

Спасибо большое, именно то, что нужно!
Elm0 вне форума Ответить с цитированием
Старый 25.12.2007, 11:13   #7
Elm0
ObjectPascal,CISCO
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 294
По умолчанию

Попробовал Ваш способ...Но данные фильтруются неправильно=(в системе формат даты зарегестрирован, как чч.мм.гггг....

Возник такой вопрос по коду. DecodeDate возвращает данные в формате чч.мм.гггг, но типа стринг (или я не прав?)По идее мне совершенно не нужны число и месяц. Нельзя ли вести сравнение только по году?
Elm0 вне форума Ответить с цитированием
Старый 25.12.2007, 15:47   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Elm0 Посмотреть сообщение
Попробовал Ваш способ...Но данные фильтруются неправильно=(в системе формат даты зарегестрирован, как чч.мм.гггг....

Возник такой вопрос по коду. DecodeDate возвращает данные в формате чч.мм.гггг, но типа стринг (или я не прав?)По идее мне совершенно не нужны число и месяц. Нельзя ли вести сравнение только по году?
Так...
Цитата:
в таблице есть колонка типа String, которая хранит дату(в чч.мм.гггг формате)
Ваши слова? Так я вам и предложил сравнивать две стринговые переменные... В одном и том же формате, между прочим...
Цитата:
DecodeDate возвращает данные в формате чч.мм.гггг
DecodeDate возвращает три ЧИСЛА типа WORD. Посмотрите внимательнее:
var d,m,y: Word;
Из них я использую только значение года - Y.
Что там может неправильно фильтроваться???
mihali4 вне форума Ответить с цитированием
Старый 30.12.2007, 10:49   #9
Elm0
ObjectPascal,CISCO
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 294
По умолчанию

Извинте Михалыч Очень не внимателен...отсюда вся беда...

Спасибо за помощь!!!
Elm0 вне форума Ответить с цитированием
Старый 30.12.2007, 15:04   #10
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

как вариант ,можно запросом делать. Фильтрі медленнее работают, на сколько я знаю....

Данній запрос відаст все данніе, которіе находятся в заданном диапазоне...

DataModule1.ReportQuery .Active :=False;
DataModule1.ReportQuery.SQL.Clear;
DataModule1.ReportQuery.SQL.add('se lect *');
DataModule1.ReportQuery.sql.add('fr om таблица');
DataModule1.ReportQuery.SQL.Add('wh ere Поле_даті BETWEEN t and tt;');
dataModule1.ReportQuery.Params[0].Value := 'yyyy.mm.dd'; // тут можешь использовать FormatDateTime
dataModule1.ReportQuery.Params[1].Value :='yyyy.mm.dd';
DataModule1.ReportQuery.ExecSQl ;

Задаешь диапазоні с 1.01.пердидущего по 31.12.предидущего..... все также для нінещнего и будущего...
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp

Последний раз редактировалось Pitbull; 30.12.2007 в 15:08.
Pitbull вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
паскаль динамич. списки...помогите кто чем может) Никита35 Помощь студентам 16 09.05.2008 16:41
Срочно,пожалуйста...паскаль динамич. списки Никита35 Помощь студентам 2 07.05.2008 22:48
Паскаль. Динамич массивы ProPaL Помощь студентам 6 25.03.2008 09:43
определение длины динамич. массива Романнн Общие вопросы Delphi 3 11.03.2008 18:48
Число перемен знака в массиве. Количество слов в тексте. Pascal. Cartman18 Помощь студентам 1 10.12.2007 12:58