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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.08.2010, 20:31   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
AX2009 RU5: ADORecordSet, вопрос на 16 баллов
Коллеги,

Кто сможет запустить отработку класса ССADORecordSet на сервере?
В 3-ке работает без проблем - как на сервере, так и на клиенте.
В 2009 на клиенте отрабатывает, на сервере - стабильно валит АОС.

X++:
static void ccADOConnection(Args _args)
{

    CCADOConnection     ccADOConnection;
    CCADOCommand        ccADOCommand;
    CCAdoRecordSet      ccADORecordSet;
    CCADOFields         ccADOFields;
    CCADOField          ccADOField;
    str                 sqlStr;
    str                 connectionString;
    counter             total;
    ;

    connectionString = "Provider=SqlOleDb; Server=axaptaDev; Database=Develop; User ID=Test; Password=Test";

    new InteropPermission(InteropKind::ComInterop).assert();    

    ccADOConnection = new CCADOConnection();
    ccADOConnection.connectionTimeout(2000);
    ccADOConnection.commandTimeout(60000);
    ccADOConnection.open(connectionString);

    if (ccADOConnection)
    {
        ccADOCommand = new CCADOCommand();
        ccADOCommand.activeConnection(ccADOConnection);

        sqlStr =  'SELECT * From SMS';

        ccADORecordSet = New CCAdoRecordSet();
        ccADORecordSet.open(sqlStr, ccADOConnection);
    }

    while (!ccADORecordSet.EOF())
    {
        total ++;

        ccADOFields = ccADORecordSet.fields();

        ccADOField  = ccADOFields.itemName('RowId');
        info(strFmt("%1", ccADOField.value()));

        ccADORecordSet.moveNext();

        if (total > 15)
            break;
    }
}
P.S. Не зависит, от версии SQL.
За это сообщение автора поблагодарили: Logger (3).
Старый 31.08.2010, 21:30   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Наверное, проблема в том, что все классы CCADO* имеют модификатор "Client".

Создайте серверные копии этих классов (не забудьте по InteropPermission при вызове new Com()) и используйте их при работе на сервере.
Все работает без проблем
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: lev (18), alek_frm (1), DSPIC (16).
Старый 31.08.2010, 22:30   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,325 / 3548 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
не забудьте по InteropPermission при вызове new Com()
А InteropPermission работает на сервере?
__________________
Возможно сделать все. Вопрос времени
Старый 31.08.2010, 22:34   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Так он для сервера и предназначен
Secured APIs
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: sukhanchik (4), IvanS (1).
Старый 01.09.2010, 17:31   #5  
imir is offline
imir
Участник
 
159 / 161 (6) ++++++
Регистрация: 28.05.2010
Недавно тоже столкнулся, вот небольшой фак на пямять.
Что нужно:

1)
Классы
CCADO*

Поменять на called from

2) использовать
new InteropPermission(InteropKind::ComInterop).assert();

3) Если у вас 64 битный аос - объект не создастся - проблема с дровами под x64 (как я понял)
я вышел из положения поменяв драйвер

connection = new CCADOConnection();

constr = new SqlSystem().loginConnectString();
constr = strreplace(constr, 'Driver={SQL Native Client}', 'Provider=SQLNCLI10');

connection.open(constr);
За это сообщение автора поблагодарили: Logger (1), alek_frm (1), DSPIC (16).
Старый 01.09.2010, 18:15   #6  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Круть, работает. Спасибо! Проблема была в том, что поленился у всех CCADO* классов изменить тип запуска.

По поводу InteropPermission. Эту проверку на сервере можно отключить путём добавления ключей "-console 01 -caslevel=[enable/disable/trace]" в параметры запуска АОС'а, после чего оборачивать код в InteropPermission(InteropKind::XXXX).assert() нет необходимости.

Спасибо вам, добрые люди!
Старый 01.09.2010, 18:19   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
По ссылке, которую я провел, это выделено желтым цветом
__________________
Axapta v.3.0 sp5 kr2
Теги
ado, ccadorecordset, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по обновлению на SP6 wedmak_dk DAX: Администрирование 5 05.07.2010 11:19
lcash: AX2009 Standard Demo Data Blog bot DAX Blogs 0 17.06.2010 09:05
Shekhar: Dynamics AX2009 : Standalone Installation on Vista with Role centres and workflow. Blog bot DAX Blogs 0 30.03.2010 15:05
ax2009 & SSRS kitty DAX: Программирование 6 02.04.2009 10:38
Вопрос по Проектам PSA DAX: Функционал 35 19.01.2007 22:26

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

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

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