Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADODataSet.Filter:= (... LIKE ...) AND (... LIKE ...)


Silver_ ©   (2003-07-02 09:52:00) 

Как осуществить филтер по LIKE по более одного поля
типа:
ADODataSet.Filter:="(Fld1 LIKE *""ABC""*) AND(Fld2 LIKE *""def""*)";

Сразу опережу желателен ответ с использованием именно ADODataSet.Filter:= а не ADODataSet.OnFilterRecord :)


Silver_   (2003-07-02 12:59:00) [1]

Все разобрался, все работает
Сначала не проверял
if NameEdit.Text <> "" then ...
if AbbrEdit.Text <> "" then ...
а потом не выключал фильтр до построения условия фильтра вобщем правильно должно быть так (если кто-нить сталкнется с этим чтоб не вешался :о)) )

ADODataSet.Filtered:=False;
if NameEdit.Text <> "" then
ADODataSet.Filter:="Name LIKE "#39"*"+DoubleQuotedString (NameEdit.Text,"""")+"*"#39;
if AbbrEdit.Text <> "" then
begin
if ADODataSet.Filter <> "" then
ADODataSet.Filter:=ADODataSet.Filter + " AND ";
ADODataSet.Filter:=ADODataSet.Filter
+ "Abbr LIKE "#39"*"+DoubleQuotedString(AbbrEdit.Text,"""")+"*"#39;
end;
ADODataSet.Filtered:=True;


ЗЫ Я частенько замечаю что на мои вопросы тока
> sniknik ©
либо слишком ядрённые для других либо... :о)

отдельное Спосибо тебе sniknik ©за поддержку!!!


sniknik   (2003-07-02 11:10:00) [2]

попробуй еще раз.
попробуй заменить * на %.
попробуй без преобразований просто внеси строку "(Fld1 LIKE ""*ABC*"") AND (Fld2 LIKE ""*def*"")";
скажи в чем выражается отказ. (просто не находит? проверь условие)

у меня работает без вопросов.


Silver_   (2003-07-02 11:05:00) [3]


> кроме явной ошибки в приведенном фильтре

здесь ошибся, сам заметил :), но в проге все нормально:
ADODataSet.Filter:="(Name LIKE "#39"*"+DoubleQuotedString(NameEdit.Text,"""")+"*"#39
+") AND (Abbr LIKE "#39"*"+DoubleQuotedString(AbbrEdit.Text,"""")+"*"#39
+")";

где DoubleQuotedString удваивает " или " (по необходимости)

Верний код не проходит. А следующий на ура
ADODataSet.Filter:="(Name LIKE "#39"*"+DoubleQuotedString(NameEdit.Text,"""")+"*"#39
+")";


Silver_   (2003-07-02 10:53:00) [4]

Во блин ошибся * не туды сунул вот так должно быть:
ADODataSet.Filter:="(Fld1 LIKE ""*ABC*"") AND(Fld2 LIKE ""*def*"")";

В догонку СУБД Access

Вобщем трабл в том что более 1-го LIKE в одном филтре не не хочет принять, а мне очень надо. Как быть???


sniknik   (2003-07-02 10:50:00) [5]

а в чем проблема то?
кроме явной ошибки в приведенном фильтре
ADODataSet.Filter:="(Fld1 LIKE ""*ABC*"") AND (Fld2 LIKE ""*def*"")";


Наверх

Титульная страница Поиск, карта сайта Написать письмо