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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.03.2021, 11:07   #1  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Ошибка при получении значения поля ADO Recordset
Есть отчет, старый, как... мамонт. Задача - переделать его на работу по новым, прогрессивным технологиям ))
Для этого надо получить значения из формируемого отчетом ADO Recordset и затолкать их в Map. Оно падает, говоря "неправильные типы аргументов в присвоении значения переменной"

Код, чтобы воспроизвести (выдрано с мясом из отчета, запрос изменен):

X++:
static void rvs_Job263(Args _args)

{
    COM                 rst;
    COM                 cnn;
    COM                 fields;
    COM                 field;

    SysSQLSystemInfo    sqlInfo         = SysSQLSystemInfo::construct();

    container           dataLine;
    Map                 dataMap;

    int                 dataRow;
    int                 dataCol;
    str                 axServerName    = sqlInfo.getLoginServer();
    str                 axDBName        = sqlInfo.getloginDatabase();
    str                 userId          = "bla-bla-bla";
    str                 userPassword    = "bla-bla-bla";
 
    str constr  =   "Provider=SQLOLEDB;"
                +   "Data Source="
                +   axServerName + ";"
                +   "Initial Catalog=" + axDBName + ";"
                +   "uid=" + userId + ";"
                +   "pwd=" + userPassword+";"
                +   "Persist Security Info=true;";

    str                 strSQL = 'select top(100) * from SalesTable';
    ;

    cnn = new COM('ADODB.Connection');
    cnn.CommandTimeout(3600);

    cnn.Open(constr);

    rst = new COM('ADODB.RecordSet');
    rst.Open(strSQL, cnn);

    fields  = rst.fields();

    dataMap = new Map(Types::Integer, Types::Container);

    while (! rst.EOF())
    {
        dataLine    = connull();

        for (dataCol = 0; dataCol < fields.count(); dataCol++)
        {
            field   = fields.item(dataCol);
 
            dataLine += field.value();   // Тут падаем
         }

        dataMap.insert(dataRow, dataLine);
    }

}
Что я делаю не так?
__________________
Best Regards,
Roman
Старый 08.03.2021, 12:42   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от RVS Посмотреть сообщение
X++:
dataLine += field.value();   // Тут падаем
dataLine - Аксаптовский конейнер.

field - это COM-объект
field.value() - возвращает объект

объект нельзя положить в контейнер. по определению

нужно:
* либо задействовать CLRInterop.getObjectForAnyType()
* либо каким-либо другим образом сериализовать field.value(). Например .ToString()
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 08.03.2021 в 12:44.
Старый 08.03.2021, 14:08   #3  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Спасибо. Вот так - работает:

X++:
dataLine += new CCADOField(fields.item(dataCol)).value();
__________________
Best Regards,
Roman
За это сообщение автора поблагодарили: mazzy (2), sukhanchik (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка при добавление нового поля источника данных в SSRS отчет Raven13 DAX: Программирование 5 09.02.2015 08:47
Сводная таблица на форме через ADO.Recordset refined DAX: Программирование 3 05.03.2011 12:25
ошибка update_recordset jaran DAX: Программирование 8 28.11.2008 18:48
Ошибка при работе с командой insert_recordset nicko DAX: Программирование 5 06.07.2006 11:46
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00

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

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

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