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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с самописной DLL. VAlek DAX: Программирование 18 28.12.2008 10:37
Client Axapta 3.0 SP4 и Linux. Как запустить? Daiver DAX: Администрирование 10 28.06.2007 15:59
Вызов экспортируемой функции DLL Jabberwocky DAX: Программирование 8 12.09.2006 17:20
при вызове функции из своей DLL, вылетает ошибка Delfins DAX: Программирование 9 07.03.2006 19:29
Описание кода в Аксапте vasiliy DAX: Прочие вопросы 5 23.03.2005 12:16

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

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

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