Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Проблема с сортировкой  [new]
starsoo
Member

Откуда:
Сообщений: 59
Dima T,

Это на каком комбо?
6 окт 16, 13:14    [19750210]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
Dima T
Member

Откуда:
Сообщений: 15298
Что это? Если про это 19750097, то так делать везде, все пересоздания курсоров привязанных к комбо обрамляй
thisform.Combo.RowSource=''
SELECT ... INTO CURSOR MyCursor
thisform.Combo.RowSource='MyCursor'

Выполняя SELECT ... INTO CURSOR MyCursor ты создаешь новый одноименный курсор и закрываешь старый.
Похоже что в некоторых ситуациях фокс не может корректно обработать эту подмену курсора и сглючивает.
6 окт 16, 13:26    [19750290]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
правильный проходящий.
Guest
Dima T
Объяснять толком ты не умеешь, тепатов тут нет, ХЗ что ты счел неважным и не сказал, что у тебя там понаписано кроме того что сюда попало.
Ага, вон про код, выполняемый при нажатии кнопки "Сбросить фильтры" умолчал, а там опять идет до боли знакомое
SELECT proj33.* ;
FROM proj33;
INTO cursor cgr1 READWRITE

Повбывав бы...
6 окт 16, 14:06    [19750511]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
правильный проходящий.
Guest
starsoo
правильный проходящий.,

Основная задача-это получить рабочую программу с работающей сортировкой с кликом по хедерам и работающей фильтрацией с помощью комбобоксов
Потрясающе информативно! Главное, сразу стали известны и понятны все условия фильтрации во всех таблицах и комбобоксах!
6 окт 16, 14:09    [19750537]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
starsoo
Member

Откуда:
Сообщений: 59
Dima T, Т.е допустим вот для этих трех строк
SELECT * FROM proj33 WHERE proj33.codisp in (SELECT codvuz FROM vuz WHERE z2=thisform.cBz2.Value) INTO cursor cgr1 readwrite
		SELECT DISTINCT oblname FROM vuz WHERE z2=thisform.cBz2.Value INTO CURSOR cb2 readwrite
		SELECT DISTINCT city FROM vuz WHERE z2=thisform.cBz2.Value INTO CURSOR cb3 readwrite

я для каждой строки должен написать такую конструкцию?
6 окт 16, 14:12    [19750565]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
starsoo
Member

Откуда:
Сообщений: 59
starsoo,

thisform.Combo.RowSource=''
SELECT ... INTO CURSOR MyCursor
thisform.Combo.RowSource='MyCursor'
такую.
6 окт 16, 14:17    [19750595]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
Dima T
Member

Откуда:
Сообщений: 15298
starsoo
Dima T, Т.е допустим вот для этих трех строк
SELECT * FROM proj33 WHERE proj33.codisp in (SELECT codvuz FROM vuz WHERE z2=thisform.cBz2.Value) INTO cursor cgr1 readwrite
		SELECT DISTINCT oblname FROM vuz WHERE z2=thisform.cBz2.Value INTO CURSOR cb2 readwrite
		SELECT DISTINCT city FROM vuz WHERE z2=thisform.cBz2.Value INTO CURSOR cb3 readwrite

я для каждой строки должен написать такую конструкцию?

Для каждой.
6 окт 16, 14:25    [19750660]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
правильный проходящий.
Guest
starsoo
starsoo,

thisform.Combo.RowSource=''
SELECT ... INTO CURSOR MyCursor
thisform.Combo.RowSource='MyCursor'
такую.
НЕТ, здесь тоже не надо перезаполнять источник данных, теперь уже источник данных комбобокса.
В какой уже раз - все курсоры (ВСЕ!, Карл, ВСЕ!) должны создаваться 1(ОДИН! и только ОДИН!) раз в LOAD формы. И больше не пересоздаваться.
6 окт 16, 14:27    [19750669]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
starsoo
Member

Откуда:
Сообщений: 59
Dima T,

такая конструкция должна получиться?
IF thisform.CBZ2.ListIndex >0
	thisform.cbz2.RowSource=''
		SELECT * FROM proj33 WHERE proj33.codisp in (SELECT codvuz FROM vuz WHERE z2=thisform.cBz2.Value) INTO cursor cgr1 readwrite
		thisform.Combo.RowSource='cgr1'
		SELECT DISTINCT oblname FROM vuz WHERE z2=thisform.cBz2.Value INTO CURSOR cb2 readwrite
		thisform.Combo.RowSource='cb2'
		SELECT DISTINCT city FROM vuz WHERE z2=thisform.cBz2.Value INTO CURSOR cb3 readwrite
		thisform.Combo.RowSource='cb3'
	Else
6 окт 16, 15:22    [19751010]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
starsoo
Member

Откуда:
Сообщений: 59
Вот код для 1го комбо
+
	IF thisform.CBZ2.ListIndex >0
	thisform.cbz2.RowSource=''
		SELECT * FROM proj33 WHERE proj33.codisp in (SELECT codvuz FROM vuz WHERE z2=thisform.cBz2.Value) INTO cursor cgr1 readwrite
		thisform.cbz2.RowSource='cgr1'
		SELECT DISTINCT oblname FROM vuz WHERE z2=thisform.cBz2.Value INTO CURSOR cb2 readwrite
		thisform.cbz2.RowSource='cb2'
		SELECT DISTINCT city FROM vuz WHERE z2=thisform.cBz2.Value INTO CURSOR cb3 readwrite
		thisform.cbz2.RowSource='cb3'
	Else
	If thisform.CBCity.ListIndex >0
	thisform.cbcity.RowSource=''
		SELECT * FROM proj33 WHERE proj33.codisp in (SELECT codvuz FROM vuz WHERE city=thisform.cBcity.Value) INTO cursor cgr1 readwrite
		thisform.cbcity.RowSource='cgr1'
		SELECT DISTINCT oblname FROM vuz WHERE city=thisform.cBcity.Value INTO CURSOR cb2 readwrite
		thisform.cbcity.RowSource='cb2'
		SELECT DISTINCT z2 FROM vuz WHERE city=thisform.cBcity.Value INTO CURSOR cb4 readwrite
		thisform.cbcity.RowSource='cb4'
	else
	If thisform.CBOblname.ListIndex >0
	thisform.CBOblname.RowSource=''
		SELECT * FROM proj33 WHERE proj33.codisp in (SELECT codvuz FROM vuz WHERE oblname=thisform.cBoblname.Value) INTO cursor cgr1 readwrite
			hisform.CBOblname.RowSource='cgr1'
		SELECT DISTINCT city FROM vuz WHERE oblname=thisform.CBOblname.Value INTO CURSOR cb3 readwrite
			thisform.CBOblname.RowSource='cb3'
		SELECT DISTINCT z2 FROM vuz WHERE oblname=thisform.CBOblname.Value INTO CURSOR cb4 readwrite
				thisform.CBOblname.RowSource='cb4'
	else
	IF thisform.CBRegion.ListIndex >0	
	thisform.CBRegion.RowSource=''	
			SELECT * FROM proj33 WHERE proj33.codisp in (SELECT codvuz FROM vuz WHERE region=thisform.cBRegion.Value) INTO cursor cgr1 readwrite
				thisform.CBRegion.RowSource='cgr1'	
			SELECT DISTINCT oblname FROM vuz WHERE region=thisform.CBRegion.Value INTO CURSOR cb2 readwrite
				thisform.CBRegion.RowSource='cb2'	
			SELECT DISTINCT city FROM vuz WHERE region=thisform.CBRegion.Value INTO CURSOR cb3 readwrite
				thisform.CBRegion.RowSource='cb3'	
			SELECT DISTINCT z2 FROM vuz WHERE region=thisform.CBRegion.Value INTO CURSOR cb4 readwrite
				thisform.CBRegion.RowSource='cb4'	

			
	ENDIF
	ENDIF
	endif 
	ENDIF
6 окт 16, 15:27    [19751054]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
правильный проходящий.
Guest
starsoo
Вот код для 1го комбо
У нас теперь есть твой код, зачем здесь эти портянки? Что нам этим сообщить хочешь?
6 окт 16, 15:40    [19751162]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
starsoo
Member

Откуда:
Сообщений: 59
правильный проходящий.,

Хочу узнать правильно ли я преобразовал его
6 окт 16, 15:55    [19751290]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
Dima T
Member

Откуда:
Сообщений: 15298
starsoo
Dima T,

такая конструкция должна получиться?

НЕТ. Перед селектом надо убрать RowSource у того комбо, который использует этот курсор, затем вернуть. И так с каждым комбо.
		thisform.cboblname.RowSource=''
		SELECT DISTINCT oblname FROM vuz WHERE z2=thisform.cBz2.Value INTO CURSOR cb2 readwrite
		thisform.cboblname.RowSource='cb2'

		thisform.cbCity.RowSource=''
		SELECT DISTINCT city FROM vuz WHERE z2=thisform.cBz2.Value INTO CURSOR cb3 readwrite
		thisform.cbCity.RowSource='cb3'
6 окт 16, 16:00    [19751333]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
Dima T
Member

Откуда:
Сообщений: 15298
По хорошему надо SET FILTER использовать.
Примерно так: делаешь метод SetFilter() и вызываешь его из каждого комбо в InteractiveChange()
+ код
в Init()
SELECT DISTINCT region FROM vuz INTO CURSOR cb1 READWRITE nofilter
thisform.CBRegion.RowSource='cb1'

SELECT DISTINCT oblname, region FROM vuz INTO CURSOR cb2 READWRITE nofilter
thisform.CBOblname.RowSource='cb2'

SELECT DISTINCT city, oblname, region FROM vuz INTO CURSOR cb3 READWRITE nofilter
thisform.CBCity.RowSource='cb3'

В SetFilter()
DO CASE
	CASE !EMPTY(ThisForm.cboblname.Value)
		* Фильтр по области
		SET FILTER TO cb3.oblname = cb2.oblname IN cb3
	
	CASE !EMPTY(ThisForm.cBRegion.Value)
		* Фильтр по регионам
		SET FILTER TO cb2.region = cb1.region IN cb2
		SET FILTER TO cb3.region = cb1.region IN cb3
	
	OTHERWISE
		* нет фильтра
		SET FILTER TO IN cb2
		SET FILTER TO IN cb3
ENDCASE

остальные таблицы добавь по аналогии
6 окт 16, 16:17    [19751474]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
starsoo
Member

Откуда:
Сообщений: 59
А по поводу задания по фильтрам: есть таблица vuz.dbf, собственно там вся информация по вузам, где находится, какой профиль, сокращенное название и тд. И 2ая таблица proj33.dbf в ней скажем так инфомрация по финансированию этих вузов. Таблицы могут быть связаны полями proj33.codisp и vuz.codvuz. На форме nir.scx каждый комбо соответствует своему полю из таблицы vuz. Допустим я выбираю на форме nir в комбо фед округов "центральный" и он мне должен отобразить в гриде информацию по финансам вузов, которые находятся в центральном фед округе. В свою очередь остальные 3 комбобокса должны подстроиться под 1ый, т.е должны содержать информацию центрального фед округа(т.е все комбо должны быть связаны между собой)
6 окт 16, 16:33    [19751630]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
Dima T
Member

Откуда:
Сообщений: 15298
В гриде у тебя курсор cgr1, добавь туда регион, город, область и фильтруй cgr1 по этим полям точно так же.
SELECT proj33.*, vuz.region, vuz.oblname ... ;
   FROM proj33 join vuz on proj33.codisp = vuz.codvuz;
   INTO cursor cgr1 readwrite

Только гриду надо будет Refesh() вызвать чтобы он перерисовался.

Навигацию пропиши в InteractiveChange(). Например CBOblname.InteractiveChange()
ThisForm.SetFilter()
thisform.CBRegion.Value = cb2.region && Устанавливаем регион выбранной области
thisform.CBCity.Value = '' && Убираем ранее выбранный город
6 окт 16, 16:54    [19751780]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
правильный проходящий.
Guest
Dima T
По хорошему надо SET FILTER использовать.
Не надо.
Если в Инит формы записать (не забыв вычистить load jn всех упоминаний эоб этих курсорах)

With This
	.CBRegion.RowSource='cb1'
	.CBOblname.RowSource='Select Distinct oblname From vuz Where Region=Thisform.CBRegion.Value Or Empty(Thisform.CBRegion.Value) Into Cursor cb2'
	.CBOblname.RowSourceType = 3 
	.CBCity.RowSource='Select Distinct city From vuz Where OblName=Thisform.CBOblname.Value Or Empty(Thisform.CBOblname.Value) Into Cursor cb3'
	.CBCity.RowSourceType = 3 
	.CBZ2.RowSource='Select Distinct z2 From vuz Where City=Thisform.CBCity.Value Or Empty(Thisform.CBCity.Value) Into Cursor cb4'
	.CBCity.RowSourceType = 3 
endwith

, то в любимых InteractiveChange комбобоксов надо всё выкинуть и вписать
with Thisform
  .CBOblname.Requery()
  .CBCity.Requery()
  .CBZ2.Requery()
endwith

И вуа ля, значения комбобоксов фильтруются.
Код кнопки "Сбросить фильтры" превращается в
With Thisform
  Store -1 To .cbCity.ListIndex, .cbregion.ListIndex, .cboblname.ListIndex, .cbz2.ListIndex
  .cboblname.Requery()
  .cbCity.Requery()
  .cbz2.Requery()
Endwith

Фильрация любимого cgr1 таким образом не сработает ибо у грида нет метода requery().

Сейчас немного освобожусь и нарисую курсорадаптер для него.
6 окт 16, 16:58    [19751804]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
Dima T
Member

Откуда:
Сообщений: 15298
правильный проходящий.
Dima T
По хорошему надо SET FILTER использовать.
Не надо.

Надо. При 64-128 Мб оперативки на борту и тормозным HDD я бы с тобой согласился, но на современных компах, где браузер безбожно тормозит без свободного гига оперативки - не соглашусь. Этот гиг есть практически везде и грех им не пользоваться.

SET FILTER по курсору и Requery() к исходной таблице стоят по-разному. Если курсор целиком живет в памяти, то скорость доступа 3-5 Гб/сек, а если таблица где-то в сети, и еще как share открыта, то можно раз в 100-500 медленнее получить данные. И потом SET FILTER это отложенное выполнение, не ткнули в комбо - ничего не отработало, а твои Requery() отработают каждый раз.
6 окт 16, 18:09    [19752203]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
starsoo
Member

Откуда:
Сообщений: 59
правильный проходящий.,

Вы сделаете?
6 окт 16, 20:44    [19752693]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
правильный проходящий.
Guest
starsoo
правильный проходящий.,

Вы сделаете?
Сделал. Но вылез один редкий глюк грида. И вот хочу вашу формочку использовать для демонстрации народу сего глюка и совместного поиска обхода этого глюка.
Поехали на фоксклуб.
7 окт 16, 14:50    [19755799]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
правильный проходящий.
Guest
starsoo,
нв фоксклубе ssa создал новую тему Некоторые особенности грида... . В ней выложена ваша форма и ваши порезанные данные (их было слишком много :) )
Можете взять оттуда форму и посмотреть как все работает. При этом надо учесть все, что написано в той теме про глюк грида.
7 окт 16, 15:53    [19756267]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
starsoo
Member

Откуда:
Сообщений: 59
правильный проходящий.,

Да, я заметил уже
7 окт 16, 16:05    [19756327]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
starsoo
Member

Откуда:
Сообщений: 59
А порезали данные, в смысле просто удалили часть записей из табилцы proj33?
7 окт 16, 16:07    [19756343]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
Dima T
Member

Откуда:
Сообщений: 15298
Грид странная штука. После обновления курсорадаптера гриду Refresh() надо делать.
7 окт 16, 16:07    [19756344]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с сортировкой  [new]
правильный проходящий.
Guest
starsoo
А порезали данные, в смысле просто удалили часть записей из табилцы proj33?
Из обоих.
7 окт 16, 16:13    [19756371]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / FoxPro, Visual FoxPro Ответить