import.css=/download/attachments/6062824/tecnologia.css

Bloqueia uma tabela ou arquivo.

Sintaxe

FLock()

Retorno

Nome

Tipo

Descrição

lRet

lógico

Retorna verdadeiro (.T.), se a tabela for bloqueada com sucesso; caso contrário, falso (.F.).

Observações

Exemplos

O exemplo abaixo utiliza a RDD "TOPCONN", mas a função pode ser utilizada com qualquer uma das RDDs válidas.

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 exclusivo
  DBUseArea( .T., cRDD, cTable, (cTable), .F., .F. )
  
  DBGoTop()
  lRet := FLock()                   // Tenta bloquear a tabela indica em cTable
  conout( lRet )                    // Exibe: .T.
  varinfo( "list1", DBRLockList() ) // Exibe: { 0 }
  
  DBCloseArea()
  
  // Abre a tabela em modo compartilhado
  DBUseArea( .T., cRDD, cTable, (cTable), .T., .F. )
  
  lRet := DBRLock( 100 )            // 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.
  
  varinfo( "list2", DBRLockList() ) // Exibe: { 100, 110 }
  
  lRet := FLock()                   // Bloqueia a tabela indica em cTable
  conout( lRet )                    // Exibe: .T.
  varinfo( "list3", DBRLockList() ) // Exibe: { 0 }
  
  // Fecha a tabela
  DBCloseArea()
  
  // Desconecta do SGBD
  TCUnlink( nHandle )
return

O exemplo abaixo espera ser possível fazer o bloqueio de uma tabela, altera vários registros e depois desbloqueia.

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. )
  
  // Espera o bloqueio da tabela ser possível
  while !FLock()
    sleep( 1000 )
  enddo
  
  // Altera o conteúdo do registro 100
  DBGoTo( 100 )
  (cTable)->MYFIELD := "ABCDE"
  
  // Altera o conteúdo do registro 110
  DBGoTo( 110 )
  (cTable)->MYFIELD := "FGHIJ"
  
  // Desbloqueia a tabela
  DBUnlock()
  
  // Fecha a área de trabalho
  DBCloseArea()
  
  // Desconecta do SGBD
  TCUnlink( nHandle )
return

Veja também