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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.08.2004, 08:35   #1  
pdojn is offline
pdojn
Участник
 
50 / 12 (1) ++
Регистрация: 24.06.2004
Адрес: Москва
? Как переобразовать из SQL в X++?
Можно ли как-нибудь преобразовать следующие запросы из SQL в X++?
1) select SalesId from SalesLine where cast(ConfirmedDlv as int) - cast(createdDate as int) >= 1

2) select SalesId from SalesLine where convert(varchar(10),createdDate,103) = '25/07/2004'

3) select cast(count(RecId) as real)/7 as 'www' from SalesLine group by SalesId

4) select cast(ConfirmedDlv as int) - cast(createdDate as int) as 'www' from SalesLine
Старый 12.08.2004, 09:37   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
PHP код:
static void Job6(Args _args)
{
    
SalesLine  salesLine;
    ;
//1)
    
while select SalesId,ConfirmedDlv,createdDate
        from  SalesLine
        where SalesLine
.ConfirmedDlv SalesLine.createdDate
        
{
            
info(strfmt("%1",SalesLine.SalesId));
        }
//2)
    
while select SalesId
        from  SalesLine
        where SalesLine
.createdDate == str2date("25/07/2004",123)
        {
            
info(strfmt("%1",SalesLine.SalesId));
        }
//3)
    
select count(RecId)
        
from  SalesLine
        group by SalesId
;
            
info(strfmt("%1",SalesLine.RecId 7));
//4)
//   select cast(ConfirmedDlv as int) - cast(createdDate as int) as 'www' from SalesLine
// не могу понять смысл. Вы вычитаете одну дату от другой, не выбрав записи. Перибирайте все и делайте с ними, что хотите... хоть делите

С Уважением,
Георгий
Старый 12.08.2004, 09:39   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
1) В AXAPTA даты записываются в формате DATE, т.е. без времени. Только дата. Как следствие, прямое вычитание из одной даты другую даст количество дней между датами.

Конвертация в MS SQL DateTime в тип Integer приводит к отображению количества дней прошедших с 01.01.1900 до конвертируемой даты.

Следовательно, в AXAPTA вполне коректен запрос

select SalesId from SalesLine where ConfirmedDlv - createdDate >= 1

2) Константы типа Date в AXAPTA записываются через обратный слэш без кавычек

select SalesId from SalesLine where createdDate = 25\07\2004

3) В AXAPTA недопустимо в качестве аргумента функции аггрегации указывать что-либо, кроме имени поля. Т.е. придется поступить так:

select count(RecId) from SalesLine group by SalesId
www = salesLine.RecId/7

4) В AXAPTA недопустимо в качестве списка полей указывать что-либо кроме имен полей. Т.е. придется поступить так:

select ConfirmedDlv, createdDate from SalesLine
www = salesLine.ConfirmedDlv - salesLine.createdDate
Старый 12.08.2004, 10:56   #4  
pdojn is offline
pdojn
Участник
 
50 / 12 (1) ++
Регистрация: 24.06.2004
Адрес: Москва
На самом деле конечно же я упростил те запросы, которые написал.
По первому запросу:
Цитата:
Изначально опубликовано pdojn

1) select SalesId from SalesLine where cast(ConfirmedDlv as int) - cast(createdDate as int) >= 1
Зря написал единицу. Если ставим, допустим, 2, то
Цитата:
Изначально опубликовано George Nordic

//1)
while select SalesId,ConfirmedDlv,createdDate
from SalesLine
where SalesLine.ConfirmedDlv > SalesLine.createdDate
{
info(strfmt("%1",SalesLine.SalesId));
}
не проходит как и
Цитата:
Изначально опубликовано Владимир Максимов

Следовательно, в AXAPTA вполне коректен запрос
select SalesId from SalesLine where ConfirmedDlv - createdDate >= 1
с 2 вместо 1. Ошибка:
Невозможно выбрать запись в 'Строки заказа' ('SalesLine') Заказ: , .База данных SQL обнаружила ошибку.
Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near '='.
Оператор SQL: SELECT A.SALESID,A.RECID FROM SALESLINE A WHERE ((DATAAREAID=?) AND ((CONFIRMEDDLV-CREATEDDATE)>=1=?)) OPTION(FAST 9)
что и понятно ... в Аксапте не реализованы простейшие действия с Date.

По второму запросу:
... да ... просто)

По третьему и четвертому запросу:
хотелось узнать, можно ли объявить поле, не входящее в список полей указанной таблицы... Но видимо нельзя, что печально((
Старый 12.08.2004, 11:30   #5  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Не стоит печалиться: Oracle делает, в принципе, то же самое - перебирает все строки и делает над ними арифметические операции...

Хороший совет - выполняйте данные вычисления на сервере (пишите методы на таблицах или в server-классах). Если будете перетягивать всю таблицу на клиента для вычислений... Ой-ё.. А на серваке - должно жить. И резво.

Удачи!
Георгий.
Старый 12.08.2004, 11:34   #6  
pdojn is offline
pdojn
Участник
 
50 / 12 (1) ++
Регистрация: 24.06.2004
Адрес: Москва
Спасибо!

С уважением, Павел.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX Sustained Engineering: SQL Server 2005 sp3 & SQL Server 2008 with Dynamics AX Blog bot DAX Blogs 0 12.02.2009 06:08
Dynamics AX: SQL Sever 2008 - Performance with Dynamics AX 2009 - Resource Governor Blog bot DAX Blogs 0 23.01.2009 22:05
Dynamics AX: Dynamics AX 2009 & SQL Server 2008 Blog bot DAX Blogs 0 10.06.2008 21:08
Dynamics AX: SQL Server, Heart of Dynamics AX Blog bot DAX Blogs 0 13.07.2007 18:00
aEremenko: Диагностика проблем при установке Microsoft Dynamics Ax 4.0 на Microsoft SQL Server 2005 Blog bot DAX Blogs 0 28.10.2006 16:01

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:15.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.