Форум: "Базы";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];
ВнизФильтрация Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.012 c