Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ошибка "Target table is already engaged in a relation " / 7 сообщений из 7, страница 1 из 1
19.04.2011, 13:42
    #37222571
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка "Target table is already engaged in a relation "
Делаю в командном окне VFP9, может уже затупилось зрение...
Таблицы все проиндексированы
CLOSE TABLES ALL
SELECT 0
USE dbfs\ispol SHARED ALIAS ispol
SET ORDER TO ISP_ID && IIF(DELETED().OR.EMPTY(ISP_ID),"F","T")+STR(ISP_ID,7)
SELECT 0
USE dbfs\sz_podp SHARED ALIAS sz_podp
SET ORDER TO SZ_ID && IIF(DELETED().OR.EMPTY(SZ_ID),"F","T")+STR(SZ_ID,7)
SET RELATION TO "T"+STR(ISP_ID,7) INTO ispol ADDITIVE
SELECT 0
USE dbfs\opr_podp SHARED ALIAS opr_podp
SET ORDER TO OPR_ID && IIF(DELETED().OR.EMPTY(OPR_ID),"F","T")+STR(OPR_ID,7)
SET RELATION TO "T"+STR(ISP_ID,7) INTO ispol ADDITIVE
SELECT 0
USE dbfs\opr SHARED ALIAS opr
SET ORDER TO SZ_ID && IIF(DELETED().OR.EMPTY(SZ_ID),"F","T")+STR(SZ_ID,7)
SELECT 0
USE dbfs\sz SHARED ALIAS sz
SET ORDER TO SZ_ID && IIF(DELETED().OR.EMPTY(SZ_ID),"F","T")+STR(SZ_ID,7)
SET RELATION TO "T"+STR(sz.sz_id,7) INTO sz_podp ADDITIVE
SET RELATION TO "T"+STR(sz.sz_id,7) INTO opr ADDITIVE
SELECT opr
SET RELATION TO "T"+STR(opr_id,7) INTO opr_podp ADDITIVE
GO TOP
SELECT sz
и вот в этой строке и выскакивает ошибка
может примерно где искать...
...
Рейтинг: 0 / 0
19.04.2011, 13:54
    #37222616
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка "Target table is already engaged in a relation "
Попробуй в командной окне так:

q1w1e1CLOSE TABLES ALL
USE dbfs\ispol IN 0 SHARED ALIAS ispol
SET ORDER TO ISP_ID
USE dbfs\sz_podp IN 0 SHARED ALIAS sz_podp
SET ORDER TO SZ_ID
SET RELATION TO "T"+STR(ISP_ID,7) INTO ispol ADDITIVE
USE dbfs\opr_podp IN 0 SHARED ALIAS opr_podp
SET ORDER TO OPR_ID
SET RELATION TO "T"+STR(ISP_ID,7) INTO ispol ADDITIVE
USE dbfs\opr IN 0 SHARED ALIAS opr
SET ORDER TO SZ_ID
SET RELATION TO "T"+STR(opr_id,7) INTO opr_podp ADDITIVE
USE dbfs\sz IN 0 SHARED ALIAS sz
SET ORDER TO SZ_ID
SET RELATION TO "T"+STR(sz.sz_id,7) INTO sz_podp ADDITIVE
SET RELATION TO "T"+STR(sz.sz_id,7) INTO opr ADDITIVE
SELECT sz
GO TOP
...
Рейтинг: 0 / 0
20.04.2011, 05:19
    #37223772
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка "Target table is already engaged in a relation "
переписал... та же фигня
CLOSE TABLES ALL
USE dbfs\ispol IN 0 SHARED ALIAS ispol ORDER ISP_ID
USE dbfs\sz_podp IN 0 SHARED ALIAS sz_podp ORDER SZ_ID
USE dbfs\opr_podp IN 0 SHARED ALIAS opr_podp ORDER OPR_ID
USE dbfs\opr IN 0 SHARED ALIAS opr ORDER SZ_ID
USE dbfs\sz IN 0 SHARED ALIAS sz ORDER SZ_ID
SELECT sz_podp
SET RELATION TO "T"+STR(ISP_ID,7) INTO ispol ADDITIVE
select opr_podp
SET RELATION TO "T"+STR(ISP_ID,7) INTO ispol ADDITIVE
select opr
SET RELATION TO "T"+STR(opr_id,7) INTO opr_podp ADDITIVE
select sz
SET RELATION TO "T"+STR(sz.sz_id,7) INTO sz_podp ADDITIVE
SET RELATION TO "T"+STR(sz.sz_id,7) INTO opr ADDITIVE ---<На этой строке выходит та же ошибка...
...
Рейтинг: 0 / 0
20.04.2011, 05:23
    #37223773
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка "Target table is already engaged in a relation "
если эти строки поменять
SET RELATION TO "T"+STR(sz.sz_id,7) INTO opr ADDITIVE
SET RELATION TO "T"+STR(sz.sz_id,7) INTO sz_podp ADDITIVE <---то на этой строке выходит ошибка...
...
Рейтинг: 0 / 0
20.04.2011, 05:50
    #37223779
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка "Target table is already engaged in a relation "
Выяснил, всё зависит от этой строчки..
select opr_podp
SET RELATION TO "T"+STR(ISP_ID,7) INTO ispol ADDITIVE
комментируешь, нормально, снимаешь комент, переходишь на таблицу SZ, ошибка..
осталось понять почему нельзя устанавливать релэйшин двум разным таблицам на одну и ту же таблицу... ну и обойти проблему...
...
Рейтинг: 0 / 0
20.04.2011, 07:04
    #37223791
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка "Target table is already engaged in a relation "
q1w1e1осталось понять почему нельзя устанавливать релэйшин двум разным таблицам на одну и ту же таблицу... ну и обойти проблему...
Вполне логично что ошибка происходит, хуже было бы если такое было возможным.
Связка по set relation означает что при перемещении по родительской таблице автоматом перемещается указатель текущей записи в дочерней.
Соответственно при наличии двух родительских указатель должен стоять одновременно на двух разных записях, что в принципе невозможно.
Зачем вообще тебе SET RELATION ? От него польза только в одном месте - если исходные таблицы в гриде показываешь, в остальных случаях можно без него обойтись.
При установленной SET RELATION надо следить чтобы текущий индекс не менялся, сменить его тоже нельзя.
Далеко не всегда нужно перемещение указателя в привязанной таблице, чаще это неважно, просто код выполняет некоторые бесполезные действия, а иногда это мешает и приходится изобретать обход этого эффекта.

Гораздо удобнее непосредственно перед расчетом установить все указатели в справочниках. Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
lcErr = ''
do case
   Case !IndexSeek(MyTable.nSpr1Id, .T., 'Spr1', 'nSpr1Id')
      lcErr = 'Отсутствует Spr1.nSpr1Id = ' + str(MyTable.nSpr1Id) 

   Case !IndexSeek(MyTable.nSpr2Id, .T., 'Spr2', 'nSpr2Id')
      lcErr = 'Отсутствует Spr2.nSpr2Id = ' + str(MyTable.nSpr2Id) 

   Case !IndexSeek(MyTable.nSpr3Id, .T., 'Spr3', 'nSpr3Id')
      lcErr = 'Отсутствует Spr3.nSpr3Id = ' + str(MyTable.nSpr3Id) 

   otherwise
     * Тут пишем полезный код, все указатели в справочниках установлены

endcase

if !empty(lcErr)
  ? 'Ошибка: ' + lcErr
endif
return empty(lcErr)
...
Рейтинг: 0 / 0
20.04.2011, 07:43
    #37223798
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка "Target table is already engaged in a relation "
спасибо, скорей всего ссылаться на одну и ту же таблицу можно, но нельзя делать дочерними, ссылающиеся на одну и туже таблицу, одного и того же родителя..., :-), вроде так
А relation это дело вкуса и привычки... я ими пользуюсь много лет и неудобств не испытываю ...:-)(вот только сейчас споткнулся, ну это ерунда откроем againом таблицу и всё Ok...)
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ошибка "Target table is already engaged in a relation " / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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