|
Ошибка "Target table is already engaged in a relation "
|
|||
---|---|---|---|
#18+
Делаю в командном окне 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 и вот в этой строке и выскакивает ошибка может примерно где искать... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2011, 13:42 |
|
Ошибка "Target table is already engaged in a relation "
|
|||
---|---|---|---|
#18+
Попробуй в командной окне так: 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2011, 13:54 |
|
Ошибка "Target table is already engaged in a relation "
|
|||
---|---|---|---|
#18+
переписал... та же фигня 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 ---<На этой строке выходит та же ошибка... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 05:19 |
|
Ошибка "Target table is already engaged in a relation "
|
|||
---|---|---|---|
#18+
если эти строки поменять 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 <---то на этой строке выходит ошибка... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 05:23 |
|
Ошибка "Target table is already engaged in a relation "
|
|||
---|---|---|---|
#18+
Выяснил, всё зависит от этой строчки.. select opr_podp SET RELATION TO "T"+STR(ISP_ID,7) INTO ispol ADDITIVE комментируешь, нормально, снимаешь комент, переходишь на таблицу SZ, ошибка.. осталось понять почему нельзя устанавливать релэйшин двум разным таблицам на одну и ту же таблицу... ну и обойти проблему... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 05:50 |
|
Ошибка "Target table is already engaged in a relation "
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 07:04 |
|
Ошибка "Target table is already engaged in a relation "
|
|||
---|---|---|---|
#18+
спасибо, скорей всего ссылаться на одну и ту же таблицу можно, но нельзя делать дочерними, ссылающиеся на одну и туже таблицу, одного и того же родителя..., :-), вроде так А relation это дело вкуса и привычки... я ими пользуюсь много лет и неудобств не испытываю ...:-)(вот только сейчас споткнулся, ну это ерунда откроем againом таблицу и всё Ok...) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 07:43 |
|
|
start [/forum/topic.php?fid=41&tid=1584423]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 285ms |
total: | 423ms |
0 / 0 |