Integração de database com Delphi

Delphi

02/07/2015

Boa Tarde,

Estou fazendo uma aplicação para integração entre databases em sqlserver e estou usando Delphi xe7 x Firedac e a dificuldade é o controle da transação. Fiz o controle de transação para um database mas para o outro database não estou conseguindo fazer. Nessa integração se der algum erro em qualquer um dos databases tenho que desfazer todas as transações feitas com rollback, mas sinceramente não sei como implementar isso no Delphi, já procurei na internet e também não achei nada, Alguém da lista saberia como eu posso fazer isso com Firedac?

Obrigado,
Vantuil.
Vantuil Amante

Vantuil Amante

Curtidas 0

Respostas

Dorivan Sousa

Dorivan Sousa

02/07/2015

basicamente se vc usar dois FDConnection (nao entendi se esse é o seu caso). mas ai seria +- isso

try
  abre_transacao_1;
  abre_transacao_2;
 
  grava_dados_bd_1; //aqui nao pode commitar depois de gravar, tem que gravar primeiro os dados no bd 2
  grava_dados_bd_2;
  
  //aqui nao vai ter mais problema de commitar os dados, pq se houver algum vai ser na hora de gravar os dados.
  comita_transacao_1;
  comita_transacao_2;
except
  cancela_transacao_1;
  cancela_transacao_2;  
end;


ta fazendo nessa ideia e mesmo assim nao dar certo?
detalhe que vc tem q ir nas propriedades do connection e desativar os autocommit e o autostart.

talvez se existir algum comando no sql server pra a partir de um comando sql vc informar que é pra gravar em outro banco de dados. eu uso mais firebird hoje, no firebird versao 2.5 tem uma opcao em um sql de vc informar q o comando é pra ser executado em um bd externo

execute statement ('insert into log_data (id, idlogoper, column_name,
old_value, new_value, old_blob, new_blob)' ||
                      'values (gen_id(gen_log_data_id,1), :idlogoper,
 :column_name, :old_value, :new_value, :old_blob, :new_blob)')
    (idlogoper := :idlogoper, column_name := :column_name, old_value :=
 :old_value, new_value := :new_value, old_blob := :old_blob, new_blob :=
 :new_blob)
   on external 'c:\log_25.fdb' /*aqui informa o bd*/
   AS USER 'SYSDBA' PASSWORD 'masterkey'
   WITH COMMON TRANSACTION;
  (Exemplo Log Dados FDD 2010 "Carlos Catun")


talvez exista uma opcao semelhante no sql server.
GOSTEI 0
Vantuil Amante

Vantuil Amante

02/07/2015

Olá Dorivan,

Ontem é que eu despertei e fiz uma rotina +- parecida com a sua mas não testei, mas a sua parece estar melhor e vou implementa-la na minha aplicação e depois testar, também não sabia que tinha que desativar as propriedades autocommit e o autostart do connection, Qualquer problema eu volto a falar com você, valeu mesmo pela ajuda.

Um abraço,
GOSTEI 0
POSTAR