Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.28;
Скачать: CL | DM;

Вниз

Фильтрация   Найти похожие ветки 

 
Miss ©   (2002-11-10 08:23) [0]

Пусть имеется поле типа DateTime, через TTable необходимо отфильтровать только по году


 
iNew   (2002-11-10 08:26) [1]

Table1.SetRange


 
Miss ©   (2002-11-10 08:39) [2]

Это понятно, и др. методы имеются... Но вопрос в другом-
запись в поле имеет вид 10.10.1980 образец поиска 1980


 
Vladislav ©   (2002-11-10 09:18) [3]

попробуй сделать фильтр Field >= 1.01.1980 and Field <= 31.12.1980


 
Miss ©   (2002-11-10 13:32) [4]

Есть ли еще варианты?


 
Anatoly Podgoretsky ©   (2002-11-10 13:44) [5]

Чем эти плохи, вариант с SetRange работает быстрее, чем фильтр, но требует активного индекса по полю. Фильтру же индексы не требуются.
Если образец "поиска" (смущает это понятие в применении к фильтру), то построение фильтра оченб простое, с учетом, что локализация совпадает, то

Table.Filter := "Field>="+QuotedStr("1.01." + StrToInt(Year)) + " and Field<="+QuotedStr("31.12." + StrToInt(Year));


 
MsGuns ©   (2002-11-10 14:00) [6]

Событие OnFiltered


 
Miss ©   (2002-11-10 15:43) [7]

Дело не в выборе SetRange или OnFiltered.
Здесь под образцом поиска имеется в виду то что пользователь ввел, например, в Edit. Хотя конечно сказать "образец поиска" будет не совсем верно, но что ж сори за некорректную формулировку.
Да, при компоновке даты из строки компилятор ругается -"1.01.1968" не дата. Если разделитель / тоже самое происходит.
Вот и возник вопрос может это можно проще реализовать.


 
Anatoly Podgoretsky ©   (2002-11-10 15:55) [8]

Ну так привели как ты Edit превращаешь в фильтр


 
Miss ©   (2002-11-10 16:11) [9]

>Anatoly Podgoretsky ©
Подробнее о QuotedStr можно?


 
Anatoly Podgoretsky ©   (2002-11-10 16:14) [10]

Оно правильно раставляет кавычки, лучше это использовать, чек конструкции типа """+IntToStr()+"""


 
Miss ©   (2002-11-10 16:19) [11]

>Anatoly Podgoretsky © (10.11.02 15:55)
>Ну так привели как ты Edit превращаешь в фильтр
В этом то и проблема



 
Anatoly Podgoretsky ©   (2002-11-10 16:29) [12]

Тогда с маленикими модификациями то что я привел выше
Table.Filter := "Field>=" + QuotedStr("1.01." + Edit1.Text) + " and Field<="+QuotedStr("31.12." + Edit1.Text);


 
Miss ©   (2002-11-10 16:33) [13]

>Anatoly Podgoretsky © (10.11.02 15:55)
>Ну так привели как ты Edit превращаешь в фильтр
StrToDate("1.01."+ed.Text)


 
Anatoly Podgoretsky ©   (2002-11-10 16:34) [14]

.Filter имеет тип строковый, не надо превращать в дату


 
Miss ©   (2002-11-10 16:59) [15]

Так не фильтр превращаю в дату. Поле имеет тип дата, поэтому Edit надо превратить в дату, дату ведь можно сравнить лишь с датой.


 
Anatoly Podgoretsky ©   (2002-11-10 17:05) [16]

Не надо, выражения фильтра это строка


 
Miss ©   (2002-11-10 17:10) [17]

Например
DM.tMain.Filter:="DATR>="+StrToDate("1.01."+ed.Text)";
Поле DATR типа ДАТА


 
Anatoly Podgoretsky ©   (2002-11-10 17:28) [18]

Ну сколько можно говорить, не надо преобразовывать в TDate - выражение фильтра СТРОКОВОГО типа. Я же привел в Anatoly Podgoretsky © (10.11.02 16:29) точный синтаксис для построения фильтра по году.


 
Miss ©   (2002-11-10 17:30) [19]

>Anatoly Podgoretsky © (10.11.02 16:29)
>Тогда с маленикими модификациями то что я привел выше
>Table.Filter := "Field>=" + QuotedStr("1.01." + Edit1.Text) + " >and Field<="+QuotedStr("31.12." + Edit1.Text);

Спасибо, с моими маленькими модификациями это работает!!:)))


 
Anatoly Podgoretsky ©   (2002-11-10 17:50) [20]

" > and Field<=" это не должно работать


 
Miss ©   (2002-11-11 06:32) [21]

Я же сказала исправить пиршлось:))


 
Miss ©   (2002-11-11 06:32) [22]

Я же сказала исправить пришлось:))


 
Miss ©   (2002-11-11 07:13) [23]

Пусть имеется поле типа DateTime, через TTable необходимо НАЙТИ только по году



 
iNew   (2002-11-11 07:41) [24]

Table1.IndexName:="indexfield";
Table1.SetRange([StrToDate(01.01.98)],[StrToDate(31.12.98)]);


 
pasha676   (2002-11-11 08:58) [25]

2Miss
А почему бы не перейти на SQL. Это поудобней будет и поуниверсальней.


 
Miss ©   (2002-11-11 09:20) [26]


> 2Miss
> А почему бы не перейти на SQL. Это поудобней будет и поуниверсальней.

А зачем это для локальной базы?


 
А_2   (2002-11-11 09:57) [27]

Вы спорите , даже не понимаете о чем !!!
Все работает от

DataModule1.Table3.SetKey;
DataModule1.Table3.FieldByName("FAM").AsString := Edit1.Text;
DataModule1.Table3.GotoNearest;
Просто пример. Вместо «FAM» любой тип данных может быть.


 
Miss ©   (2002-11-11 10:15) [28]


> iNew (11.11.02 07:41)
> Table1.IndexName:="indexfield";
> Table1.SetRange([StrToDate(01.01.98)],[StrToDate(31.12.98)]);

Это все конечно работает, но это фильтрация а нужен поиск.


 
Miss ©   (2002-11-11 10:41) [29]


> А_2 (11.11.02 09:57)
> Вы спорите , даже не понимаете о чем !!!
> Все работает от
>
> DataModule1.Table3.SetKey;
> DataModule1.Table3.FieldByName("FAM").AsString := Edit1.Text;
> DataModule1.Table3.GotoNearest;
> Просто пример. Вместо «FAM» любой тип данных может быть.

Можно уточнить, зачем в поле присваивать значение Edit"а


 
Miss ©   (2002-11-11 11:09) [30]


> Можно уточнить, зачем в поле присваивать значение Edit"а
>

Беру свои слова обратно:))



Страницы: 1 вся ветка

Текущий архив: 2002.11.28;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.014 c
1-93121
Cker
2002-11-18 00:41
2002.11.28
Отображение Unicode в разных компонентах...


4-93305
borg
2002-10-18 14:37
2002.11.28
Передать данные


1-93063
Driverrr
2002-11-16 11:10
2002.11.28
Файлы и папки...


14-93201
Sirus
2002-11-09 14:32
2002.11.28
Почему компоненты отображаются криво???


14-93202
Куртка
2002-11-10 00:07
2002.11.28
Юрию Федорову