Текущий архив: 2004.05.30;
Скачать: CL | DM;
ВнизВопрос по фильтрации Найти похожие ветки
← →
Tugodym (2004-05-07 12:36) [0]Есть два условия для фильтра:
1) Table1.Filter:="Fam ="""+Edit1.text+"*""and konec<"+ quotedstr(datetostr(date));
2) Table1.Filter:="Fam ="""+Edit1.text+"*""or kolich=0";
которые по отдельности работают нормально, подскажите как эти два условия обьедениять в одно через OR.
← →
Соловьев © (2004-05-07 12:38) [1]OnFilterRecord:
Accept := <условие>;
Пиши что в голову прийдет :)
← →
Мунька © (2004-05-07 12:48) [2]Я вот думаю, что все-таки лучше, фильтрация, или запрос с условием...я все чаще останавливаюсь на запросе с условием. Или я неправа?
← →
Tugodym (2004-05-07 14:57) [3]Есть два условия для фильтра:
1) Table1.Filter:="Fam ="""+Edit1.text+"*""and konec<"+ quotedstr(datetostr(date));
2) Table1.Filter:="Fam ="""+Edit1.text+"*""or kolich=0";
которые по отдельности работают нормально, подскажите как эти два условия обьедениять в одно через OR
← →
HSolo © (2004-05-07 15:12) [4]Table1.Filter := "(" + <условие1> + ") or (" + <условие2> + ")";
← →
Tugodym (2004-05-07 15:15) [5]HSolo © (07.05.04 15:12) [4]
Так я и делал,но выдает ошибку, видать все таки где то в синтаксисе она есть немогу понять...
← →
Мунька © (2004-05-07 15:17) [6]Вам же ответили, использовать событие OnFilterRecord в котором в переменную Accept записать выражение, дающее булев результат, в котором задействованы Ваши поля
Accept := (DataSet.FieldValues["Fam"] = Edit1.text)And(DataSet.FieldValues["konec"]< quotedstr(datetostr(date)).....)OR
(Ваше значение второго фильтра в терминах DataSet.FieldValues ).
Тогда
1. Вам не надо будет использовать строку фильтра как таковую, то есть не надо Table1.Filter := " "
2. Достаточно вызвать
Table1.Filtered := true;
← →
Tugodym (2004-05-07 15:31) [7]Мунька © (07.05.04 15:17) [6]
Этот метод мне абсолютно неподходит, так как в программе используются около 20 разных условий фильтрации, который назначены разным кнопкам... Может вы все таки мне поможите правильно записать то что имеется. Зарание спасибо...
← →
HSolo © (2004-05-07 15:40) [8]>Так я и делал,но выдает ошибку
Для начала посмотрите, какое условие фильтра формируется на самом деле.
А чем Вам так уж абсолютно не подходит совет от Мунька © (07.05.04 15:17) [6] ? Решение навскидку: заведите глобальную переменную, пусть кнопки устанавливают ее значение, а в OnFilterRecord выбирается условие в зависимости от ее значения:\
Accept := ((MyVar=1) and условие1) or ((MyVar=2) and условие2)...
← →
Мунька © (2004-05-07 15:44) [9]>Этот метод мне абсолютно неподходит, так как в программе >используются около 20 разных условий фильтрации, который >назначены разным кнопкам...
Поверьте мне, что у меня в одной программе с 20 условиями, как Вы выразились был использован именно этот метод.
То, как Вы хотите, тоже решаемо. В конце концов, если Вы объединили так как Вам советовали и Вы предполагаете ошибку синтаксиса - возьмите отладчик и в нем посмотрите строку фильтра после объединения двух условий, выложите ее здесь.
← →
Tugodym (2004-05-07 15:49) [10]HSolo © (07.05.04 15:40) [8]
Зачем мне все это делать(переделывать), если у меня почти все готово осталось только обьеденить в один фильтр.
← →
HSolo © (2004-05-07 15:52) [11]>Tugodym (07.05.04 15:49) [10]
Не хотите переделывать - это другое дело, но при чем тут "абсолютно не подходит"? Не переделывайте, кто ж Вас заставляет :) просто корректно сформируйте строку фильтра
← →
Tugodym (2004-05-07 15:55) [12]Эх, если бы я мог.....
← →
Tugodym (2004-05-07 15:55) [13]Эх, если бы я мог.....
← →
Мунька © (2004-05-07 15:59) [14]Да поставьте точку останова на моменте соединения двух строк, а после соединения используйте Evalute/Modify для Table.Filter и скопируйте строку на форум
← →
Tugodym (2004-05-07 16:08) [15]Немогу, :(
Я незнаю как это сделать...
← →
HSolo © (2004-05-07 16:16) [16]Тогда киньте на форму TEdit. В коде после формирования строки фильтра напишите:
Edit1.Text := Table1.Filter;
Запустите программу. Нажмите кнопку (или что там у Вас), к-рая формирует условие фильтра. Скопируйте содержимое Edit1... дальше понятно :)
← →
Tugodym (2004-05-07 16:26) [17]HSolo © (07.05.04 16:16) [16]
Я вас понял, только перед этим надо сначала обьеденить эти два условия, чтобы хотябы програма запустилась, а уже потом смотреть на ошибку, только вот я никак немогу соблюсти синтаксис условия....
← →
Мунька © (2004-05-07 16:32) [18]Подождите, Вы хотите сказать, что у вас выдается ошибка на этапе компиляции???
← →
Tugodym (2004-05-07 16:34) [19]Мунька © (07.05.04 16:32) [18]
Если записать два условия раздельно, то никакой ошибки нету, ошибка компиляции появляется при записи двух условий в один фильтр через OR.
← →
Мунька © (2004-05-07 16:35) [20]Table1.Filter:="Fam ="""+Edit1.text+"*""and konec<"+ quotedstr(datetostr(date))+ " OR " + "Fam ="""+Edit1.text+"*""or kolich=0";
← →
Мунька © (2004-05-07 16:37) [21]>Если записать два условия раздельно, то никакой ошибки нету, >ошибка компиляции появляется при записи двух условий в один >фильтр через OR.
Конечно появится, надо писать так
Filter:= "ваши условие1"+ " OR " + "ваше условие 2"
← →
HSolo © (2004-05-07 16:38) [22]>Мунька © (07.05.04 16:35) [20]
Боюсь, это не совсем то условие, что нужно вопрошающему
>Tugodym
Как пишете?
← →
Мунька © (2004-05-07 16:47) [23]
> HSolo ©
У него компилятор, похоже ошибку выдает
← →
Tugodym (2004-05-07 16:50) [24]Мунька © (07.05.04 16:35) [20]
Скомпелировалась нормально, но работает также как и этот фильтр
Table1.Filter:="Fam ="""+Edit1.text+"*""and konec<"+ quotedstr(datetostr(date))+"or kolich=0";
Обьясню поподробней, у меня есть три поля
1) Имя
2) Дата (konec)
3) Количество (kolich)
И мне надо сделать так чтобы при вводе фамилии ,
поиск происходил или при условии что Дата меньше седнешней или
(OR) или количество равно нулю...
А при фильтре который написан выше (в этом сообщении ), он находит того человека которого я ввел в Edit и вдобавок отображает всех тех у кого количество рано нулю.
← →
Мунька © (2004-05-07 16:53) [25]Table1.Filter:="Fam ="""+Edit1.text+"*""and (konec<"+ quotedstr(datetostr(date))+"or kolich=0)";
← →
HSolo © (2004-05-07 16:56) [26]>он находит того человека которого я ввел в Edit и вдобавок отображает всех тех у кого количество рано нулю
И правильно делает :) Ибо именно об этом Вы его попросили.
Ваш фильтр выглядит так:
условие1 and условие2 or условие3
И каково будет значение этого выражения при условии3=true, и как оно будет зависеть от значений условия1 и условия2 ?
Приоритет логических операций, однако...
← →
Tugodym (2004-05-07 17:01) [27]HSolo © (07.05.04 16:56) [26]
Спасибо вам огромное все работает....
HSolo и вам тоже спасибо....
P.S. когда я писал свой вопрос, я даже недумал что мне на него коректно ответят, у думал что посыпяться различные издёвки, типа "Иди почитай книги" "И ты еще хочешь стать програмистом?"
и т.д. Хорошо что вы есть, спасибо!!!!
← →
Tugodym (2004-05-08 08:46) [28]Блин перепутал
HSolo © (07.05.04 16:56) [26]
Спасибо вам огромное все работает...
Это было адресовано вам Мунька
Страницы: 1 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.036 c