Commit em duas fases com dbExpress
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.
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
Curtidas 0
Respostas
Rodrigo_koga
30/08/2007
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;
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;
GOSTEI 0
Adriano_ds
30/08/2007
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.
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.
GOSTEI 0
Emerson Nascimento
30/08/2007
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
GOSTEI 0
Adriano_ds
30/08/2007
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?
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?
GOSTEI 0
Beppe
30/08/2007
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.
GOSTEI 0