Árvore de páginas

Inicia a transação em uma "chave", bloqueando o acesso aos seus valores nas tabelas "Tabela X" e "Tabela A"

Sintaxe

 

VarBeginT
lRet := VarBeginT( <cUID>, <cChave> )

Parâmetros

NomeTipoDescriçãoObrigatórioReferênciaObservações
cUIDCaractere

Identificador da sessão de Variáveis Globais

X  
cChaveCaractereIdentificador da chaveX  

Retorno

NomeTipoDescriçãoObservações
lRetLógico

Indica se conseguiu iniciar a transação na chave <cChave> da sessão <cUID>

Retorna .T. se a função foi executada corretamente e se houver algum erro retorna .F.

Observações

Toda transação iniciada em uma "chave" ("VarBeginT") deve ser finalizada com "VarEndT".

Toda transação bloqueia o acesso as seguintes funções: "VarGetX", "VarGetA", "VarGet", "VarSetX", "VarSetA", "VarSet", "VarDelX", "VarDelA" e "VarDel", estas funções ficam paradas até terem a permissão de acesso novamente, servindo com mecanismo de sincronização de dados entre "Job/Thread".

A função "VarClean", irá limpar o conteúdo das tabelas "Tabela X" e "Tabela A", porém irá retornar com erro (.F.) indicando que tem alguma transação de "chave" em curso, não podendo concluir a ação de limpeza.

Mesmo com uma transação em uma "chave" em curso, pode se recuperar e/ou até gravar dados nesta "chave", vale observar que as recuperações/leituras (funções Get), podem ser executadas sem nenhum prejuízo para o "Job/Thread" que detém a transação, todavia a as funções de atualização (funções Set) tem que ser usadas com cautela e com muito conhecimento de causa, pois com a alteração irá promover uma mudança do valor da "chave" e como o outro "Job/Thread" reservou a "chave" com a transação, esta alteração pode causar efeitos indesejáveis para aquela transação. As funções que fazem este acesso sujo, são as que terminar com a letra "D" ("Dirty"), funções: "VarGetXD", "VarGetAD", "VarGetD", "VarSetXD", "VarSetAD" e "VarSetD".

Se a função retornar Falso (.F.), houve algum erro na criação da transação, logo a finalização da transação "VarEndT" não deve ser executada.

A Transação em uma "chave" pode ser iniciada em um "Job/Thread" e finalizada em outro "Job/Thread".

Se uma transação for iniciada em um "Job/Thread" e este "Job/Thread" terminar naturalmente, a transação será mantida, devendo neste caso ser finalizada em outro "Job/Thread".

Se uma transação for iniciada em um "Job/Thread" e este "Job/Thread" terminar por um erro, a transação será finalizada automaticamente. ((aviso) Disponível em Build igual ou superior a 7.00.131227A NG)

(aviso) Disponível em Build igual ou superior a 7.00.131227A

Exemplos

Exemplo 

User Function exemplo()
  Local cMyUID := "teste_UID_RL"
  Local cChave := "chave"
  Local aValor := {1, 2, 3}
  Local nValor := 0
  Local lRet := .F.
  
  lRet := VarSetUID(cMyUID, .T.)
  If(!lRet)
    ConOut("Erro na criação da sessão: " + cMyUID)
  EndIf
 
  lRet := VarBeginT(cMyUID, cChave)
  If(!lRet)
    ConOut("Erro na criação da transação na chave: " + cChave)
  Else
    // A transacao na chave foi iniciada
    ConOut("Iniciou a transação na chave: " + cChave)
 
    lRet := VarSetAD(cMyUID, cChave, aValor)
    If(!lRet)
      ConOut("Erro na atualização da chave (Tabela A): " + cChave)
    EndIf
 
    nValor := Len(aValor) - 1
    lRet := VarSetXD(cMyUID, cChave, nValor)
    If(!lRet)
      ConOut("Erro na atualização da chave (Tabela X): " + cChave)
    EndIf
 
    lRet := VarEndT(cMyUID, cChave)
    If(!lRet)
      ConOut("Erro ao finalizar a transação na chave: " + cChave)
    Else
      ConOut("Finalizou a transação na chave: " + cChave)
    EndIf
  EndIf
Return .T.

Veja também

VarSetUIDVarEndT

  • Sem rótulos