|
|
#1 |
|
Участник
|
Соединение с посторонней базы данных без создания ODBC источника на клиенте.
Здравствуйте.
Пишу "синхронизацию" базы данных постороннего приложения с базой Аксапты. "Синхронизация" следующего вида: при переводе сотрудника в другой отдел соответствующим образом должен менятся аналог карточки сотрудника в посторонеей БД. Соединяюся я с ней через ОДБЦ источник, который уже есть настроеный в винде. Беда в том, что изминения могут проводится на любом клиенте, а настраивать на каждом возможном "изменителем" нету возможности. Есть ли другие способы соединения? Заранее благодарен. |
|
|
|
|
#2 |
|
Ищущий знания...
|
Цитата:
Сообщение от sobik
Здравствуйте.
Пишу "синхронизацию" базы данных постороннего приложения с базой Аксапты. "Синхронизация" следующего вида: при переводе сотрудника в другой отдел соответствующим образом должен менятся аналог карточки сотрудника в посторонеей БД. Соединяюся я с ней через ОДБЦ источник, который уже есть настроеный в винде. Беда в том, что изминения могут проводится на любом клиенте, а настраивать на каждом возможном "изменителем" нету возможности. Есть ли другие способы соединения? Заранее благодарен.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#3 |
|
Ищущий знания...
|
пример:
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();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#4 |
|
Участник
|
класс 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(); |
|
|
|
|
#5 |
|
Ищущий знания...
|
Да кстати, какая у Вас версия аксапты?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#6 |
|
Участник
|
Делайте серверный класс.
Настройки будут храниться и браться с него (с сервера).
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
| За это сообщение автора поблагодарили: mazzy (2), lev (1). | |
|
|
#7 |
|
Участник
|
Цитата:
При этом вовсе не обязательно использовать предварительно созданный 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; } |
|
|
|
|
#8 |
|
Участник
|
Цитата:
![]() Впрочем, решать автору вопроса
__________________
Axapta v.3.0 sp5 kr2 |
|
|