Fórum Integração de database com Delphi #524667
02/07/2015
0
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.
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
Curtir tópico
+ 0
Responder
Posts
03/07/2015
Dorivan Sousa
basicamente se vc usar dois FDConnection (nao entendi se esse é o seu caso). mas ai seria +- isso
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
talvez exista uma opcao semelhante no sql server.
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.
Responder
Gostei + 0
03/07/2015
Vantuil Amante
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,
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,
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)