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
|