Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Фигня какая-то / 14 сообщений из 14, страница 1 из 1
03.08.2005, 09:38:12
    #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
03.08.2005, 09:49:39
    #33198191
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фигня какая-то
Попробуй:
SET FILTER TO (RegionID=m.R)
С уважением, Алексей.
...
Рейтинг: 0 / 0
03.08.2005, 09:51:44
    #33198200
123
123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фигня какая-то
R не видна вне этого метода.
Присвойте значение методу формы или Public переменной(хуже)

LPARAMETERS R
thisform.Filter_value= R

SELECT tmpMainTable

SET FILTER TO RegionID=thisform.Filter_value
...
Рейтинг: 0 / 0
03.08.2005, 09:57:32
    #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
03.08.2005, 10:00:26
    #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
03.08.2005, 10:40:12
    #33198384
Сегун
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фигня какая-то
Всем большое спасибо!
...
Рейтинг: 0 / 0
03.08.2005, 11:05:28
    #33198477
Властелин комнатушек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фигня какая-то
Попробуй PARAMETERS R вместо LRAPAMETERS R
...
Рейтинг: 0 / 0
03.08.2005, 11:26:01
    #33198563
WORKSNS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фигня какая-то
PARAMETERS тоже не поможет. Переменная которая используется при наложении фильтра должна быть видна из всех процедур и методов формы, если они обращаются к таблице с фильтром.
...
Рейтинг: 0 / 0
03.08.2005, 11:31:42
    #33198586
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фигня какая-то
Властелин комнатушекПопробуй PARAMETERS R вместо LRAPAMETERS R
Не пройдет.

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

Здесь надо или пропертю формы или макроподстановку.
...
Рейтинг: 0 / 0
03.08.2005, 11:43:56
    #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
03.08.2005, 12:01:00
    #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
03.08.2005, 12:10:44
    #33198746
WORKSNS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фигня какая-то
to Кэт:

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

Using Rushmore Query Optimization to Speed Data Access.

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

так что не все так плохо с фильтрами :-)
...
Рейтинг: 0 / 0
03.08.2005, 15:04:22
    #33199427
Кэт_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фигня какая-то
Да я вобщем то не оптимизацию хотела сказать,
а то что условие фильтра при работе
формы "проверяется" не только в вызываемом методе,
но и при движении по записям итд,
таким образом области видимости переменной
локальной или приватной не хватит :-)))
Что уже выше и говорили
...
Рейтинг: 0 / 0
05.08.2005, 00:55:49
    #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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Фигня какая-то / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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