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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.02.2006, 11:47   #1  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Регистрация: 24.04.2003
Адрес: Томск
Возникла необходимость синхронизировать некоторые таблицы в двух разных SQL базах, находящихся на разных компах. Т.е. имеется две базы, каждая сама по себе, но при этом многие справочники должны быть одинаковые (контрагенты, банки, договора и т.п.). Необходимо чтобы данные заводились только в одной базе и после этого они появлялись в другой. В идеале процесс синхронизации должен инициализироваться со стороны базы где заводятся данные, например, завели контрагента, и в методе insert таблицы прописать добавление такого же контрагента в другой базе, update, delete аналогично. Но при этом возникают проблемы с генерацией RecID во второй базе. Пока я остановился на другом варианте, по которому процесс синхронизации будет инициализирован, например, по нажатию кнопки в базе, куда новые или измененные данный должны попадать. Тогда надо просто обратится к базе где заводятся данные, считать новые или измененные данные и профиксить все изменения в текущей базе. В таком варианте столкнулся с проблемой, как обратиться из аксапты к SQL базе, находящейся на другом компе.
Я делаю так:

Код:
	Connection	  con = new Connection();
	Statement	   stmt = con.createStatement();
	ResultSet		resultSet; 

	resultSet	  = stmt.executeQuery("Select * from [TMKGSU1].[Ax_test1].[dbo].[VendGroup]");
где TMKGSU1 название компа, Ax_test1 - название базы, сам я в это время нахожусь в другой базе на другом компе.
Выскакивает такая ошибка:
Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Could not find server 'TMKGSU1' in sysservers. Execute sp_addlinkedserver to add the server to sysservers.

Посоветуйте как лучше поступить.
Старый 01.02.2006, 13:25   #2  
Владимир Максимов_imported is offline
Владимир Максимов_imported
Участник
 
33 / 10 (1) +
Регистрация: 20.01.2004
Чисто технически, используемый синтаксис, с точки зрения MS SQL предполагает, что [TMKGSU1] - это Linked - сервер. Т.е. это сервер, особым образом "прилинкованный" к данному. О чем и идет дальнейшее сообщение с предложением использовать процедуру sp_addlinkedserver для "линкования" этого сервера.

Можно прилинковать сервер через Enetrprise Manager \ Security \ Linked Server

Используемое в запросе имя [TMKGSU1] - это не имя самого сервера, а имя, под которым нужный сервер (нужная база данных) "прилинкована" к данному серверу.

Однако можно использовать и другой способ доступа к серверу.

Объект Connection предполагает установку прямого соединения с "родным" сервером. Но кроме этого, есть еще объект OdbcConnection, который устанавливает соединение с любым сервером.

Код:
// Метод класса Global
/*
 Коннект надо настраивать ОБЯЗАТЕЛЬНО на стороне сервера
 Дело в том, что подключение со стороны сервера установлено с админ-правами,
 а со строны клиента - с пользовательскими правами
 Т.е. попытка установить подобное соединение со стороны клиента окончится неудачей
*/
static server OdbcConnection createOdbcConnection()
{
	OdbcConnection  connectStat;
	LoginProperty   lp = new LoginProperty();
  ;

	// Устанавливаю реквизиты доверительного соединения
	lp.setOther("DRIVER=SQL Server;SERVER=TMKGSU1;DataBase=Ax_test1;Trusted_Connection=Yes");
	connectStat = new OdbcConnection(LP);

	return connectStat;
}

// Собственно обращение к серверу
	OdbcConnection  odbcConnection  = createOdbcConnection();
	Statement	   odbcStmt		= odbcConnection.createStatement();
	ResultSet	   R;

	R = odbcStmt.executeQuery("Select * from [VendGroup]");
Но все это чисто техническая сторона дела, если ты твердо намерен использовать именно прямое обращение к SQL-серверу.

Возможно, есть другие способы прямого общения серверов AXAPTA. Я просто не в курсе.
Старый 02.02.2006, 07:51   #3  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Регистрация: 24.04.2003
Адрес: Томск
Спасибо
 


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

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

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