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