Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Composition Setup
import.css=/download/attachments/3279126062824/newLayouttecnologia.css

DBRUnlock
Pagetitle
DBRUnlock

...

...

DBRUnlock

Libera

...

determinado

...

registro

...

bloqueado.

Sintaxe

Bloco de código
collapsefalse
DBRUnlock( [

...

 nRec ] )

...


Parâmetros

...

Nome

Tipo

Descrição

Obrigatório

Referência

...

nRec

...

numérico

Indica o número do registro que será desbloqueado.

...

 

 

...

Nil (Nulo)

Observações

  • Pode-se

...

  • escolher um registro a ser desbloqueado, através do parâmetro

...

  • nRec. Porém, se este parâmetro não for especificado,

...

  • serão soltos todos os bloqueios de registro do alias atual, da mesma forma que a função DBUnlock

...

  • .

...

  • Em ambos os casos, somente serão soltos os bloqueios de registro obtidos nos processos/conexões atuais. Caso a função seja chamada solicitando o desbloqueio de um registro especifico que encontra-se bloqueado por outro proceso, a chamada de desbloqueio será ignorada.
  • Não é possível chamar a função

...

  • DBRUnlock para um alias

...

  • caso o driver de abertura deste alias esteja com uma transação ativa. Caso o programa AdvPL erroneamente chame as funções

...

  • DBRUnlock e/ou

...

  • DBUnlock dentro de um bloco transacionado, o programa será interrompido com a ocorrência de erro fatal

...

  • AdvPL "DBRUnlock cannot be called in a transaction".

 

  • Caso não haja tabela aberta, o programa será encerrado com ocorrência de erro recuperável "Work area not in use".
  • Se a tabela está aberta em modo exclusivo, a função não realiza desbloqueio de registros.
  • Se não for possível fazer a atualização do registro que está sendo desbloqueado, o programa será encerrado com ocorrência de erro recuperável "Commit error: (DBRUnlock)".
  • Se houver algum problema no desbloqueio do registro, será apresentada no log de console do AppServer a mensagem "Warning - DBRUnlock - Unlock error".
  • Caso um programa faça mais de uma conexão com o mesmo SGBD, uma conexão consegue liberar o bloqueio de um registro que foi bloqueado por outra conexão. Isso só é possível para conexões realizadas pela mesma thread.
  • A função DBCloseArea remove todos os bloqueios realizados.

Exemplos

Os exemplos abaixo utilizam a RDD "TOPCONN", mas a função pode ser utilizada com qualquer uma das RDDs válidas.

O exemplo abaixo mostra o desbloqueio de todos os registros bloqueados.

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
user function test1()
  Local nHandle := TCLink( "MSSQL/DSN1", "127.0.0.1", 7890 )
  Local cTable := "MYTABLE"
  Local cRDD := "TOPCONN"
  Local lRet := .F.
  
  // Abre a tabela em modo compartilhado
  

...

DBUseArea( .T.,

...

 cRDD, 

...

cTable, (cTable), .T., .F. )

...


  
  DBGoTo( 100

...

 )
  lRet := DBRLock()       //

...

 Bloqueia o registro

...

 de número 100
  conout( lRet )          // Exibe: .T.
  
  lRet := DBRLock( 110 )  // 

...

Bloqueia o registro de número 110
  conout( lRet )          // Exibe: .T.
  
  DBRUnlock() 

...

            // Desbloqueia todos os registros bloqueados
  
  // Fecha a tabela
  DBCloseArea()
  
  // Desconecta do SGBD
  TCUnlink( nHandle )
return

O exemplo abaixo espera ser possível fazer o bloqueio de um registro, altera e depois o desbloqueia.

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
user function test2()
  Local nHandle := TCLink( "MSSQL/DSN1", "127.0.0.1", 7890 )
  Local cTable := "MYTABLE"
  Local cRDD := "TOPCONN"
  Local lRet := .F.
  
  // Abre a tabela em modo compartilhado
  DBUseArea( .T., cRDD, cTable, (cTable), .T., .F. )
  
  // Vai para o registro 100
  DBGoTo( 100 )
  
  // Espera o bloqueio ser possível
  while !DBRLock()
    sleep( 1000 )
  enddo
  
  // Altera o conteúdo do registro
  (cTable)->MYFIELD := "ABCDE"
  
  // Desbloqueia o registro 100
  DBRUnlock( 100 )
  
  // Fecha a tabela
  DBCloseArea()
  
  // Desconecta do SGBD
  TCUnlink( nHandle )
return

Veja também

Advanced Protheus 6.09 , Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server

 

...