Показать сообщение отдельно
Старый 27.04.2006, 19:15   #17  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Есть рабочий примерчик.... Но правда как было верно подмечено на 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
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 27.04.2006 в 19:22.