Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нужна помощь ВладимирМ / 2 сообщений из 2, страница 1 из 1
17.05.2004, 05:56
    #32519568
Avral
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь ВладимирМ
Здраствуй ВладимирМ, вот опять мне нужна от тебя помощь или совет

дело происходит все там же

большое спасибо за пример

тема: ПомогитеПожалуста...

сделал все работает... вот только есть одно но.. потребовалось еще одну пачку ввести и т.е. надо выкачать данные из еще одной таблицы, но
чтобы получалось примерно так

таблица Table1 в которую выкачиваю данные выглядит так т.е 4 столба

kod naim p296 p400
1 Медведь 124 100
1 Медведь 1000 100
1 Медведь 1 100
1 Медведь 100
1 Медведь 100
2 Зигзак 22
2 Зикзак 22222

а должна выглядеть так

kod naim p296 p400
1 Медведь 124 100
1 Медведь 1000 200
1 Медведь 1 300
1 Медведь 0 400
1 Медведь 0 500
2 Зигзак 22
2 Зикзак 22222


вот кодик... я никак не могу добить его, слава богу что хоть вставлять начал, а то и этого не было....

&&
select svod_glav
SCAN
SELECT p296
SCAN FOR p296.nnn=svod_glav.nnn
SELECT table1
APPEND blank
replace table1.nnn WITH p296.nnn
replace table1.kod WITH ALLTRIM(p296.kod)
replace table1.naim WITH ALLTRIM(p296.naim)
replace table1.mes WITH ALLTRIM(p296.mes)
replace table1.god WITH ALLTRIM(p296.god)
replace table1.p296 WITH p296.summe
ENDSCAN

&& Здесь смотрю если в пачке р296 записей меньше чем в
&& в пачке р400. то вставляю ноликами недастающие
&& и затем записываю в поле table1.p400 суммы из пачки р400
SELECT p400
SCAN
SELECT table1
IF p400.kod=table1.kod AND p400.naim=table1.naim
FOR nn=1 TO 2
SELECT table1
GO top
APPEND blank
REPLACE table1.nnn WITH p400.nnn
replace table1.kod WITH ALLTRIM(p400.kod)
REPLACE table1.naim WITH ALLTRIM(p400.naim)
replace table1.mes WITH ALLTRIM(p400.mes)
REPLACE table1.god WITH ALLTRIM(p400.god)
replace table1.p400 WITH 000000000000000.00
ENDFOR

SCAN FOR p400.nnn=svod_glav.nnn
SELECT table1
SCAN
replace table1.p400 WITH p400.summe
ENDSCAN
ENDSCAN
ENDIF

ENDSCAN

ENDSCAN
...
Рейтинг: 0 / 0
17.05.2004, 10:21
    #32519766
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь ВладимирМ
В FoxPro существует такое понятие, как "указатель записи". Т.е. в каждый момент времени ты находишся на одной определенной записи таблицы. Поэтому, прежде чем сравнивать значение полей необходимо убедится, что ты находишся именно на той записи, на которой нужно.

Ты же сравниваешь ВСЕ записи из таблицы p400 с ПОСЛЕДНЕЙ записью из таблицы Table1. Дело в том, что команда APPEND BLANK добавляет новую запись в КОНЕЦ таблицы (разумеется, если по таблице Table1 нет главного индекса).

В данном случае необходимо организовать ОДНОВРЕМЕННОЕ сканирование по 2 таблицам. Это можно сделать примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select svod_glav
SCAN
	select p296
	LOCATE FOR p296.nnn=svod_glav.nnn
	select p400
	LOCATE FOR p400.nnn=svod_glav.nnn
	DO WHILE FOUND('p296') OR FOUND('p400')
		INSERT INTO table1 (nnn, kod, naim, mes, god, p296, p400) ;
			VALUES (p296.nnn, ALLTRIM(p296.kod), ALLTRIM(p296.naim), ;
			ALLTRIM(p296.mes), ALLTRIM(p296.god), p296.summe,p400.summe)

* Переходим к следующим записям по таблицам p296 и p400
	select p296
	CONTINUE
	select p400
	CONTINUE
	ENDDO
ENDSCAN

В FoxPro существует такое понятие, как "фиктивная запись". Это значит, что если указатель записи таблицы находится в положении EOF()=.T., то тем не менее можно прочитать значение "текущей" записи. В этом случае под "текущей", как раз-таки и понимается эта самая "фиктивная" запись. Значения всех полей этой фиктивной записи удовлетворяют условию Empty()=.T. т.е. в ней находятся "пустые" значения. Для числовых данных - это нули.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нужна помощь ВладимирМ / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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