2016-06-21 1 views
1

У меня есть сетка на форме, заполненной видом. Я добавил кнопку для фильтрации данных.Переменная не найдена

cFilter = UPPER(ALLTRIM(INPUTBOX("Filter sur :","Spectech France - Suivi DDP"))) 

SELECT vwDdp_all 

LOCATE FOR ALLTRIM(ref_client) = cFilter 
IF FOUND() 
    SET FILTER TO ref_client = cFilter 
    THISFORM.grdDDP.Column10.SetFocus 
ENDIF 

Я получаю сообщение об ошибке «Variable cFilter not found». Я не понимаю, что ошибка возникает после того, как уже выполнен код выше; и в отладчике метод вины указывается как «MyForm.grdDDP». Ничего больше. Как я могу найти, где он действительно ищет эту переменную?

+0

Использование программы обработки ошибок показывает, что ошибка произошла в MyForm.grdDDP.Error (??) – Bernard

ответ

3

Переменная cFilter должна быть глобальной для работы вашего кода.

Если вы не хотите использовать глобальную переменную, вы можете сделать что-то вроде этого.

cFilter = UPPER(ALLTRIM(INPUTBOX("Filter sur :","Spectech France - Suivi DDP"))) 

SELECT vwDdp_all 

LOCATE FOR ALLTRIM(ref_client) = cFilter 
IF FOUND() 
    lcFiltClause = [ref_client = ']+cFilter+['] 
    SET FILTER TO &lcFiltClause 
    THISFORM.grdDDP.Column10.SetFocus 
ENDIF 
1

Выражение фильтра должно быть видимым во все время, когда вы перемещаетесь в связанном курсоре. Вы можете сделать:

Local lcFilter 
lcFilter = Textmerge('ref_client = "<<m.cFilter>>"') 
Set Filter To &lcFilter 

НО, установите фильтр один из команд, что почти все разработчики имеют его на их «не использовать» список. Особенно с сеткой, вы не должны использовать «set filter». Вместо этого вы можете просто использовать запрос в качестве источника сетки. Или если этот ref_client является индексированным полем, вы можете вместо этого использовать «Установить диапазон» (ему не нужна глобальная переменная или любой трюк &).

+0

Фильтр был пользовательским требованием (они хотят подражать HUGE Excel, который приложение должно заменить), но я возьму ваш совет и попробуйте использовать «Set Range». – Bernard

+0

Да, фильтр настройки не работает с сетками (соблюдайте вводящую в заблуждение полосу прокрутки). –

+0

BTW, вы можете захотеть использовать (теперь бесплатно и выпущен для публики) сетки Foxyclasses, в частности класс LocatorGrid. –