| 
			
			 | 
		#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  | 
| 
	
 |