Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Migration of unmigrated content due to installation of a new plugin
Composition Setup
import.css=/download/attachments/327912/newLayout.css
Portuguese

Pagetitle
DBRUnlock cannot be called in a transaction
DBRUnlock cannot be called in a transaction

DBRUnlock cannot be called in a transaction

Quando uma aplicação AdvPL chama as funções DBRUnlock e/ou DBUnlock, para soltar um e/ou todos os locks de alteração de registro do Alias atual no processo atual, e a RDD da tabela em questão está com uma transação ativa, o programa será finalizado com a ocorrência de erro fatal AdvPL abaixo:

 

/*-------------------------------------------------------ERRO THREAD ([5852], juliow, TEC-AUTOQUAD)   22/04/2010   11:00:20 Stack :DBRUnlock cannot be called in a transaction on U_THETRAN(PENDTST.PRW) 22/04/2010 10:59:49 line : 15070[build: 7.00.090818P-20100410][environment: advpltests_top_mssql][thread: 5852]-------------------------------------------------------*/


Ao finalizar o processo, a transação é encerrada realizando rollback.

 

Ação corretiva

Deve ser verificado o código-fonte que chama a função DBRUnlock e/ou DBUnlock, pois ambas não podem ser chamada em código-fonte com um transação ativa, elas devem ser chamadas após a efetivação/fechamento da transação.

 

Informações adicionais

Na maioria dos casos, esta ocorrência é reproduzida quando codificado um programa, ponto de entrada e/ou rotina auxiliar, para realizar uma manutenção na base de dados em tabelas do sistema ERP, quando chamada dentro de um processo que está transacionando, e inadvertidamente uma das funções DBRUnlock e/ou DBUnlock foi chamada. Para realizar manutenção em tabela do sistema ERP, o Framework da linguagem AdvPL possui as funções RecLock e MsUnlock, que possuem os tratamento necessários para desviar a execução e tratar adequadamente as condições de ambiente, inclusive para o caso destas funções serem executadas em rotinas dentro de uma transação ativa (Begin Transaction / End Transaction).

Para mais informações referente ao comportamento e uso da funções RecLock e MsUnlock, do Framework AdvPL, consulte a documentação disponível na TDN.