Есть отчет, старый, как... мамонт. Задача - переделать его на работу по новым, прогрессивным технологиям ))
Для этого надо получить значения из формируемого отчетом 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);
}
}
Что я делаю не так?