Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.51 MB
Время: 0.012 c
1-93061
Ag2002
2002-11-15 19:17
2002.11.28
Удаление файла


3-92875
BJValentine
2002-11-08 17:42
2002.11.28
Как достать список серверов в MS SQL?


1-93070
ЮРИЙ_К
2002-11-16 10:30
2002.11.28
Назойливый Warning компилятора


1-93078
smok_er
2002-11-16 11:19
2002.11.28
Fast Report: лишние пустые страницы


3-92849
Zeeke
2002-11-09 01:37
2002.11.28
Помогите!




   Наверх