|
26.11.2007, 13:38 | #1 |
Участник
|
Воскрешение мумии ... или давно забытая история про два Outer Join
Доброго всем времени суток!
Смостоятельно проковырявшись неделю с проблемой построения datasourc'а на 3-х таблицах с 2-я outer join'ми на Axapta 2.5 SP5 под MS SQL 2005 (в режиме совместимости) дошел до ручки решил обратиться за помощью. Прошу сильно не пинать, т.к. я всего лишь администратор. Предыстория такая. Руководством была поставлена задача мигрировать с Oracle на SQL. C переносом данных больших проблем не возникло, а вот на2-х формах, использующих в качестве datasourc'а 3 таблицы, связанные по outer join пока полный затык. Причину установил. Форум и FAQ на эту тему проштудировал. Существующий код под Oracle разобрал по косточкам. Но вот конкретный алгоритм решения задачи применительно к SQL в голове никак не хочет вырисовываться. Подскажите, ПЛЗ, в чем изюмика! |
|
28.11.2007, 14:48 | #2 |
Участник
|
Господа!
Ну снизойдите до прокаженного Аксаптой 2.5! Пересказываю свою проблему другими словами. Есть форма InventJournalTable. В её datasource у нас 3 таблицы: - InventJournalTable; - RContractTable; - CustTable. Далее у нас сделано так. В методе таблицы InventJournalTable объявляется первый datasource и его параметры (Dynalink и Range): qb = inventJournalTable_ds.query().dataSourceNo(1); В методе таблицы RContractTable объявляется второй datasource: qb = inventJournalTable_ds.query().dataSourceNo(2); InventJournalTable_ds.query().dataSourceNo(2).joinMode(JoinMode::OUTERJOIN); И, наконец, в методе таблицы CustTable объявляется третий datasource: qb = inventJournalTable_ds.query().dataSourceNo(3); InventJournalTable_ds.query().dataSourceNo(3).joinMode(JoinMode::OUTERJOIN); Когда приходит пора исполнить метод executeQuery таблицы InventJournalTable у меня собирается такая строка: SELECT * FROM InventJournalTable WHERE ((Posted = Нет)) AND ((JournalType = Спецификация)) OUTER JOIN * FROM RContractTable WHERE InventJournalTable.ExternalReferences[4]=RContractTable.RContractAccount OUTER JOIN * FROM CustTable WHERE InventJournalTable.ExternalReferences[1]=CustTable.AccountNum Все пушисто и красиво, но как только эта строка отправляеться в парсер AOS'а, последний тут же возвращает ошибку: "Невозможно выбрать запись в таблице 'Таблица клиентов' ('CustTable') Использован оператор объединения таблиц join, но выражение where не содержит связи между таблицами." Согласно2 и более OUTER JOIN к одному паренту и Данные в Grid из таблиц, связанных по Outer Join это промах мелкомягких, но вроде как есть обходной маневр построения таких datasourc'ов через query. В примерах, выложенных по ссылкам предлагается связывание по RecID, но для этих таблиц такой прием не проходит. Как можно связать эти таблицы чтобы запрос корректно отработал под MS SQL? |
|
28.11.2007, 16:14 | #3 |
Участник
|
В 3.0 и 4.0 та же проблема!
Исправлено в 5.0! |
|
28.11.2007, 17:12 | #4 |
Участник
|
|
|
Теги |
ax2.5, ax3.0, ax4.0 |
|
|