powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите новичку с combo
18 сообщений из 18, страница 1 из 1
Помогите новичку с combo
    #33132824
tigramax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет! Наформе есть 3 combo. хочется чтобы значение 1 combo ограничивало
список значений 2 combo, а тот в свою очередь ограничивает список значений для 3 combo. Возможно как-то отфильтровать значения в combo?
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33132865
Андрей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не раз обсуждалось на этом форуме. Используй Поиск по слову combo
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33133242
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Valid-е первого комбо переопределяешь источник для второго, в валиде 2-го - для третьнго.
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33133489
tigramax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может я туплю, но ничего не получается в combo1.valid вставлен следующий код:
select orgtehnika
set filter to orgtehnika.idparent=thisform.combo1.value
thisform.combo2.rowsource='orgtehnika.name'
thisform.combo2.requery
thisform.combo2.refresh
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33133526
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитай вот эту дискуссию

http://www.sql.ru/forum/actualthread.aspx?tid=194398
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33133962
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нравится мне эта строчка:
set filter to orgtehnika.idparent=thisform.combo1.value

Не стоит для фильтров использовать объекты формы - они видны только внутри формы.
Ты уверен что в момент выдачи SET FILTER у тебя текущий алиас - orgtehnika?
Если RowSource у комбо 6 попробуй такую конструкцию:

SELECT orgtehnika
set filter to orgtehnika.idparent=<источник комбо 1>.<поле>
thisform.combo2.rowsource='orgtehnika.name'
thisform.combo2.requery
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33141923
nfp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nfp
Гость
Извините, похожая проблема но указанными средствами не решается.
На форме два TEXTBOXа b combo .
на основании данных введенных в TEXTBOXы
В valide 1-го TEXTBOX следующий код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT OPLATAspr_doc
x1= PADL(ALLTRIM(ThisForm.Text1.Value), 3 ,' ')
x2= PADL(ALLTRIM(ThisForm.Text2.Value), 2 ,' ')
SET FILTER TO OPLATAspr_doc.N_KSSCH = x2;
				AND OPLATAspr_doc.N_KSCH = x1;
				AND OPLATAspr_doc.DK = '?'
GO TOP
ThisForm.Combo1.RowSource = 'OPLATAspr_doc.NAIM_DOC'
thisform.combo1.requery
ThisForm.Combo1.Refresh
Во втором
Код: plaintext
1.
ThisForm.Text1.Valid
Вводятся данны устанавливается фильтр, а когда фокус получает комво
выдается сообщение "переменная Х1 не найдена "
Если объявить переменные X1 и Х2 PUBLIC, то все нормально.
Не понятно: зачем комбо потребовались эти переменные.Ему указали откуда брать данные и пусть оттуда берет и какая ему разница отфильтрованы данные или нет и какие переменные участвовали в фильтре?
Может кто объяснит?
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33141961
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BurnНе нравится мне эта строчка:
set filter to orgtehnika.idparent=thisform.combo1.value

Не стоит для фильтров использовать объекты формы - они видны только внутри формы.
Простое, красивое и эффективное решение:
Код: plaintext
1.
x = 'set filter to orgtehnika.idparent='+thisform.combo1.value
&x
;-)))
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33141989
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если область видимости переменной не указана явно (LOCAL, PRIVATE, PUBLIC), то, по умолчанию, она получает область видимости PRIVATE. Как следствие, автоматически удаляется по завершению процедуры в которой была создана.

При формировании условия фильтра лучше использовать макроподстановки, чтобы вместо значения переменной была установлена константа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT OPLATAspr_doc
x1= "["+PADL(ALLTRIM(ThisForm.Text1.Value), 3 ,' ')+"]"
x2= "["+PADL(ALLTRIM(ThisForm.Text2.Value), 2 ,' ')+"]"
SET FILTER TO OPLATAspr_doc.N_KSSCH = &x2 ;
		AND OPLATAspr_doc.N_KSCH = &x1 ;
		AND OPLATAspr_doc.DK = '?'
GO TOP
ThisForm.Combo1.RowSource = 'OPLATAspr_doc.NAIM_DOC'
thisform.combo1.requery()
ThisForm.Combo1.Refresh()

Здесь я предполагаю, что значения ThisForm.Text1.Value и ThisForm.Text2.Value не могут содержать в себе символов квадратных скобок. Если это не так, то надо использовать либо символы одинарных кавычек, либо символы двойных кавычек как дополнительные символы, ограничивающите строку после макроподстановки.

К сведению:

Если в функции PADL() третий параметр не указан, то строка будет дополняться слева символами пробела. Т.е. в данном случае можно ограничиться записью вида

PADL(ALLTRIM(ThisForm.Text1.Value),3)
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33142234
nfp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nfp
Гость
Спасибо! Заработало !!!
Но всеже непонятно такое поведение combo и фильтра.
1 Допустим я ввел в сооветствующие текстовые поля символьные значения
91 и 2
после выполнения команд

x1= "["+PADL(ALLTRIM(ThisForm.Text1.Value),3,' ')+"]"
x2= "["+PADL(ALLTRIM(ThisForm.Text2.Value),2,' ')+"]"

получим значения
х1="[ 91]" а х2= "[ 2]" а в таблице соответствующие значения " 91" и " 2"
и как они будут равными?
2 ВладимирМ
Если область видимости переменной не указана явно (LOCAL, PRIVATE, PUBLIC), то, по умолчанию, она получает область видимости PRIVATE. Как следствие, автоматически удаляется по завершению процедуры в которой была создана.

Это ежу понятно . И я бы не возражал еслибы вижел ругался в случае когда переменные объявлены в textbox а используются в combo
Но у меня в combo x1 ни кде не упоминается

nfp
Не понятно: [зачем комбо потребовались эти переменные.Ему указали откуда брать данные и пусть оттуда берет и какая ему разница отфильтрованы данные или нет и какие переменные участвовали в фильтре?
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33142253
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Условие в Set filter проверяется при каждом перемещении по записям. Для отображения нужных тебе записей нужно пройтись по ним? А при Requery() или Refresh() нужно пройтись? А где это происходит? А где определены переменные?
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33142664
nfp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nfp
Гость
Блин ! Точно! Чтото мы забыли что условие фильтра проверяется каждый раз.
Все правильно.
Но тогд аеще вопрос по этой -же программе.

Первоначально мы в фильтре вместо переменых х1 и х2 писали
PADL(ALLTRIM(ThisForm.Text1.Value),3,' ') и PADL(ALLTRIM(ThisForm.Text2.Value),2,' ')
на сомво выдавалась ошибка

THISFORM can only be used within a method

А тут почему я не прав ? Ведь значение объекта известно в пределах всей формы, а я из нее не вышел и перед фильтром указана область в которой накладывать фильтр .
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33142734
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где именно происходит процесс вычисления условия фильтра? Т.е. вот указатель переходит на новую запись, тут происходит вычисление выражения фильтра для этой записи, но где именно это происходит? В методе формы?
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33142863
nfp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nfp
Гость
ВладимирМ
Где именно происходит процесс вычисления условия фильтра? Т.е. вот указатель переходит на новую запись, тут происходит вычисление выражения фильтра для этой записи, но где именно это происходит? В методе формы?

Все там же- в Valid для Textbox1. Это тот же пример
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33142894
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nfp ВладимирМ
Где именно происходит процесс вычисления условия фильтра? Т.е. вот указатель переходит на новую запись, тут происходит вычисление выражения фильтра для этой записи, но где именно это происходит? В методе формы?

Все там же- в Valid для Textbox1. Это тот же пример
С какой стати? То, что переменные проверяются ВНЕ этого события тебя ведь не удивляет. Разве ты перемещаешся по записям таблицы внутри события Valid?

Выражение фильтра вычисляется какждый раз при перемещении по записям таблицы. Это происходит ВНЕ твоего события VALID. Но почему ты решил, что это происходит в каком-либо методе формы?
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33144145
nfp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nfp
Гость
To ВладимирМ
Т.е в Valid TEXTBOXа я только задаю условия для фильтра. Когда фокус получает combo идет "запрос" на фильтрацию а сама фильтрация происходит
вообще вне формы где неизвестны значения объектов формы ?
Так?
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33144235
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 nfp:

ДА! Ты можешь выйти из формы и уничтожить ее, а set filter будет действовать. Он как бы привязан к таблице, на которую он наложен. И еще раз напоминаю, что условие проверяется при КАЖДОМ перемещении по таблице, даже неявном, как, например, при отрисовке содержимого комбо или листбокса.
...
Рейтинг: 0 / 0
Помогите новичку с combo
    #33144414
nfp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nfp
Гость
Спасибо!
В принципе это все должно быть понятно и раньше. Но теперь должно запомниться надолго (лучше на всегда) . Вообше с фильтрами стараюсь не работать.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите новичку с combo
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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