powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите ПОЖАЛУСТА, КТО МОЖЕТ...
5 сообщений из 5, страница 1 из 1
Помогите ПОЖАЛУСТА, КТО МОЖЕТ...
    #32517270
Avral
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
короче есть две таблицы, одна родительская и дочерняя...

в родительской хранятся уникальные записи , а в дочерней их причендалы
по ключу связываю две табицы и в результате из дочерней выхватывает две записи, хотя там находится 6,
почему незнаю, вот дистинг, найдите ошибку плиз...

m_mes="Ìàé"
m_god="2004"

SELECT 1
USE c:\Reckon_Beznal\dbfs\svod_glav.dbf EXCLUSIVE
set relation to
set order to nnn
SET FILTER TO mes=ALLTRIM(m_mes) AND god=ALLTRIM(m_god)

SELECT 2
USE c:\Reckon_Beznal\dbfs\p296.dbf EXCLUSIVE
SET ORDER TO nnn
SET FILTER TO mes=ALLTRIM(m_mes) AND god=ALLTRIM(m_god)

SELECT 3
USE c:\Reckon_Beznal\dbfs\table1.dbf EXCLUSIVE


SELECT 1
GO TOP
DO WHILE NOT EOF()

m_nnn=svod_glav.nnn

SELECT 2
LOCATE FOR p296.nnn=m_nnn
IF FOUND()=.T.
SELECT 3
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
ENDIF

SELECT 1
SKIP
IF EOF()
EXIT
ENDIF
ENDDO
...
Рейтинг: 0 / 0
Помогите ПОЖАЛУСТА, КТО МОЖЕТ...
    #32517376
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где у тебя сканирование по подчиненной таблице?

Ты просто находишь первую попавшуюся запись в подчиненной таблице и записываешь ее в итог. А сканируешь только главную таблицу. Нужно вложенное сканирование. Примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select svod_glav
SCAN
	select p296
	SCAN FOR p296.nnn=svod_glav.nnn
		INSERT INTO table1 (nnn, kod, naim, mes, god, p296) ;
			VALUES (p296.nnn, ALLTRIM(p296.kod), ALLTRIM(p296.naim), ;
			ALLTRIM(p296.mes), ALLTRIM(p296.god), p296.summe)
	ENDSCAN
ENDSCAN
...
Рейтинг: 0 / 0
Помогите ПОЖАЛУСТА, КТО МОЖЕТ...
    #32517417
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с Владимиром М. Есть только одно замечание:
А почему нельзя связать таблицы по set relation ? Почему надо использовать медленный locate , либо сканировать всю базу по scan ... for ... ?
Можно было бы сделать так:

select svod_glav
set relation to nnn into p296 additive

select svod_glav
go top

m_mes="Май"
m_god="2004"

do while not eof()

m_nnn=svod_glav.nnn

select p296
do while p296.nnn=m_nnn

if p296.mes=ALLTRIM(m_mes) AND p296.god=ALLTRIM(m_god)

INSERT INTO table1 (nnn, kod, naim, mes, god, p296) ;
VALUES (p296.nnn, ALLTRIM(p296.kod), ALLTRIM(p296.naim), ;
ALLTRIM(p296.mes), ALLTRIM(p296.god), p296.summe)

endif

select p296
skip
enddo

select svod_glav
skip
enddo
...
Рейтинг: 0 / 0
Помогите ПОЖАЛУСТА, КТО МОЖЕТ...
    #32517593
Sjfx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если тебе надо добавить в Table1 такие записи из p296,
что подходят по дате и имеют запись в svod_glav с тем же NNN,
то это делается одним оператором при установленном индексе в svod_glav
и текущем алиасе Table1:
Код: plaintext
1.
2.
3.
APPEND FROM p296 ;
  FIELDS nnn,kod,naim,mes,god,summa ;
  FOR mes = m_mes AND god = m_god AND SEEK(nnn,'svod_glav')
...
Рейтинг: 0 / 0
Помогите ПОЖАЛУСТА, КТО МОЖЕТ...
    #32517664
Sjfx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...при установленном индексе и фильтре в svod_glav ... и текущ...
P296 можно вообще не открывать, достат. указать full path.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите ПОЖАЛУСТА, КТО МОЖЕТ...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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