07.03.2013, 14:31 | #1 |
Участник
|
Использование условия if и запроса к базе данных
Добрый день!
Подскажите, пожалуйста, искал по форуму и документации, не могу найти ошибку. Есть кусок кода для Axapta 4.0: if (salestable.salesid == (select salesid from salestable join wmspickingroute where salestable.salesid == wmspickingroute.transrefid && salestable.SalesStatus == salesstatus::completeleft &&( wmspickingroute.expeditionstatus == wmsexpeditionstatus::started || wmspickingroute.expeditionstatus == wmsexpeditionstatus::activated))) Компилятор выдает синтактическую ошибку, до этого работал только в sql, поэтому не могу понять что не правильно с синтаксисом. |
|
07.03.2013, 14:43 | #2 |
Программатор
|
X++: if (salestable.salesid == (select salesid from salestable join wmspickingroute where salestable.salesid == wmspickingroute.transrefid && salestable.SalesStatus == salesstatus::completeleft &&( wmspickingroute.expeditionstatus == wmsexpeditionstatus::started || wmspickingroute.expeditionstatus == wmsexpeditionstatus::activated))) |
|
07.03.2013, 14:46 | #3 |
Программатор
|
X++: if (salestable.salesid == (select salesid from salestable where salestable.SalesStatus == salesstatus::completeleft join wmspickingroute where wmspickingroute.transrefid == salestable.salesid && (wmspickingroute.expeditionstatus == wmsexpeditionstatus::started || wmspickingroute.expeditionstatus == wmsexpeditionstatus::activated)).SalesId) |
|
07.03.2013, 14:49 | #4 |
Программатор
|
salestable.salesid - наверно salestable должна быть по другому названа, акса может запарится
wmspickingroute.transrefid == salestable.salesid чего тут сравнивать |
|
07.03.2013, 14:49 | #5 |
Программатор
|
как то так
X++: if (localsalestable.salesid == (select salesid from salestable where salestable.SalesStatus == salesstatus::completeleft join wmspickingroute where wmspickingroute.transrefid == salestable.salesid && (wmspickingroute.expeditionstatus == wmsexpeditionstatus::started || wmspickingroute.expeditionstatus == wmsexpeditionstatus::activated)).SalesId) |
|
07.03.2013, 14:53 | #6 |
Участник
|
Спасибо, за помощь. То есть в аксапте не нужно указывать по какому полю связывать таблицы? достаточно что они указаны в источнике данных?
|
|
07.03.2013, 14:58 | #7 |
Программатор
|
не понял, вам нужно найти записи в wmspickingroute с нужным SalesId?
|
|
07.03.2013, 15:00 | #8 |
Программатор
|
X++: if (localsalestable.salesid == (select salesid from salestable where salestable.SalesStatus == salesstatus::completeleft join wmspickingroute where wmspickingroute.transrefid == localsalestable.salesid && (wmspickingroute.expeditionstatus == wmsexpeditionstatus::started || wmspickingroute.expeditionstatus == wmsexpeditionstatus::activated)).SalesId) |
|
07.03.2013, 15:02 | #9 |
Участник
|
Цитата:
Сообщение от kadet
Добрый день!
Подскажите, пожалуйста, искал по форуму и документации, не могу найти ошибку. Есть кусок кода для Axapta 4.0: if (salestable.salesid == (select salesid from salestable join wmspickingroute where salestable.salesid == wmspickingroute.transrefid && salestable.SalesStatus == salesstatus::completeleft &&( wmspickingroute.expeditionstatus == wmsexpeditionstatus::started || wmspickingroute.expeditionstatus == wmsexpeditionstatus::activated))) Компилятор выдает синтактическую ошибку, до этого работал только в sql, поэтому не могу понять что не правильно с синтаксисом. X++: select salesid from salestable join wmspickingroute where salestable.salesid == wmspickingroute.transrefid && salestable.SalesStatus == salesstatus::completeleft &&( wmspickingroute.expeditionstatus == wmsexpeditionstatus::started || wmspickingroute.expeditionstatus == wmsexpeditionstatus::activated); if (mySalesTable.SalesId == salesTable.SalesId) // Сравниваем 2 переменные указывающие на разные наборы данных { // some code }
__________________
// no comments |
|
07.03.2013, 15:18 | #10 |
Участник
|
Спасибо, получается данные полученные из выборки - это mysalsetable.salesid? или salestable.salesid?
|
|
07.03.2013, 15:25 | #11 |
Программатор
|
почему?
|
|
11.03.2013, 07:19 | #12 |
Участник
|
salestable.salesid
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: kadet (1). |
11.03.2013, 08:31 | #13 |
Участник
|
Проясню некоторые моменты.
kadet, пример использования ключевого слова select, который вы привели в своём вопросе, является сокращённой его версией. Пример полного синтаксиса привёл dech. В полном варианте select не возвращает выбранные значения во внешние переменные, а инициализирует поля табличных переменных, входящих в состав запроса. Эти табличные переменные необходимо заранее объявить. Для сокращённого синтаксиса (select ...).field объявлять табличные переменные не нужно (!), он работает с именами таблиц. Но в результате, при сокращённой форме записи, например, невозможно приджойнить таблицу саму к себе (альясы не предусмотренны), а в полной версии select для этого можно использовать две табличных переменных с разным именем но одного типа. Последний раз редактировалось S.Kuskov; 11.03.2013 в 09:39. |
|
|
За это сообщение автора поблагодарили: kadet (1). |
11.03.2013, 12:18 | #14 |
Участник
|
Спасибо, теперь понял почему, правда пошел другим путем, использовал joinChild().
Но теперь получется задвоение строк в Grid, т.к. использую OuterJoin. А мне нужен LEFT JOIN. Искал как обойти эту проблему - нашел только для Отчета, а данный код спользуется в Форме. Не подскажите, как сделать динимаческую группировку, или как решить эту проблему? |
|
11.03.2013, 12:30 | #15 |
Участник
|
Цитата:
Сообщение от kadet
Спасибо, теперь понял почему, правда пошел другим путем, использовал joinChild().
Но теперь получется задвоение строк в Grid, т.к. использую OuterJoin. А мне нужен LEFT JOIN. Искал как обойти эту проблему - нашел только для Отчета, а данный код спользуется в Форме. Не подскажите, как сделать динимаческую группировку, или как решить эту проблему? |
|