-
вот в делфи ставиш фильтр и генерится вот такая строка
почему не работает интересно?
date>='08.05.2009 9:19:19' and date<='08.05.2009 9:19:19' and (1=0 or nalichka=1 or nalichka=4)
-
фильтр не исполняется и не является sql запросом к субд
-
> вот в делфи ставиш фильтр
Ты про какой "фильтр" ? В делфи их всякоразных как грязи)..
-
date>='08.05.2009 9:19:19' and date<='08.05.2009 9:19:19' например вот эта строка работает
и работает если date>='08.05.2009 9:19:19' and date<='08.05.2009 9:19:19' and nalichka=1
а ту которую написал выше
не работает почему та
-
про фильтр который в ADOQuery
-
Что значит не работает ?
ПРямо вот так и говорит "не работаю" ?
-
> про фильтр который в ADOQuery
Ты про св-во Filter что ли ?
Так оно само по себе ничего не "генерит" - какую строку ты сам указал в свойстве, та строка и будет содержимым WHERE-статьи
-
значит выдает ошибку
аргументы имеют неверный тип, выходят за пределы допустимого диапозона или вступают в конфликт друг с другом
-
А кем собссно "генерится вот такая строка", если не тобой самим ?
-
DateTimePicker1_1.Time := DateTimePicker1_3.Time;
DateTimePicker1_2.Time := DateTimePicker1_4.Time;
date1Str := DateTimeToStr(DateTimePicker1_1.DateTime);
date2Str := DateTimeToStr(DateTimePicker1_2.DateTime);
Filter :='date>='''+date1Str+''' and date<='''+date2Str+'''';
if (CheckBox1_1.checked or CheckBox1_2.checked or CheckBox1_3.checked or CheckBox1_4.checked) then
begin
filter := filter + ' and (';
if CheckBox1_1.checked then
filter := filter +' or (nalichka=1)' ;
if CheckBox1_2.Checked then
filter := filter + ' or (nalichka=4)' ;
if CheckBox1_3.Checked then
filter := filter + 'or (nalichka=2)';
if CheckBox1_4.Checked then
filter:= filter + ' or (nalichka=3)';
filter := filter + ')';
end;
ADOQuery1.Filter := filter;
edit18.text:= ADOQuery1.Filter;
//ShowMessage(ADOQuery1.Filter);
ADOQuery1.Filtered:=true;
-
ой тут уже переделал
раньше другое было
ну думаю сами поймете что было в коде где условия стоят
-
Так тобой же самим и генерится строка фильтра ! Что ж ты лапшу вешаешь ?)
А поле "nalichka" у тебя какого типа ?
-
почему не работает интересно?
date>='08.05.2009 9:19:19' and date<='08.05.2009 9:19:19' and (1=0 or nalichka=1 or nalichka=4)
потому что нет записей удовлетворяющих условию. либо все удовлетворяют условию.
в зависимости от того что ты вложил в понятие "не работает"
-
> раньше другое было
> ну думаю сами поймете что было
Да-да .. делать нам больше нечего, как в только догадалки с тобой играть) ..
-
filter := filter + ' and (1=0';
if CheckBox1_1.checked then
filter := filter +' or nalichka=1' ;
if CheckBox1_2.Checked then
filter := filter + ' or nalichka=4' ;
if CheckBox1_3.Checked then
filter := filter + 'or nalichka=2';
if CheckBox1_4.Checked then
filter:= filter + ' or nalichka=3';
filter := filter + ')';
вот такой текст был в условии!
не работает ето значит выдает ошибку которую я написал выше....
-
> Медвежонок Пятачок © (15.05.09 14:23) [12]
Он утверждает, что отлуп получен не по причине пустого результирующего НД - до его формирования просто дело не доходит.
При этом он утверждает, что Access хавает строку вида date>='08.05.2009 9:19:19' и не давится. Это, afaik, м.б. только если дата у него хранится в строковом виде.
-
> Ponchic © (15.05.09 14:26) [14]
Ты с программой MS Access вообще знаком ?
-
дата хранится в формате дата и время
Наличка это цифровой формат
-
квери + филтер это же локальная фильтрация на клиенте
ttable + филтер - серверная (если сервер есть)
-
да просто тупо нет записей со значением 08.05.2009 9:19:19
-
> квери + филтер это же локальная фильтрация на клиенте
С чего бы вдруг ?
И тейбл и квери - оба наследники АДОДейтаСета, который как раз и объявляет св-во Фильтр ..
> тупо нет записей со значением 08.05.2009 9:19:19
Он утверждает иное:
> date>='08.05.2009 9:19:19' and date<='08.05.2009 9:19:19'
> например вот эта строка работает
-
а дописываеш дальше строку and (nalichka=1) кажется работала уже не помню точно
а вот and(nalichka=1 or nalichka=2) уже не работает
-
С чего бы вдруг ?
подозреваю с того, что писатели tquery и адоквери поленились написать объединение двух where. из sql.text и filter
в случае с ttable where только один в фильтре
-
хе хе
че та вы совсем не о том...
-
> Ponchic © (15.05.09 14:47) [23]
хехекать будешь потом)
Я тебе вопрос задал, см. [16]
-
какой вопрос?
-
Ты что, дурку включил ?)
Я спрашиваю, знаком ли ты с программой MS Access.. И если знаком. то почему не опробовал текст своего запроса прямо в конструкторе запросов MS Access ..
-
Да просто фильтр неправильный, а правильный замучаешься делать.
-
> Anatoly Podgoretsky © (15.05.09 14:55) [27]
Хочешь сказать, что там заморочки с парсером выражения для лок.фильтрации ?
-
> Сергей М. (15.05.2009 14:54:26) [26]
Сергей откуда ты взял, что фильтр выполняется через запрос, ведь это в общем случае не возможно, запросы могут быть любой сложности, а фильтр действует на результат оригинального запроса.
-
> Сергей М. (15.05.2009 15:02:28) [28]
Не заморочки, а особые правила объединения AND/OR частей, кстати в справке не документировано. В справке все примеры простые.
Если бы человек был бы нормальный, то я бы посоветовал не использовать локальную фильтрацию.
-
Хочешь сказать, что там заморочки с парсером выражения для лок.фильтрации ?
я хочу сказать, что если взять ttable mssql и использовать свойство filter, то на сервер уйдет запрос select * from table where <filter>
а если заменить ttable на tquery то запрос полетит такой как в tquery.sql, а filter будет применяться локально
-
> посоветовал не использовать локальную фильтрацию
Ну если уж она так нужна, то можно плюнуть на св-во Filter и организовать фильтацию в событии OnFilterRecord - куда уж проще и наглядней получится
-
> а особые правила объединения AND/OR частей, кстати в справке не документировано.
вот из моей справки, там есть...
There is no precedence between AND and OR. Clauses can be grouped within parentheses. However, you cannot group clauses joined by an OR and then join the group to another clause with an AND, like this:
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
Instead, you would construct this filter as
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')