RecLock
Bloqueia o registro corrente pra gravacao. Sempre seguido de MsUnlock. Esquecer trava a tabela pra outros usuarios.
Assinatura: RecLock(cAlias, lInclusao) -> lOk
Retorna: Logical
RecLock abre o registro pra escrita. Sem ele, qualquer tentativa de atribuicao (SA1->A1_NOME := "X") falha. SEMPRE chame MsUnlock() depois.
Sintaxe
RecLock("ALIAS", lInclusao) // .F. = alterar, .T. = incluir novo
// ... atribuicoes ...
MsUnlock()
// ou: ALIAS->(MsUnlock())Exemplo
// Alterar registro existente:
DBSelectArea("SA1")
SA1->(DBSetOrder(1))
If SA1->(DBSeek(xFilial("SA1") + cCod))
RecLock("SA1", .F.)
SA1->A1_OBSERVA := "Atualizado em " + DToC(Date())
SA1->(MsUnlock())
EndIf
// Incluir novo registro:
RecLock("SA1", .T.)
SA1->A1_FILIAL := xFilial("SA1")
SA1->A1_COD := "999999"
SA1->A1_NOME := "Cliente novo"
SA1->(MsUnlock())Pegadinhas
- Esquecer MsUnlock: trava a tabela ate fim da transacao/sessao. Outros usuarios ficam esperando.
- Em If/Else: o
MsUnlocktem que estar GARANTIDO. Coloque DEPOIS doEndIf, nao dentro de um dos branches. - Begin Transaction: pra operacoes criticas, embrulhe
RecLock/MsUnlockem transacao pra rollback automatico em erro. - Inclusao na filial certa: sempre setar
FILIAL := xFilial("ALIAS")ao incluir.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cAlias | Character | sim | Alias da tabela (ex: 'SA1') |
lInclusao | Logical | sim | .T. = inclui novo registro, .F. = altera o corrente |
Exemplos
Update simples
RecLock("SA1", .F.)
SA1->A1_OBSERVA := cNovaObs
SA1->(MsUnlock())