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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.03.2009, 16:03   #1  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Экспорт полей из Аксапта в таблицу SQL
Здравствуйте уважаемые!
Подскажите пожалуйста как правильно написать процедуру экспорта двух полей из таблицы аксапта в таблицу SQL на другом сервере?
Буду признателен за пример рабочего кода для доработки под свои требования.
Заранее благодарен.
__________________
Александр
Старый 31.03.2009, 16:26   #2  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Настройте репликацию между SQL-серверами и ничего программировать не нужно.
Старый 31.03.2009, 16:45   #3  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Настройте репликацию между SQL-серверами и ничего программировать не нужно.
Ваш вариант не устраивает.
В SQL существет таблица отличная от аксаптовской ( по структуре и т.д.). В нее надо дополнительно экспортировать значения в два поля, изначально данных в этих полях в таблице нет.
__________________
Александр

Последний раз редактировалось tolstjak; 31.03.2009 в 16:54.
Старый 31.03.2009, 16:57   #4  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
Если операция разовая, то возможно проще будет использовать MS DTS
Старый 31.03.2009, 17:00   #5  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Я думаю, надо рыть в сторону классов odbcConnection или ociConnection (в случае Oracle) и LoginProperty.

Последний раз редактировалось Eldar9x; 31.03.2009 в 17:21.
Старый 31.03.2009, 17:02   #6  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от Jony Посмотреть сообщение
Если операция разовая, то возможно проще будет использовать MS DTS
Операция будет периодической. Не хочется заморачиваться с SQL.
Из этой таблицы мы сначала получаем данные средствами аксапта, а потом хотим записать в нее контрольные данные, также средствами Аксапрта. Типа - интеграция.
__________________
Александр
Старый 31.03.2009, 17:05   #7  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
подобную задачу я решал с помощью семейства классов CCADO*, очень удобно.
Старый 31.03.2009, 17:07   #8  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от Jony Посмотреть сообщение
подобную задачу я решал с помощью семейства классов CCADO*, очень удобно.
Примерчик выложить не можете?
__________________
Александр
Старый 31.03.2009, 17:35   #9  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
живой пример не помню, так как где писал, уже давно не работаю, но вот простой примерчик накатал, как работать с адо:

X++:
    CCADOConnection c = new CCADOConnection();
    CCADOCommand    cmd;
    CCADORecordset  rs;
    CCADOFields     flds;
    ;
//---------------------------------------------------------------------------------------
    c.open('Data Source=SQLServerName;Initial Catalog=DBName;User ID=UserName;Password=password;');
    cmd = new CCADOCommand();
    cmd.activeConnection(c);

    //чтение
    cmd.commandText('select * from someTable');
    rs = cmd.execute();
    while(!rs.EOF())
    {
        flds = rs.fields();
        info(flds.itemName('someField').value());
        rs.moveNext();
    }
    c.close();

    
//---------------------------------------------------------------------------------------
    //обновление
    c.open('Data Source=SQLServerName;Initial Catalog=DBName;User ID=UserName;Password=password;');
    cmd = new CCADOCommand();
    cmd.activeConnection(c);

    cmd.commandText("UPDATE someTable SET someTable.someField = '321' WHERE someField2 = '123'");
    cmd.execute();
    c.close();
За это сообщение автора поблагодарили: tolstjak (1), S.Kuskov (1).
Старый 01.04.2009, 08:17   #10  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от Jony Посмотреть сообщение
живой пример не помню, так как где писал, уже давно не работаю, но вот простой примерчик накатал, как работать с адо:
[/XPP]
Большое спасибо. Будем пробовать.

P.S.
Попоробовали.
Выдает следующую ошибку:
Ошибка:
Метод 'execute' в COM-объекте класса 'ADODB.Command' возвратил код ошибки 0x800A0E7D (<неизвестно>), который означает: Невозможно использование подключения для выполнения операции. Оно закрыто или не допускается в данном контексте.

Не подскажите как ее победить?
__________________
Александр

Последний раз редактировалось tolstjak; 01.04.2009 в 09:17.
Старый 01.04.2009, 09:57   #11  
sag77rus is offline
sag77rus
Участник
Аватар для sag77rus
 
8 / 10 (1) +
Регистрация: 16.03.2009
хотелось бы на Ваш код взглянуть
Старый 01.04.2009, 10:08   #12  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от sag77rus Посмотреть сообщение
хотелось бы на Ваш код взглянуть
Поправили пару строчек. Все заработало.

jony - Большое респект.
__________________
Александр
Старый 01.04.2009, 11:26   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Насчет удобства работы через ADO - вопрос спорный. Лично мне кажется, что простые команды вроде Select, Update, Insert, Delete проще передавать все-таки через ODBC.

Вариантов подключения через ODBC несколько:

1. Если внешний сервер подключен как Linked-сервер (в случае MS SQL), то просто создаешь объект Connection и немного меняешь адресацию к серверу.

SELECT .. FROM LinkedServer.BaseName.owner.Table

Т.е. вместо имени таблицы имя из 4 "колен". Причем, как правило, владельца вообще опускают и пишут 2 точки подряд.

2. Если внешний сервер это совершенно не зависимый сервер, то вместо объекта Connection используют ODBCConnection. А в остальном все то же самое.

Это выглядит примерно так:

X++:
    OdbcConnection  connectBase;
    Statement statment;
    ResultSet resultSet;
    LoginProperty   lp = new LoginProperty();
    str             strConnectionString;
    Name _server = "MyServer";
    Name _dataBase = "MyBase";
    ;

/*
    // Можно и в одну строку задать все параметры
    strConnectionString = strFmt("DRIVER=SQL Server;SERVER=%1;DataBase=%2;Trusted_Connection=Yes",_server,_dataBase);
    lp.setOther(strConnectionString);
*/
    // Но для определенности задаю те параметры, которые возможно, явным образом
    lp.setDatabase(_dataBase);
    lp.setServer(_server);
    // Фигурные скобки не обязательны
    lp.setOther("DRIVER={SQL Server};Trusted_Connection=Yes");

    connectBase = new OdbcConnection(LP);

/*
Для объекта Connection формировать LoginProperty нет необходимости.
В этом случае все ограничивается строкой

Connection connectBase;

connectBase = new Connection();

но это подключение именно к текущему серверу
*/


// Далее работа с настроенным ODBC-соединением
    statment = connectBase.createStatement();

    // Обновление
    statment.executeUpdate("UPDATE someTable SET someTable.someField = '321' WHERE someField2 = '123'")

    // Чтение
    resultSet = statment.executeQuery("select * from someTable")
    while (resultSet.next())
    {
        info(resultSet.getString(1));
    }
За это сообщение автора поблагодарили: tolstjak (1).
Старый 01.04.2009, 11:30   #14  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Насчет удобства работы через ADO - вопрос спорный.
ODBC ещё и быстрее, чем ADO.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Теги
ado, odbc, sql, экспорт

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как сделать SQL-таблицу видимой в Data Dictionary ? Zabr DAX: Программирование 10 22.08.2007 17:30
Dynamics AX: SQL Server, Heart of Dynamics AX Blog bot DAX Blogs 0 13.07.2007 18:00
Экспорт результатов SQL запроса в CSV adandreev DAX: Программирование 14 13.07.2007 11:59
Аксапта и SQL Server 2003 Ice_Alex DAX: Функционал 17 12.02.2007 20:42
Как в Аксапта создать аналог функции MS SQL ? stavteam DAX: Программирование 5 15.12.2004 17:16

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

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

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