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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.05.2011, 12:27   #1  
sobik is offline
sobik
Участник
Аватар для sobik
 
28 / 10 (1) +
Регистрация: 30.08.2010
Соединение с посторонней базы данных без создания ODBC источника на клиенте.
Здравствуйте.
Пишу "синхронизацию" базы данных постороннего приложения с базой Аксапты. "Синхронизация" следующего вида: при переводе сотрудника в другой отдел соответствующим образом должен менятся аналог карточки сотрудника в посторонеей БД.
Соединяюся я с ней через ОДБЦ источник, который уже есть настроеный в винде. Беда в том, что изминения могут проводится на любом клиенте, а настраивать на каждом возможном "изменителем" нету возможности. Есть ли другие способы соединения?

Заранее благодарен.
Старый 27.05.2011, 12:37   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от sobik Посмотреть сообщение
Здравствуйте.
Пишу "синхронизацию" базы данных постороннего приложения с базой Аксапты. "Синхронизация" следующего вида: при переводе сотрудника в другой отдел соответствующим образом должен менятся аналог карточки сотрудника в посторонеей БД.
Соединяюся я с ней через ОДБЦ источник, который уже есть настроеный в винде. Беда в том, что изминения могут проводится на любом клиенте, а настраивать на каждом возможном "изменителем" нету возможности. Есть ли другие способы соединения?

Заранее благодарен.
можно с помощью CCADOConnection.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.05.2011, 12:45   #3  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
пример:
X++:
CCADOConnection     cn;
    CCADOCommand        command;
    CCADOCommand        cmTTSBegin;
    CCADOCommand        cmTTSCommit;
    CCADOCommand        cmUpdate;
    ;

    cn                   = new CCADOConnection();
    command        = new CCADOCommand();
    cmUpdate        = new CCADOCommand();
    cmTTSCommit = new CCADOCommand();
    cmTTSBegin    = new CCADOCommand();

    cn.open(strfmt("DRIVER=SQL Server;Server=%1;UID=%2;PWD=%3;DataBase=%4", ServerName, UserId, Pasword, DataBaseName));

    command.activeConnection(cn);
    cmTTSBegin.activeConnection(cn);
    cmTTSCommit.activeConnection(cn);
    cmUpdate.activeConnection(cn);

    cmTTSBegin.commandText("BEGIN transaction");
    cmTTSBegin.execute();

    cmUpdate.commandText(strfmt("Update %1 set %2 = %2 + 1", TableName, Field));
    cmUpdate.execute();

    cmTTSCommit.commandText("COMMIT Transaction");
    cmTTSCommit.execute();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.05.2011, 12:45   #4  
Omeo is offline
Omeo
Участник
 
129 / 50 (2) ++++
Регистрация: 18.03.2004
Адрес: Moscow
Цитата:
Сообщение от sobik Посмотреть сообщение
Здравствуйте.
Есть ли другие способы соединения?.
класс System.Data.SqlClient.SqlConnection

Цитата:
permission = new InteropPermission(InteropKind::ClrInterop);
permission.assert();
sqlConnection = new System.Data.SqlClient.SqlConnection(
strfmt("Server = %1; Database = %2; User = sa; Password = sa", _server, _database));
sqlConnection.Open();
CodeAccessPermission::revertAssert();
Старый 27.05.2011, 12:47   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Да кстати, какая у Вас версия аксапты?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.05.2011, 12:48   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Делайте серверный класс.
Настройки будут храниться и браться с него (с сервера).
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: mazzy (2), lev (1).
Старый 27.05.2011, 16:49   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,699 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от AndyD Посмотреть сообщение
Делайте серверный класс.
Настройки будут храниться и браться с него (с сервера).
Не обязательно весь класс делать со свойством RunOn = Server. Достаточно только объект ODBCConnection сформировать на стороне сервера. А это можно сделать, например, через создание статического метода в классе Global.

При этом вовсе не обязательно использовать предварительно созданный DSN в Windows. Можно формировать строку соединения динамически. Кстати, в этом случае не важно где (на клиенте или на сервере будет создаваться соединение). А дополнительные реквизиты для формирования строки соединения можно хранить в настроечных таблицах Axapta.

Вот пример для подключения к MS SQL - серверу по имени сервера и базы данных

X++:
//Создание ODBCConnection с внешней базой данных по отношению к текущей (другой сервер)
static server OdbcConnection createOdbcConnection(Name _server, Name _dataBase)
{
    OdbcConnection  connectBase;
    LoginProperty   lp = new LoginProperty();
    str             strConnectionString;
    ;
    // Можно и в одну строку задать все параметры
//    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);

    return connectBase;
}
Старый 27.05.2011, 22:52   #8  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Не обязательно весь класс делать со свойством RunOn = Server. Достаточно только объект ODBCConnection сформировать на стороне сервера. А это можно сделать, например, через создание статического метода в классе Global.
Можно, конечно, только гонять данные с аос'а на клиента, только для того, что бы вернуть их обратно на аос мне кажется как-то неправильно

Впрочем, решать автору вопроса
__________________
Axapta v.3.0 sp5 kr2
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DeniZone: ODBC with FoxPro Blog bot DAX Blogs 0 14.06.2009 12:05
Стандартный импорт данных. Обновление sparur DAX: Функционал 0 24.03.2008 19:07
Учет головной и дочерних предприятий в рамках одной базы данных... Buzzy DAX: Функционал 32 11.03.2003 12:22
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00
Изменение свойств Grid с помощью метода источника данных displayOption Anton Sk. DAX: База знаний и проекты 0 03.12.2001 18:08

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

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

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