Есть рабочий примерчик.... Но правда как было верно подмечено на sql.ru - работает на Access. Не проверял на других БД.
X++:
// Экспорт из Axapta через ADO в другую базу данных заданной таблицы
static void tutorial_WriteADO(Args _args)
{
CCADOConnection cn = new CCADOConnection();
CCADOCommand command = new CCADOCommand();
CCADORecordset rcs;
Str connectionString;
str tableName = "VENDTABLE";
FilePath filePath = "D:\\zz.mdb";
anytype newValue;
#CCADO
;
connectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;';
connectionString += 'Data Source=' + filePath + ';';
connectionString += 'Mode=ReadWrite;';
connectionString += 'Persist Security Info=False';
cn.open(connectionString);
rcs = new CCADORecordset();
rcs.open(tableName, cn, #adOpenKeyset, #adLockOptimistic, #adCmdTable);
rcs.addNew();
for (i = 1; i <= rcs.fields().count(); i++)
{
rcs.fields().itemIdx(i - 1).setValue(newValue);
}
rcs.update();
}
Для работы этого примера нужно добавить в класс CCADORecordset
методы:
X++:
void addNew()
{
recordSet.AddNew();
}
void update()
{
recordSet.update();
}
А в класс CCADOField - метод
X++:
// Установка значения (real, date, int, str)
void setValue(anytype _value)
{
switch (typeof(_value))
{
case Types::Date:
field.value(COMVariant::createFromDate(_value));
break;
case Types::Enum, Types::Integer:
field.value(COMVariant::createFromInt(_value));
break;
case Types::Real:
field.value(COMVariant::createFromReal(_value));
break;
case Types::RString, Types::String, Types::VarString:
field.value(COMVariant::createFromStr(_value));
break;
default:
field.value(COMVariant::createNoValue());
}
}
Хочу также отметить тот факт, что в ADO методы AddNew/Edit работают исключительно напрямую с таблицами (вариант SELECT * FROM Таблица не катит).
Поэтому обновляемые рекордсеты не сильно распространены. Гораздо гибче и удобнее SQL - операторы UPDATE, INSERT, DELETE