Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Помогите с фильтром в grid  [new]
Yulia_P
Member

Откуда:
Сообщений: 7
На форме имеется Grid по таблице SP c полями: SP_nomer, SP_name, produkt_name.
Пример записей:
SP_nomerSP_nameprodukt_name
№1Наимен1хлеб батон калач ....
№2Наимен2мука хлеб
№3Наимен3мясо колбаса сосиски ....
..................

При открытии формы передается значение переменной produkt, например:
produkt=бородинский хлеб
или produkt=батон "праздничный"
или produkt=молочный калач

Как сделать фильтр записей в grid по полю produkt_name, совпадающие с частью выражения в переменной produkt?
13 ноя 09, 08:04    [7923570]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
reware
Member

Откуда: Хабаровск
Сообщений: 585
Yulia_P

Как сделать фильтр записей в grid по полю produkt_name, совпадающие с частью выражения в переменной produkt?

SET FILTER TO produkt$produkt_name IN SP
GO TOP IN SP
13 ноя 09, 08:41    [7923618]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
Yulia_P
Member

Откуда:
Сообщений: 7
reware
Yulia_P

Как сделать фильтр записей в grid по полю produkt_name, совпадающие с частью выражения в переменной produkt?

SET FILTER TO produkt$produkt_name IN SP
GO TOP IN SP


В такой конструкции ищется полное соответствие переменной produkt в поле produkt_name таблицы SP, т.е. работает только когда produkt=хлеб или produkt=батон...А мне нужно чтобы фильтровало при частичном совпадении, если produkt=бородинский хлеб или produkt=батон "праздничный"!!! Как это сделать?
13 ноя 09, 09:07    [7923700]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
Dag
Member

Откуда:
Сообщений: 842
А обязательно это нужно делать в виде фильтра или достаточно обойтись курсором?
13 ноя 09, 09:14    [7923717]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
Yulia_P
Member

Откуда:
Сообщений: 7
Dag
А обязательно это нужно делать в виде фильтра или достаточно обойтись курсором?

мне лишь бы работало, а через фильтр или курсор- все равно...Как сделать тогда через курсор?
13 ноя 09, 09:23    [7923750]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
igorbik
Member

Откуда: Мск
Сообщений: 578
Yulia_P,

Лучше всего в форму передавать не одно, а несколко т.н. ключевых слов.
Например не "хлеб Бородинский" а "хлеб" и "Бородинский". И фильтр ставить по всем этим словам.
Иначе придется при формальном подходе делить передаваемую фразу по словам по пробелам, а далее, возможно, еще перебирать по 1-2-3-4 и т.д. буквы, и все равно выходим на то, что лучше иметь несколько отдельных слов сразу.
Кстати, вместо "Праздичный" можно передать "праздничн", чтобы нашлось больше совпадений, и искать именно оператором "$", например по "хлеб" тогда будут найдены и "хлеб подовый" и "хороший хлеб".
13 ноя 09, 09:55    [7923890]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
GoshaS
Member

Откуда: юг Архангельской обл.
Сообщений: 392
Не советовал бы выражение фильтра помещать в переменную. Может добавить свойство формы и туда записывать фильтр?
Фильтр можно строить с функцией LIKE(cExpression1, cExpression2)
Можно сделать источником грида и курсор.
select * from table where m.produkt like '%'+rtrim(produkt_name)+'%'
Надо еще помнить, что для фоксика еще важен регистр.
13 ноя 09, 10:05    [7923945]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
reware
Member

Откуда: Хабаровск
Сообщений: 585
Yulia_P

В такой конструкции ищется полное соответствие переменной produkt в поле produkt_name таблицы SP, т.е. работает только когда produkt=хлеб или produkt=батон...А мне нужно чтобы фильтровало при частичном совпадении, если produkt=бородинский хлеб или produkt=батон "праздничный"!!! Как это сделать?

А надо яснее излагать, что такое "частичное совпадение". Перевожу в нормализованную форму (за вас) - при передаче переменной produkt="бородинский хлеб" требуется отфильтровать записи, где встречаются либо "бородинский", либо "хлеб", либо и то и другое. Если я угадал (опять в угадайки играем), то следует входную переменную produkt вначале разбить на составляющие слова функциями GETWORDCOUNT() и GETWORDNUM(). Назовем эти составляющие слова produkt1, produkt2... и т.д. Тогда фильтр будет такого типа
SET FILTER TO produkt1$produkt_name .OR. produkt2$produkt_name .OR. produkt3$produkt_name IN SP
GO TOP IN SP
Если хочется курсора, то приведенное условие фильтрации поместите в WHERE команды SELECT. Тот-же эффект.
P.S. Только не надо так кричать и сыпать восклицаниями.
13 ноя 09, 10:22    [7924063]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
Yulia_P
Member

Откуда:
Сообщений: 7
GoshaS
Не советовал бы выражение фильтра помещать в переменную. Может добавить свойство формы и туда записывать фильтр?


Почему выражение в переменной и почему не разделить на слова - поясняю: есть форма1 на которой grid1 по таблице doc_prod. В эту таблицу заносят наименование продукта в поле name_prod и данные по продукту, при заполнении поля doc_sp отрывается форма2 в которой и находится вышеописанный grid по таблице SP, его и нужно отфильтровать по переменной produkt=doc_prod.name_prod......

автор
Фильтр можно строить с функцией LIKE(cExpression1, cExpression2)
Можно сделать источником грида и курсор.
select * from table where m.produkt like '%'+rtrim(produkt_name)+'%'
Надо еще помнить, что для фоксика еще важен регистр.


Не очень поняла где размещать :select * from sp where produkt like '%'+rtrim(produkt_name)+'%'
в init формы?
13 ноя 09, 10:55    [7924310]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
Yulia_P
Member

Откуда:
Сообщений: 7
P.S. Только не надо так кричать и сыпать восклицаниями.[/quot]

И вовсе не кричала..спасибки за советы!!!
13 ноя 09, 10:58    [7924346]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
Yulia_P
Member

Откуда:
Сообщений: 7
А что за функции такие GETWORDCOUNT() и GETWORDNUM() ? не могу найти описание. У меня VFP 8
13 ноя 09, 11:01    [7924371]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
reware
Member

Откуда: Хабаровск
Сообщений: 585
Yulia_P
А что за функции такие GETWORDCOUNT() и GETWORDNUM() ? не могу найти описание. У меня VFP 8

Вы не в курсе, что следует указывать свою версию фокса ? Если не указано, подразумевается последняя. Или продолжаем играть в угадайки и ищем здесь телепатов, угадывающих реальное положение ваших проблем по одному сказанному слову ?
Эти функции ищите в VFP9. По большому счету, не сильно трудно разложить символьную переменную на слова и без этих встроенных функций. Для совсем сильно занятых - функция Words() в Foxtools.fll (даже для VFP5).
13 ноя 09, 12:27    [7925185]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с фильтром в grid  [new]
Yulia_P
Member

Откуда:
Сообщений: 7
Спасибо всем! Задачу решила. Тема закрыта
13 ноя 09, 12:47    [7925360]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить