GARANTIR DESCONTO

Fórum Commit em duas fases com dbExpress #345363

30/08/2007

0

olá pessoal!

Estou precisando usar commit em duas fases para atualizar/inserir em dois bancos de dados distintos. Alguém sabe como implementar isso?
Estou usando: Delphi 7, Firebird 2.0 e para fazer UPDATE, INSERT estou usando o TSQLDataSet da paleta dbExpress.

Se alguém puder me ajudar agradeço.


Adriano_ds

Adriano_ds

Responder

Posts

30/08/2007

Rodrigo_koga

Vc pode usar o componente SQLConnection.

Vc pode fazer o seguinte:

SQLConnection.StartTransaction -> Para abrir uma transação;

SQLConnection.Commit -> Para salvar uma transação;

SQLConnection.Roolback -> Para não salvar uma transação, para voltar os dados a situação anterior da gravação dos dados;


Responder

Gostei + 0

30/08/2007

Adriano_ds

Olá rodrigo_koga

Sim, mas eu preciso fazer isso em dois bancos de dados diferentes (cada um fica num micro diferente).
E preciso que as atualizações sejam feitas nos dois ou cancele tudo (commit em duas fases do Firebird). Vou ter dois TSQLConnection e apenas uma transação. Não sei se isto é possível com dbExpress?

Mas obrigado pela atenção, amigo.


Responder

Gostei + 0

30/08/2007

Emerson Nascimento

creio que isso não seja possível. mas acho que você pode controlar com uma variável. algo assim:

gravatransacao := false;

try
  inicia transacao banco1
  executa procedimentos banco 1

  gravatransacao := true;
except
  gravatransacao := false;
end;

if gravatransacao then
begin 
  try
    inicia transacao banco2
    executa procedimentos banco 2

    gravatransacao := true;
  except
    gravatransacao := false;
  end;
end;

if gravatransacao then
begin
  confirma transacao banco1
  confirma transacao banco2
end
else
begin
  if transacao banco 1 iniciada then
    desfaz transacao banco 1

  if transacao banco 2 iniciada then
    desfaz transacao banco 2
end



Responder

Gostei + 0

30/08/2007

Adriano_ds

Olá emerson.en!

Obrigado por ajudar, amigo. Esta vai ser a solução que vou ter que usar caso não tehna como implementar commit em duas fases pelo Delphi.

Sei que o firebird tem o recurso. Só não sei se o Delphi e dbExpress suportam.

Será que teria outra forma de fazer commit em duas fases? Como por exemplo acessar a API do firebird?


Responder

Gostei + 0

30/08/2007

Beppe

Can I access this capability via - Delphi , using InterBase API Calls? - embedded SQL programs? When you start a transaction with the API, you specify a list of open database handles instead of just one. With ESQL, by default all transactions you start are multi-database, using all of the open databases, unless you limit the list with the USING clause.


Tvz vc pudesse derivar SQLConnection para poder tratar esta situação. Faça uma investigação e veja se vale a pena.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar