Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Acesso simultâneo - Travando registros
Message
From
25/04/2002 16:42:26
 
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Miscellaneous
Thread ID:
00649119
Message ID:
00649339
Views:
9
>Alow! Alow! Alow!
>
>Eu não edito os arquivos DBF diretamente, não uso o ambiente de dados. Para fazer uma alteração em um registro eu faço:
>
>* Código LEITURA
>Select * from Tabela Where Codigo = 1 Into Cursor Resultado
>If Resultado.Status = "I"
>   MessageBox("Cliente Inativo")
>   Return .F.
>EndIf
>ThisForm.Codigo.Value = Resultado.Codigo
>ThisForm.Status.Value = Resultado.Status
>ThisForm.Nome.Value = Resultado.Nome
>
>E quando o usuário clica no botão salvar:
>
>* Código SALVAR
>m.Codigo = ThisForm.Codigo.Value
>m.Status = ThisForm.Status.Value
>m.Nome = ThisForm.Nome.Value
>If m.Inclusao
>   Insert Into Tabela (Codigo, Status, Nome) Values (m.Codigo, m.Status, m.Nome)
>Else
>   Update Tabela Where Codigo = m.Codigo Set Status = m.Status, Nome = m.Nome
>EndIf
>
>Tudo funciona muito bem, mas agora apareceu uma situação nova. O campo STATUS pode ter o conteúdo A ou I (de Ativo / Inativo). Uma vez inativo, eu não posso deixar ninguém alterar esse registro. E o que está acontecendo é o seguinte:
>1) O usuário JOÃO localizou o cliente 1 e pressionou o botão ALTERAR. Neste momento eu executei o código "LEITURA". O cliente 1 não está inativo.
>2) O usuário PEDRO localizou o mesmo cliente (1) e também pressionou o botão ALTERAR. O código "LEITURA" foi executado e o cliente 1 também não está inativo.
>3) Enquanto o usuário JOÃO altera o status de A para I, o usuário PEDRO está alterando o campo nome.
>4) O usuário JOÃO gravou. Agora, na base de dados eu tenho o cliente 1 como inativo, mas o usuário PEDRO já está alterando o registro pois a solicitação de alteração foi feita antes do usuário JOÃO gravar as alterações.
>5) O usuário PEDRO gravou os dados. Agora, na base de dados eu tenho o cliente 1 como ATIVO e com o nome alterado.
>
>O exemplo acima foi criado para exemplificar a seguinte necessidade:
>1) Eu não acesso diretamente o DBF, portanto não posso utilizar RLock()!
>2) Eu preciso bloquear a alteração do registro por mais de um usuário.
>3) Não posso "testar novamente" a condição do campo STATUS no momento de SALVAR pois se o usuário começou a alteração, ele deve terminar.
>4) Imagino que em bancos Client/Server deve ser assim que funciona. Como isso é tratado?
>
>PS: Essa situação está acontecendo em um lançamento de movimentação de estoque, onde a "entrada do pedido" não pode alterar um pedido que estiver "sendo entregue para o cliente". E quando a "entrada" estiver alterando o registro, o pessoal da "expedição" deve aguardar a finalização desta alteração para entregar o material correto.
>
>Alguma solução?
>
>[]s

Vc lembra do LOCK/UNLOCK, pois é, vc não usa mais o acesso ao arquivo para usar esta solução, então vc tem que encontrar um meio de marcar o registro quando alguém clicar em alterar e não permitir que outro entre na alteração tb. pode ser um campo logico...
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform