AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.04.2002, 18:49   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Запрос
Абстрактный вопрос с которым я столкнулся и который неожиданной вызвал у меня затруденение.

При удалении одной из строк заказа считать сумму оставшихся строк этого заказа. Я реализовал это так:

Дописал delete у SalesLine_ds (то есть того, который содержится в форме следующими строками):



st = SalesLine.SalesId;
print st;

t = (select * from SalesTable where SalesTable.SalesId == SalesLine.SalesId).RecId;
print t;

n = (select sum(LineAmount) from SalesLine where SalesLine.SalesID==
(select * from SalesTable where SalesTable.RecId==t).SalesId).LineAmount;

print n;


Это работает. Но зачем такая сложность. Неужели нельзя проще ?????

Очень хотелось сделать так:

n = (select sum(LineAmount) from SalesLine where SalesLine.SalesId==st).LineAmount;

Но Аксапта ругается, что в SQL выражениях нельзя осуществлять сравнение со строками. Что это за фигня ? Как нельзя ? И это при том, что почте все ключевые поля наследованы от строк !!!!!!! Может быть кто-нибудь сможет мне объяснить - в чем здесь смысл ????

А выражение

n = (select sum(LineAmount) from SalesLine where SalesLine.SalesId==SalesLine.SalesId).LineAmount;

естественно считает сумму по всем строкам всех заказов.
Старый 22.04.2002, 19:30   #2  
PlasticinE is offline
PlasticinE
Смотрящий поверх деревьев (Варварский отморозок)
 
243 / 10 (1) +
Регистрация: 06.12.2001
<Зохавано мудератором>
за неуплату
__________________
It's a dirty job, but someone's got to do it. So?
Старый 22.04.2002, 21:05   #3  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Всем привет!

В дополнение к словам PlasticinE: можно также сравнивать со строковой константой (в данном случае не подходит ) и со строковой переменной с заданным при ее объявлении размером, например: str 100 st;

Цитата:
А выражение

n = (select sum(LineAmount) from SalesLine where SalesLine.SalesId==SalesLine.SalesId).LineAmount;

естественно считает сумму по всем строкам всех заказов.
А здесь можно использовать переменную типа SalesLine:

SalesLine sl;
;
select sum(LineAmount) from sl where sl .SalesId==SalesLine.SalesId;
print sl.LineAmount;
Старый 23.04.2002, 11:30   #4  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
PlasticinE
Попробуй сказать ему :
SalesId st;
Спасибо. Это действительно помогло. То есть сравнивать со строками нельзя, а с типами унаследованными от строки можно. Странно, но ладно...

Цитата:
Dron AKA andy
А здесь можно использовать переменную типа SalesLine:
SalesLine sl;
;
select sum(LineAmount) from sl where sl .SalesId==SalesLine.SalesId;
print sl.LineAmount;
Да действительно это работает. А ранее я пробовал так:

print (select sum(LineAmount) from sl where sl .SalesId==SalesLine.SalesId).LineAmount;

А вот это уже не работает !!!!! Курсор становится на sl и говорит, что таблица не существует. Почему ????
Старый 23.04.2002, 12:05   #5  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Я так понял (из опыта), что конструкция вида
variable = (select Table_name).Field_name;
т.е. когда сразу пытаешься получить значение поля из select`а, работает только для реальных названий таблиц из репозитария, а для переменных не работает.
Соответственно, для переменных пригодна конструкция
Table_name t;
;
select t;
variable = t.Field_name;
Старый 24.04.2002, 10:15   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Андре
...сравнивать со строками нельзя, а с типами унаследованными от строки можно. Странно, но ладно...
Почему странно?
строка типа str - это строка неопределенной длины.
В базе данных этому типу соответствует тип memo, а не str[xx]
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
передача параметров в запрос while select tolstjak DAX: Программирование 13 15.02.2009 19:39
Как собрать запрос? moid DAX: Программирование 11 02.07.2007 12:07
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52
Долго отрабатывает запрос по таблице InventItemLocation AlexeyBP DAX: Администрирование 1 30.05.2007 17:33
Не работает запрос на нескольких компаниях Bega DAX: Программирование 3 16.09.2005 10:21

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:10.