Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 филтрация по 2-м комбобоксу  [new]
asd456
Guest
Есть 2 комбобокса. Надо делать фильтрация по значением по этим 2-м комбобокса. Если выбрать какой-то значение на 1-м комбобокса, надо делать фильтрация по этому комбобоксу. Потом если выбрать какой-то значение и на 2-м комбобокса, надо делать фильтрация по этим 2-м комбобоксу. Или наоборот, если выбрат сначала на 2-м комбобоксе делать фильтрацию сначало по этому комбобоксу.
Как можно делать такое?
5 окт 09, 10:39    [7741202]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
asd456
Guest
Помогите пожалуйста!
5 окт 09, 14:38    [7742999]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
Ffffffffff
Guest
Поищите по форуму.
Было много похожих тем.
5 окт 09, 14:56    [7743132]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
LUCIAN
Member

Откуда: Беларусь г.Лида
Сообщений: 192
asd456,
Если фильтрацию надо сделать для таблицы Tab1 по полям Pol1 и Pol2 и эта таблица в форме отображается с помощью Grid, то в Refresh этого Grid поместить код:
local fp1,fp2
fp1=thisform.combo1.value
fp2=thisform.combo2.value
sele Tab1
set filter to pol1=fp1 and pol2=fp2

В Valid combo1 и combo2 должен стоять код:Thisform.refresh
5 окт 09, 16:34    [7743859]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
LUCIAN

Ваш код работать не будет. Будет сообщение об ошибке об отсутствии переменных памяти. Для такого способа фильтрации необходима макроподстановка значения фильтра.
5 окт 09, 16:41    [7743922]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
LUCIAN
Member

Откуда: Беларусь г.Лида
Сообщений: 192
ВладимирМ
LUCIAN

Ваш код работать не будет. Будет сообщение об ошибке об отсутствии переменных памяти. Для такого способа фильтрации необходима макроподстановка значения фильтра.

Тогда такой код:
local fp1,fp2
fp1=thisform.combo1.value
fp2=thisform.combo2.value
*пусть поля Pol1 и Pol2 типа С,тогда
filter="pol1="+fp1+" and  pol2="+fp2
sele Tab1
set filter to &filter
5 окт 09, 17:07    [7744176]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
LUCIAN
Member

Откуда: Беларусь г.Лида
Сообщений: 192
LUCIAN,
Надо так
[src]local fp1,fp2
fp1=thisform.combo1.value
fp2=thisform.combo2.value
*пусть поля Pol1 и Pol2 типа С,тогда
filter="pol1='"+fp1+"' and  pol2="'+fp2+"'"
sele Tab1
set filter to &filter
[/SRC]
5 окт 09, 17:13    [7744218]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
asd456
Guest
Получается "Syntax error" в строке filter="pol1='"+fp1+"' and pol2="'+fp2+"'"
6 окт 09, 07:23    [7745846]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
reware
Member

Откуда: Хабаровск
Сообщений: 585
asd456
Получается "Syntax error" в строке filter="pol1='"+fp1+"' and pol2="'+fp2+"'"

Господи, запутали человека совсем.
fp1=thisform.combo1.value
fp2=thisform.combo2.value
*пусть поля Pol1 и Pol2 типа С,тогда
filter1="pol1=fp1"
filter2="pol2=fp2"
sele Tab1
set filter to &filter1 .AND. &filter2
GO TOP
6 окт 09, 08:22    [7745904]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
asd456
Guest
Всеравно ошибка получается.
Я сделал так:
set filter to &filter1 '+.AND.+' &filter2
 
Но, в этом случае почему то фильтр работает только по 1-му комбобоксу.
6 окт 09, 08:41    [7745928]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
LUCIAN
Member

Откуда: Беларусь г.Лида
Сообщений: 192
asd456
Получается "Syntax error" в строке filter="pol1='"+fp1+"' and pol2="'+fp2+"'"

Надо так,только уберите пробелы между ',"
filter="pol1=' "+fp1+" ' and  pol2=' "+fp2+" ' "  
6 окт 09, 10:14    [7746230]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
reware
Member

Откуда: Хабаровск
Сообщений: 585
asd456
Всеравно ошибка получается.

Не знаю, что вы там делаете. Вот элементарный пример :
USE dogovor && в таблице символьные поля ndog и name
z1='1'
z2='1111'
f1="ndog=z1"
f2="name=z2"
SET FILTER TO &f1 .and. &f2
6 окт 09, 10:39    [7746429]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
asd456
Guest
LUCIAN, спасибо, получился.
6 окт 09, 10:53    [7746521]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
asd456
Guest
LUCIAN

Надо так,только уберите пробелы между ',"
filter="pol1=' "+fp1+" ' and  pol2=' "+fp2+" ' "  


Нет, что-то опять не правильно работает. Правильно работает только тогда когда на обе комбобоксе выбрано значение.
Надо делать фильтрацию по значению и по 1-му комбобоксу (какой выбран), и по значению по 2-м комбобоксу (если выбран обе комбобокс).
Помогите пожалуйста, как можно это делать?
16 окт 09, 10:51    [7795253]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
asd456
Guest
Я этот вопрос постарался решить в таком виде (потому что не мог использувать показанными здесь кодами), т.е., хотел все варианты отдельно писать. Но, всеравно не мог подобрать все варианты, напирмер, если выбран какой-то комбобокс, но другой не выбран, в этом случае фильтр не работает.

publ fp1, fp2, a1, a2
t1=thisform.text5.value
t2=thisform.text6.value
IF MK=1
    fp1=ALLTRIM(thisform.text1.value)
    fp2=alltrim(thisform.text2.value)

   IF a1<>0 AND a2<>0
	filter="TTOD(qebul_ed)>=t1 and TTOD(qebul_ed)<=t2 and dx=dx1 and  mushteri_a=fp1 and kuryer_adc=fp2"
   ENDIF
	
   IF a1<>0 AND a2=0
	filter="TTOD(qebul_ed)>=t1 and TTOD(qebul_ed)<=t2 and dx=dx1 and mushteri_a=fp1"
   ENDIF

    IF a2<>0 AND a1=0
	filter="TTOD(qebul_ed)>=t1 and TTOD(qebul_ed)<=t2 and dx=dx1 and    kuryer_adc=fp2" 
    ENDIF
	sele baza
set filt to ?filter
	GO TOP
ENDIF
28 окт 09, 09:40    [7847650]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
asd456
Guest
Eсли выбран какой-то комбобокс, но другой не выбран, в этом случае фильтр не работает.
Помогите пожалуйста.
28 окт 09, 14:14    [7850156]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
LUCIAN
Member

Откуда: Беларусь г.Лида
Сообщений: 192
asd456
Eсли выбран какой-то комбобокс, но другой не выбран, в этом случае фильтр не работает.
Помогите пожалуйста.

SET FILTER TO я не использую,следующий код я выдрал и переделал под фильтрацию,для того чтобы
он заработал необходимо чтобы предшествовала команда PUBLIC FRAG1,FRAG2 например в Load формы

	PROCEDURE combo1.Init
		THIS.VALUE=PADR("  ВСЕ",50)
		THIS.RowSourceType=3
		THIS.RowSource='SELECT DIST PADR("  ВСЕ",LEN(POLUC))  FROM DOKP UNION SELECT DIST POLUC FROM DOKP ORDER BY 1 INTO CURSOR  CPOL'
	ENDPROC


	PROCEDURE combo2.Init
		THIS.VALUE=PADR("  ВСЕ",50)
		THIS.RowSourceType=3
		THIS.RowSource='SELECT DIST PADR("  ВСЕ",LEN(OTPR))  FROM DOKP UNION SELECT DIST OTPR FROM DOKP ORDER BY 1 INTO CURSOR  COTP'
	ENDPROC

	PROCEDURE combo1.Valid
		frag1=THIS.VALUE
		This.Parent.REFRESH
	ENDPROC

	PROCEDURE combo2.Valid
		frag2=THIS.VALUE
		This.Parent.REFRESH
	ENDPROC


	PROCEDURE grddokp.Refresh
	SELECT DOKP
	SET FILTER TO (FRAG1=PADR("  ВСЕ",50) OR POLUC=FRAG1 ) AND (FRAG2=PADR("  ВСЕ",50) OR OTPR=FRAG2 )
28 окт 09, 18:32    [7852174]     Ответить | Цитировать Сообщить модератору
 Re: филтрация по 2-м комбобоксу  [new]
LUCIAN
Member

Откуда: Беларусь г.Лида
Сообщений: 192
LUCIAN,

вдогонку В LOAD формы код
PUBLIC FRAG1,FRAG2
FRAG1=PADR("  ВСЕ",50)
FRAG2=PADR("  ВСЕ",50)
28 окт 09, 18:38    [7852194]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить