Невозможно запустить транзакцию с клиента

Обсуждение возникших проблем, предложений и ошибок SDAC компонентов
Ответить
vso
Сообщения: 39
Зарегистрирован: Чт 24 янв 2013 11:08

Невозможно запустить транзакцию с клиента

Сообщение vso » Ср 20 мар 2013 07:18

Всем добрый день!

Пытаюсь запустить транзакцию

Код: Выделить всё

MSTrans.AddConnection(fMain.MSConnection);
MSTrans.StartTransaction;
но в ответ на эти мои действия получаю такой ответ
Партнерский диспетчер транзакций отключил поддержку удаленных и сетевых транзакций.
при чем пробовал выполнить запросы в dbForge Studio for SQL Server с того же самого клиента, ругательств не получил.

Самое печальное, что такая конструкция

Код: Выделить всё

ADOConnection1.BeginTrans;
не вызывает ошибки

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Невозможно запустить транзакцию с клиента

Сообщение AndreyZ » Ср 20 мар 2013 10:08

Здравствуйте,

Компонент TMSTransaction предназначен для управления распределенными транзакциями. TMSTransaction основан на функциональности Microsoft Distributed Transaction Coordinator (MSDTC). Более подробную информацию о MSDTC Вы можете найти по следующей ссылке: http://msdn.microsoft.com/library/ms684146.aspx . Более подробную информацию о компоненте TMSTransaction, Вы можете найти в документации SDAC.
Для запуска SQL Server транзакции Вы можете использовать следующий код:

Код: Выделить всё

MSConnection.StartTransaction;

vso
Сообщения: 39
Зарегистрирован: Чт 24 янв 2013 11:08

Re: Невозможно запустить транзакцию с клиента

Сообщение vso » Ср 20 мар 2013 13:26

Спасибо, через Connection - работает.

но возникла другая проблема, почему-то ругается на такой запрос на обновление:

Код: Выделить всё

MERGE dbo.sys_Links_Stencil AS TARGET
USING (SELECT :Link_CabStencil, :Link_DevStencil, :Link_Name, :OLD_Link_CabStencil) AS SOURCE (A1, A2, A3, A4)
ON (Link_CabStencil = A4 AND Link_DevStencil = A2 AND Link_Name = A3)
WHEN MATCHED AND A4 = 0 THEN
  DELETE
WHEN MATCHED THEN 
  UPDATE SET Link_CabStencil = A1
WHEN NOT MATCHED THEN
  INSERT (Link_CabStencil, Link_DevStencil, Link_Name)
  VALUES (A1, A2, A3);
а ругается вот так:
Incorrect syntax near the keyword 'MERGE'.

vso
Сообщения: 39
Зарегистрирован: Чт 24 янв 2013 11:08

Re: Невозможно запустить транзакцию с клиента

Сообщение vso » Ср 20 мар 2013 14:06

Сорри, ложная тревога!

я поменял в TMSCOnnection свойство
Provider с prSQL на prAuto и все заработало

Но почему так!!!! :?:

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Невозможно запустить транзакцию с клиента

Сообщение AndreyZ » Ср 20 мар 2013 15:03

OLEDB не поддерживает выражение MERGE, оно поддерживается только SQL Native Client.
Если Provider установлен в prAuto, SDAC ищет доступный провайдер последней версии. Это значит что SDAC ищет провайдеры используя следующую цепочку: Native Client 11, Native Client 10, Native Client 9, OLEDB. Будет использован первый найденный провайдер из этой цепочки.

Ответить