powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Фигня какая-то
14 сообщений из 14, страница 1 из 1
Фигня какая-то
    #33198162
Сегун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В формсете создаю новый метод, который принимает всего одни параметр, по нажатию кнопки этот метод должен выполнять, но почему-то ругается.
Метод называется filter_all
Описываю такк:
Код: plaintext
1.
2.
3.
4.
LPARAMETERS R
 
SELECT tmpMainTable

SET FILTER TO (RegionID=R)

При ножатии кнопки вызываю

Код: plaintext
thisformset.filter_all( 1 )

Пишет Variable 'R' is not found. Как так и где это он должен его находить.
Если же в фильтре напрямую ставлю 1 то работает. Подскажите что я делаю не так.
...
Рейтинг: 0 / 0
Фигня какая-то
    #33198191
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй:
SET FILTER TO (RegionID=m.R)
С уважением, Алексей.
...
Рейтинг: 0 / 0
Фигня какая-то
    #33198200
123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R не видна вне этого метода.
Присвойте значение методу формы или Public переменной(хуже)

LPARAMETERS R
thisform.Filter_value= R

SELECT tmpMainTable

SET FILTER TO RegionID=thisform.Filter_value
...
Рейтинг: 0 / 0
Фигня какая-то
    #33198218
WORKSNS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LPARAMETERS ParameterList
Specifies one or more local variable or array names to assign data from the calling program.

Смотрите LOCAL, PRIVATE, PUBLIC
...
Рейтинг: 0 / 0
Фигня какая-то
    #33198230
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123R не видна вне этого метода.
Присвойте значение методу формы или Public переменной(хуже)

LPARAMETERS R
thisform.Filter_value= R

SELECT tmpMainTable

SET FILTER TO RegionID=thisform.Filter_value
Да, точно, виноват, именно из-за видимости переменой, но лучше, наверное, так:
SET FILTER TO RegionID=thisformset.Filter_value[/quot] и свойство добавь в formset, т.к. метод в нем.
И еще, если применяешь простые имена переменных типа R, I и пр., обязательно ставь префикс m. Иначе, рано или поздно напорешься на поле в курсоре (таблицы) с таким же именем и VFP возьмет именно его, а не твою переменную.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Фигня какая-то
    #33198384
Сегун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо!
...
Рейтинг: 0 / 0
Фигня какая-то
    #33198477
Властелин комнатушек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй PARAMETERS R вместо LRAPAMETERS R
...
Рейтинг: 0 / 0
Фигня какая-то
    #33198563
WORKSNS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PARAMETERS тоже не поможет. Переменная которая используется при наложении фильтра должна быть видна из всех процедур и методов формы, если они обращаются к таблице с фильтром.
...
Рейтинг: 0 / 0
Фигня какая-то
    #33198586
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Властелин комнатушекПопробуй PARAMETERS R вместо LRAPAMETERS R
Не пройдет.

Методы формы запускаются не друг ИЗ друга, а друг ЗА другом. Т.е. это не вложенная последовательность (переменные PRIVATE видны из процедур запущенных ИЗ той, где она была определеная). Это цепочка последовательно запускаемых процедур. Последующая запускается после окончания работы предыдущей.

Здесь надо или пропертю формы или макроподстановку.
...
Рейтинг: 0 / 0
Фигня какая-то
    #33198635
WORKSNS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот такой способ поможет

в клике кнопки

thisformset.filter_all(1)

в методе filter_all

LPARAMETERS R
LOCAL FilterExpr

FilterExpr=[set filter to RegionID=]+ALLTRIM(STR(r))
&FilterExpr

если передаваемый параметр строковый то
FilterExpr=[set filter to RegionID=']+R+[']
...
Рейтинг: 0 / 0
Фигня какая-то
    #33198707
Кэт:
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот однажды мне отвечали очень доступно,
От matod
http://forum.foxclub.ru/read.php?f=5&i=64375&t=64343#reply_64375
квинтэссенция:
Дело в работе механизма фильтра. Команда SET FILTER физически не отбирает записи, попадающие под условие фильтра и фокс использует это условие исключительно по требованию. Например выполняется команда SKIP (явно или неявно выполняемой). Грубо алгоритм работы можно представить следующим образом:
1. перейти на следующую запись
2. провирить условие соответствия фильтру
3. если не выполняется начать сначала
В этом есть свой смысл. Предположим, в таблице 100 000 записей. После установки фильтра программа выполнит всего лишь один-два перехода на следующую запись, после чего фильтр станет ненужным. Если бы фокс физически отбирал записи появился бы неоправданный расход ресурсов.
Вторая причина. Значения полей могут изменяться, поэтому необходимо каждый раз проверять соответствует ли содержимое записи условию фильтра. И, наконец, третья - организация динамического фильтра - переменная, входящая в условие фильтра может менять свое значение.
Т. о. можно себе представить, что смысл команды
SET FILTER TO f1=m.x
лучше расшифровывать так - использовать в работе только те записи, поле f1 которых совпадает с ТЕКУЩИМ значением переменной.
такая вот гибкость и как следствие - низкая производительность фильтров.
...
Рейтинг: 0 / 0
Фигня какая-то
    #33198746
WORKSNS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Кэт:

но ведь в разделе HELP

Using Rushmore Query Optimization to Speed Data Access.

Potentially Optimizable Commands with FOR Clauses
.,.........
SET FILTER
...........

так что не все так плохо с фильтрами :-)
...
Рейтинг: 0 / 0
Фигня какая-то
    #33199427
Кэт_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я вобщем то не оптимизацию хотела сказать,
а то что условие фильтра при работе
формы "проверяется" не только в вызываемом методе,
но и при движении по записям итд,
таким образом области видимости переменной
локальной или приватной не хватит :-)))
Что уже выше и говорили
...
Рейтинг: 0 / 0
Фигня какая-то
    #33202904
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi WORKSNS!

Оно конечно оптимизируемо, и если единсвтенно для чего применяется фильтр
так это SCAN, SKIP и отображение ОДНОЙ записи в форме (без грида) - тогда
всё нормально. Но если используется грид, и версия фокса <9 (в 9-ке уже есть
Grid.Optimize) то это смерть - не могёт там грид оптимизированно вынимать
записи для заполнения видимых строчек... Впрочем для целей отображения лучше
всегда применять запросы/представления. Ибо при выполнении запроса условия
проверится всего 1 раз на подходящую запись (ну на самом деле чуть сложнее,
но лгавное - что ЕДИНОВРЕМЕННО всё отработает и больше не будет дёргаться),
а вот фильтр - он постоянно дёргает проверки - т.е. SKIP 1 SKIP -1 - он
будет проверять/искать запись 2 раза... Повторишь 100 раз движение - будет
каждый раз проверять...

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Фигня какая-то
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]