Array
(
)

Problemas com transações distribuidas no Sql Server 2000

Rssampaio
   - 25 fev 2009

Estou tentando faze uma atualização online entre 2 bancos de dados remotos. Eu criei um linked server no servidor1 para um outro servidor, servidor 2, ambos usando a versão 2000. Pelo query analyzer eu consigo faze todas as operações como select, insert e update dos dados do servidor 2. O teste que eu preciso é: assim que eu fizer um insert, update ou delete no servidor 1 o mesmo ira acontecer no servidor 2. Para isso eu criei uma trigger after insert (para teste). Fazendo o insert, pelo query analyzer, na tabela do servidor 1 o mesmo também é inserido na tabela do servidor 2.

Até aqui dando tudo certo nos testes.

O erro abaixo acontece quando eu executo o insert pela minha aplicação.

´Project XXX.exe raise exception class EOleException with message [OLE DB provider returned message: Não é possivel iniciar mais transações nesta sessão.]´

Segue abaixo o script da minha trigger:
create trigger trgXXX
on TblXXX
after insert
as
if exists(select * from inserted)
begin
set xact_abort on
begin distributed transaction

insert into linkedserver.banco.dbo.TblXXX(Ope_DataCadastro,
Ope_DataUltAtu,
Ope_Nome,
Ope_Login,
Ope_Senha,
Ope_HR_Inicio,
Ope_HR_Fim,
Ope_PHR_Inicio,
Ope_PHR_Fim,
Ope_Tipo,
Ope_Usr_Cadastro,
Ope_Usr_AltCad)
select Ope_DataCadastro,
Ope_DataUltAtu,
Ope_Nome,
Ope_Login,
Ope_Senha,
Ope_HR_Inicio,
Ope_HR_Fim,
Ope_PHR_Inicio,
Ope_PHR_Fim,
Ope_Tipo,
Ope_Usr_Cadastro,
Ope_Usr_AltCad from inserted

commit tran
set xact_abort off
end

Segue agora abaixo o codigo da aplicação em Delphi 7:

procedure TFrmXXX.ActSalvarExecute(Sender: TObject);
begin
inherited;
Dm.minhaqry.Post;
end;

OBS: Uso Delphi7/Sql Server 2000