powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с сортировкой
25 сообщений из 70, страница 2 из 3
Проблема с сортировкой
    #39321847
starsoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Это на каком комбо?
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39321861
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что это? Если про это 19750097 , то так делать везде, все пересоздания курсоров привязанных к комбо обрамляй
Код: sql
1.
2.
3.
thisform.Combo.RowSource=''
SELECT ... INTO CURSOR MyCursor
thisform.Combo.RowSource='MyCursor'


Выполняя SELECT ... INTO CURSOR MyCursor ты создаешь новый одноименный курсор и закрываешь старый.
Похоже что в некоторых ситуациях фокс не может корректно обработать эту подмену курсора и сглючивает.
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39321906
Dima TОбъяснять толком ты не умеешь, тепатов тут нет, ХЗ что ты счел неважным и не сказал, что у тебя там понаписано кроме того что сюда попало.Ага, вон про код, выполняемый при нажатии кнопки "Сбросить фильтры" умолчал, а там опять идет до боли знакомое
Код: sql
1.
2.
3.
SELECT proj33.* ;
FROM proj33;
INTO cursor cgr1 READWRITE


Повбывав бы...
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39321917
starsooправильный проходящий.,

Основная задача-это получить рабочую программу с работающей сортировкой с кликом по хедерам и работающей фильтрацией с помощью комбобоксовПотрясающе информативно! Главное, сразу стали известны и понятны все условия фильтрации во всех таблицах и комбобоксах!
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39321921
starsoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, Т.е допустим вот для этих трех строк
Код: plsql
1.
2.
3.
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


я для каждой строки должен написать такую конструкцию?
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39321931
starsoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
starsoo,

thisform.Combo.RowSource=''
SELECT ... INTO CURSOR MyCursor
thisform.Combo.RowSource='MyCursor'
такую.
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39321945
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
starsooDima T, Т.е допустим вот для этих трех строк
Код: plsql
1.
2.
3.
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


я для каждой строки должен написать такую конструкцию?
Для каждой.
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39321949
starsoostarsoo,

thisform.Combo.RowSource=''
SELECT ... INTO CURSOR MyCursor
thisform.Combo.RowSource='MyCursor'
такую.НЕТ, здесь тоже не надо перезаполнять источник данных, теперь уже источник данных комбобокса.
В какой уже раз - все курсоры (ВСЕ!, Карл, ВСЕ!) должны создаваться 1(ОДИН! и только ОДИН!) раз в LOAD формы. И больше не пересоздаваться.
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322011
starsoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

такая конструкция должна получиться?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322022
starsoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот код для 1го комбо
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
	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

...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322034
starsooВот код для 1го комбо
У нас теперь есть твой код, зачем здесь эти портянки? Что нам этим сообщить хочешь?
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322059
starsoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
правильный проходящий.,

Хочу узнать правильно ли я преобразовал его
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322069
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
starsooDima T,

такая конструкция должна получиться?
НЕТ. Перед селектом надо убрать RowSource у того комбо, который использует этот курсор, затем вернуть. И так с каждым комбо.
Код: sql
1.
2.
3.
4.
5.
6.
7.
		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'
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322090
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По хорошему надо SET FILTER использовать.
Примерно так: делаешь метод SetFilter() и вызываешь его из каждого комбо в InteractiveChange()
кодв Init()
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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()
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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


остальные таблицы добавь по аналогии
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322113
starsoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А по поводу задания по фильтрам: есть таблица vuz.dbf, собственно там вся информация по вузам, где находится, какой профиль, сокращенное название и тд. И 2ая таблица proj33.dbf в ней скажем так инфомрация по финансированию этих вузов. Таблицы могут быть связаны полями proj33.codisp и vuz.codvuz. На форме nir.scx каждый комбо соответствует своему полю из таблицы vuz. Допустим я выбираю на форме nir в комбо фед округов "центральный" и он мне должен отобразить в гриде информацию по финансам вузов, которые находятся в центральном фед округе. В свою очередь остальные 3 комбобокса должны подстроиться под 1ый, т.е должны содержать информацию центрального фед округа(т.е все комбо должны быть связаны между собой)
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322146
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В гриде у тебя курсор cgr1, добавь туда регион, город, область и фильтруй cgr1 по этим полям точно так же.
Код: sql
1.
2.
3.
SELECT proj33.*, vuz.region, vuz.oblname ... ;
   FROM proj33 join vuz on proj33.codisp = vuz.codvuz;
   INTO cursor cgr1 readwrite


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

Навигацию пропиши в InteractiveChange(). Например CBOblname.InteractiveChange()
Код: sql
1.
2.
3.
ThisForm.SetFilter()
thisform.CBRegion.Value = cb2.region && Устанавливаем регион выбранной области
thisform.CBCity.Value = '' && Убираем ранее выбранный город
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322150
Dima TПо хорошему надо SET FILTER использовать. Не надо.
Если в Инит формы записать (не забыв вычистить load jn всех упоминаний эоб этих курсорах)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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 комбобоксов надо всё выкинуть и вписать
Код: sql
1.
2.
3.
4.
5.
with Thisform
  .CBOblname.Requery()
  .CBCity.Requery()
  .CBZ2.Requery()
endwith


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


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

Сейчас немного освобожусь и нарисую курсорадаптер для него.
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322223
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильный проходящий.Dima TПо хорошему надо SET FILTER использовать. Не надо.
Надо. При 64-128 Мб оперативки на борту и тормозным HDD я бы с тобой согласился, но на современных компах, где браузер безбожно тормозит без свободного гига оперативки - не соглашусь. Этот гиг есть практически везде и грех им не пользоваться.

SET FILTER по курсору и Requery() к исходной таблице стоят по-разному. Если курсор целиком живет в памяти, то скорость доступа 3-5 Гб/сек, а если таблица где-то в сети, и еще как share открыта, то можно раз в 100-500 медленнее получить данные. И потом SET FILTER это отложенное выполнение, не ткнули в комбо - ничего не отработало, а твои Requery() отработают каждый раз.
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322301
starsoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
правильный проходящий.,

Вы сделаете?
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322844
starsooправильный проходящий.,

Вы сделаете?Сделал. Но вылез один редкий глюк грида. И вот хочу вашу формочку использовать для демонстрации народу сего глюка и совместного поиска обхода этого глюка.
Поехали на фоксклуб.
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322906
starsoo,
нв фоксклубе ssa создал новую тему Некоторые особенности грида... . В ней выложена ваша форма и ваши порезанные данные (их было слишком много :) )
Можете взять оттуда форму и посмотреть как все работает. При этом надо учесть все, что написано в той теме про глюк грида.
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322918
starsoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
правильный проходящий.,

Да, я заметил уже
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322920
starsoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А порезали данные, в смысле просто удалили часть записей из табилцы proj33?
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322921
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грид странная штука. После обновления курсорадаптера гриду Refresh() надо делать.
...
Рейтинг: 0 / 0
Проблема с сортировкой
    #39322925
starsooА порезали данные, в смысле просто удалили часть записей из табилцы proj33?Из обоих.
...
Рейтинг: 0 / 0
25 сообщений из 70, страница 2 из 3
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с сортировкой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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