Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.53 MB
Время: 0.025 c
3-1084186103
Mishenka
2004-05-10 14:48
2004.05.30
Есть ли стандартные диалоги для поиска в Базах данных?


14-1083913278
pasha_golub
2004-05-07 11:01
2004.05.30
Мое публичное заявление :-)


3-1084370851
юрок
2004-05-12 18:07
2004.05.30
ДБ Грид


7-1082450954
MeF88
2004-04-20 12:49
2004.05.30
О размерах памяти консольных приложений


11-1073810257
avakss
2004-01-11 11:37
2004.05.30
Как программно создать ярлык?