Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по фильтрации   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.072 c
1-1084609118
Delphir
2004-05-15 12:18
2004.05.30
LowerCase по русски


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


14-1084037763
TCrash
2004-05-08 21:36
2004.05.30
Плиз, очень нуна


11-1074438248
Neznaika
2004-01-18 18:04
2004.05.30
MHLame для Delphi6


14-1084212225
Drakon
2004-05-10 22:03
2004.05.30
Электронные учебники по Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский