Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 17 de Outubro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
64 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Dicas]  Dica - IBX - "invalid transaction handle (expecting explicit transaction start)"
Publicado por ActiveDelphi : Segunda, Janeiro 12, 2009 - 12:12 GMT-3 (1124 leituras)
Comentários 3 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Kelver Merlotti Olá amigo activedelphiano! Esta dica é para quem usa os componentes da palheta Interbase e algum dia se deparou com a mensagem: "invalid transaction handle (expecting explicit transaction start)", e só conseguiu resolver recomeçando tudo, não é mesmo?

Pois bem, se você já viu esta mensagem, meus parabéns, pois assim como eu, você cometeu uma "caquinha"... hehehe..

Ela é exibida toda vez que um IBTransactionA está ligado a um IBDatabaseA e uma IBQueryA é ligada a este IBTransactionA, entretanto, ele já está ligado a um outro IBDatabase, diferente do pré-definido no IBtransactionA!

Este tipo de situação é comum quando temos de montar programas para troca ou migração de informações entre bases de dados, pois o mesmo executável se conectará em bancos diferentes. Em resumo, teremos:


               IBDatabaseA <..      .....> IBDatabaseB <.. <.....
                             |      |                    |      |
             IBTransactionA..| <..  |    IBTransactionB..| <..  |
                                 |  |                        |  |
                IBQueryA ........|..|       IBQueryB ........|..|
 

Percebeu o problema? Quando for executar algo na IBQueryA, ela não encontrará uma transação iniciada no IBDatabaseB, pois seu manipulador de transações está ligado ao IBDatabaseA.

Sendo assim, a solução é configurar corretamente os componentes e sair pro abraço! A configuração correta seria:


               IBDatabaseA <.. <.....      IBDatabaseB <.. <.....
                             |      |                    |      |
             IBTransactionA..| <..  |    IBTransactionB..| <..  |
                                 |  |                        |  |
                IBQueryA ........|..|       IBQueryB ........|..|
 

Fica aí a dica!
Um grande abraço e até a próxima.

Por: Kelver Merlotti - coordenador editorial do portal ActiveDelphi.com.br
Contato: kelver@activedelphi.com.br



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: gilsonnrodrigues (gilsonnr@hotmail.com) : Jan 12, 2009 - 03:37
(Informações sobre o membro | Enviar uma mensagem) http://
e se fosse transação em duas fases?


por: KMerlotti (kelver@activedelphi.com.br) : Jan 14, 2009 - 11:50
(Informações sobre o membro | Enviar uma mensagem) http://www.kmerlotti.hpg.com.br
opa!! fala gilson! desculpe a demora pela resposta.. a correria tá grande! :)

mas voltando a sua pergunta, no caso de transação em duas fases, ambos databases estariam ligados em um único Transaction, seja através da propriedade DefaultTransaction de cada IBDatabase ou pelo método AddDataBase do IBTransaction.

Consequentemente, um start neste IBTransaction levantaria a transação nas duas bases, e a manipulação de qualquer Query ligada a este transaction não causaria erro algum..

Se não era essa a dúvida, posta aí que agente tenta ajudar!

Abraços!
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados