Inicia a transação em uma "chave", bloqueando o acesso aos seus valores nas tabelas "Tabela X" e "Tabela A"
Sintaxe
lRet := VarBeginT( <cUID>, <cChave> )
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência | Observações |
---|---|---|---|---|---|
cUID | Caractere | Identificador da sessão de Variáveis Globais | X | ||
cChave | Caractere | Identificador da chave | X |
Retorno
Nome | Tipo | Descrição | Observações |
---|---|---|---|
lRet | Ló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. ( Disponível em Build igual ou superior a 7.00.131227A NG)
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.