Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос-корпуса / 4 сообщений из 4, страница 1 из 1
18.02.2009, 16:49
    #35825267
student09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос-корпуса
Доброго времени суток!
есть такие данные:
Код: plaintext
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.
Street            House    Build	flat
московская	230		143
Московская	230	3	1
московская	230		1
московская	230		1
московская	230		1
московская	230		1
Московская	230	3	2
Московская	230		2
Московская	230		2
Московская	230	4	3
Московская	230		3
Московская	230		3
Московская	230		3
Московская	234	А1	3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234	А1	3
Московская	234	А2	3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234		3
московская	234	А2	3
и есть пустые корпуса. ЕСЛИ копус пустой, а перед ним кпус НЕ пусто и одинаковый адрес(улица, дом, квартира) то корпус равен предыдущему корпусу...такая вот фигня...
пробовал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Go top
Scan
If not empty(build)
Cbuild=build
Chouse=house
С flat=flat
Cstreet=street
Go (recno()+ 1 )
If alltrim(house)==alltrim(chouse) and alltrim(flat)==alltrim(cflat) and len(alltrim(build))= 0  and alltrim(street)==alltrim(cstreet)
Replace build with alltrim(cbuild)
Endif
endif
endscan


но каждый раз Go (recno()+1) нужно повышать
помогите пожалуйста сделать правильно.
...
Рейтинг: 0 / 0
18.02.2009, 17:34
    #35825434
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос-корпуса
Да, уж.

вместо Go (recno()+1) логичнее использовать skip, а так как идет тупой скан, то после всех проверок (перед строкой endscan) надо сделать skip-1

При этом надо самостоятельно проверять, что после skip мы не ушли за последнюю запись


Вот так мне кажется более логично. Здесь нет прыжков вперед-назад по таблице. Оно понятнее и быстрее отработает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CPredbuild=''
Scan all

	Chouse=house
	Ñflat=flat
	Cstreet=street

	IF NOT EMPTY(CPredbuild) AND alltrim(house)==alltrim(chouse) and alltrim(flat)==alltrim(cflat) and EMPTY(build) AND alltrim(street)==alltrim(cstreet)
		Replace build with alltrim(CPredbuild)
	ELSE
		CPredbuild=build
	ENDIF

ENDSCAN
...
Рейтинг: 0 / 0
18.02.2009, 17:39
    #35825459
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос-корпуса
Go top
do while !eof()

If not empty(build)
Cbuild=build
Chouse=alltrim(house)
Сflat=alltrim(flat)
Cstreet=alltrim(street)
else
If alltrim(house)==chouse and alltrim(flat)==cflat and alltrim(street)==cstreet
Replace build with alltrim(cbuild)
Endif
endif
skip
enddo
...
Рейтинг: 0 / 0
19.02.2009, 00:47
    #35826051
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос-корпуса
Можно еще "выпендриться", дважды открыв одну и ту же таблицу в разных рабочих областях

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
USE MyTab in  0 
USE MyTab in  0  AGAIN ALIAS MyTabFull

select MyTab
SCAN FOR empty(Build) AND Recno()> 1 
	* Переходим на предшествующую запись в копии таблицы
	GO (Recno("MyTab")- 1 ) IN MyTabFull

	* Если запись в копии таблицы удовлетворяет нужным условиям
	* модифицируем содержимое
	IF 	empty(MyTabFull.Build) = .F. and ;
		alltrim(house) == alltrim(MyTabFull.house) and ;
		alltrim(flat) == alltrim(MyTabFull.flat) and ;
		alltrim(street) == alltrim(MyTabFull.street)

		REPLACE Build WITH MyTabFull.Build
	ENDIF
ENDSCAN
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос-корпуса / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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