26.05.2006, 19:57 | #1 |
Участник
|
OR-запрос выдает ошибку
Делаю аналог Directory для добавления товара в заказ.
Сначала выбирается Товар (ItemID из InventTable) затем выбирается склад-ячейка (InventDimID из InventDim, связанный с InventSum) Затем мне необходимо отобразить в списке выбранные товары в разрезе cкладов и ячеек. То есть, как я понимаю, нужен запрос связывающий таблицы InventSum и InventDim, и имеющий условие (ItemID=A AND InventDim=B) OR (ItemID=C AND InventDim=D) и так далее.. Почитал, как добавляется такой Range. Сделал в цикле так: Код: AddRange("InventDim", "InventDimID", "(InventDim.InventDimID='" + InventID + "') AND(InventSum.ItemId='" + ItemID + "')"); При этом получается такой запрос SELECT ItemId, ItemName FROM InventSum JOIN inventDimId, InventLocationId, wMSLocationId FROM InventDim WHERE InventSum.InventDimId = InventDim.inventDimId AND (((InventDim.InventDimID='00000007_089')AND(InventSum.ItemId='000000004')) OR ((InventDim.InventDimID='00000008_089')AND(InventSum.ItemId='000000004'))) Объясните плиз, в чём проблема? И правильно ли я понимаю назначение этих таблиц? |
|
27.05.2006, 01:09 | #2 |
Участник
|
Ошибку вы получаете, насколько я понял - при выполнении запроса?
Честно говоря, мало информации, чтобы что-то посоветовать. Но что сразу бросается в глаза, так это ваше InventDimID и AND В руководстве разработчика написано, что при использовании сложных запросов нужно все равно использовать языковые конструкции Х++ = то есть не OR а ||, и не AND - а && InventDimID = Может заменить его на InventDimId? Не уверен правда, что это даст эффект А вообще, обычно используются спец.методы типа tableStr, fieldStr - дабы не ошибится в написании - вот так: fieldStr(InventDim, InventDimId) |
|
27.05.2006, 11:10 | #3 |
Administrator
|
и еще вместо названия таблицы должно присутствовать имя датасорса: querybuilddatasource.name()
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: murad (1). |
28.05.2006, 13:38 | #4 |
Участник
|
Цитата:
Сообщение от kashperuk
Ошибку вы получаете, насколько я понял - при выполнении запроса?
Честно говоря, мало информации, чтобы что-то посоветовать. Но что сразу бросается в глаза, так это ваше InventDimID и AND В руководстве разработчика написано, что при использовании сложных запросов нужно все равно использовать языковые конструкции Х++ = то есть не OR а ||, и не AND - а && Цитата:
Сообщение от kashperuk
InventDimID = Может заменить его на InventDimId? Не уверен правда, что это даст эффект
Цитата:
Сообщение от kashperuk
А вообще, обычно используются спец.методы типа tableStr, fieldStr - дабы не ошибится в написании - вот так: fieldStr(InventDim, InventDimId)
|
|
28.05.2006, 13:44 | #5 |
Участник
|
Цитата:
Сообщение от sukhanchik
и еще вместо названия таблицы должно присутствовать имя датасорса: querybuilddatasource.name()
имя Datasource меняется с InventDim на InventDim_1, и Invent_Sum на InventSum_1. При этом сам запрос получается: SELECT ItemId, ItemName FROM InventSum JOIN inventDimId, InventLocationId, wMSLocationId FROM InventDim WHERE InventSum.InventDimId = InventDim.inventDimId AND (((InventDim_1.inventDimId='00000005_089')&&(InventSum_1.ItemId='000000005')) OR ((InventDim_1.inventDimId='00000003_089')&&(InventSum_1.ItemId='000000005'))) Ничего не понимаю , как в одном запросе система выставляет разные имена таблиц? После этого ругаться стал несколько иначе Query extended range failure: Syntax error near 27. at AxaptaCOMConnector.IAxaptaObject.Call |
|
28.05.2006, 15:01 | #6 |
Участник
|
Путем перебора было обнаружено, что
1) надо использовать синтаксис && и || (несмотря на то, что сама Axapta подставляет OR и AND) для формирования связей 2) надо использовать querybuilddatasource.name(), несмотря на то, что получаются разные имена таблиц в запросе 3) в условиях надо обязательно использовать двойные кавычки, а именно InventSum.ItemId="000000004", на одинарные ругается. Спасибо за помощь, но вот только подставить в такие условия LIKE так и не получилось, ругается на нехватающий parenthesis. |
|