08.03.2021, 11:07 | #1 |
Сенбернар
|
Ошибка при получении значения поля 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 |
Участник
|
dataLine - Аксаптовский конейнер.
field - это COM-объект field.value() - возвращает объект объект нельзя положить в контейнер. по определению нужно: * либо задействовать CLRInterop.getObjectForAnyType() * либо каким-либо другим образом сериализовать field.value(). Например .ToString() Последний раз редактировалось mazzy; 08.03.2021 в 12:44. |
|
08.03.2021, 14:08 | #3 |
Сенбернар
|
Спасибо. Вот так - работает:
X++: dataLine += new CCADOField(fields.item(dataCol)).value();
__________________
Best Regards, Roman |
|
|
За это сообщение автора поблагодарили: mazzy (2), sukhanchik (2). |