4D v14.3Record Locking |
||
|
4D v14.3
Record Locking
Record Locking
4D e 4D Server administram automaticamente os banco de dados evitando conflitos entre processos ou entre usuários. Dois usuários ou dois processos não podem modificar o mesmo registro ou objeto ao mesmo tempo. Entretanto, o segundo usuário ou processo pode acessar simultaneamente ao registro em modo apenas leitura. Há muitas razões para utilizar os comandos multi-usuário:
Nas seguintes seções, como convenção, a pessoa que realiza uma operação no banco de dados multi-usuários é o usuário local. As outras pessoas que otimizam o banco de dados são os outros usuários. A discussão é desde o ponto de vista do usuário local. Da mesma forma, desde o ponto de vista multi-processo, o processo executando uma operação no banco de dados é o processo atual. Qualquer outro processo em curso de execução é referenciado como sendo outro processo. A discussão é desde o ponto de vista do processo atual. Um registro bloqueado não pode ser modificado pelo usuário local ou o processo atual. Um registro bloqueado pode ser carregado, mas não modificado. Um registro é bloqueado quando um dos outros usuários ou processos carrega o registro para realizar uma modificação ou quando o registro está empilhado. Apenas o usuário que modifica o registro vê o registro como desbloqueado. Todos os outros usuários e processos vem o registro como bloqueado e portanto não disponível para modificação. Uma tabela deve estar em modo leitura/escrita para que um registro seja carregado como desbloqueado. Cada tabela de um banco de dados está em modo leitura/escrita ou em modo só leitura para cada usuário e processo do banco de dados. Apenas leitura significa que os registros da tabela podem ser carregados mas não modificados. Leitura/escrita significa que os registros da tabela podem ser carregados e modificados se nenhum outro usuário/processo tenha bloqueado o registro previamente. Note que se muda o estado de uma tabela, a mudança é realizada para o próximo registro carregado. Se já houver um registro carregado quando muda o estado da tabela, o registro não é afetado pela mudança de estado. Quando uma tabela está em modo só leitura e um registro é carregado, o registro está sempre bloqueado. Em outras palavras, o registro pode ser mostrado, impresso e utilizado, mas não modificado. 4D define automaticamente uma tabela em modo só leitura para os comandos que não precisam de acesso de escrita aos registros. Estes comandos são: DISPLAY SELECTION, DISTINCT VALUES, EXPORT DIF, EXPORT SYLK, EXPORT TEXT, _o_GRAPH TABLE, PRINT SELECTION, PRINT LABEL, QR REPORT, SELECTION TO ARRAY, SELECTION RANGE TO ARRAY. Pode saber em qualquer momento o estado de uma tabela utilizando a função Read only state. Quando uma tabela está em leitura/escrita e se carrega um registro, o registro estará desbloqueado se nenhum outro usuário tiver bloqueado o registro primeiro. Se o registro está bloqueado por outro usuário, o registro é carregado como um registro bloqueado que não pode ser modificado pelo usuário local. Uma tabela deve estar em modo leitura/escrita e o registro carregado para que seja desbloqueada e portanto modificável. Pode utilizar os comandos READ ONLY e READ WRITE para mudar o estado de uma tabela. Se deseja mudar o estado de uma tabela para voltar um registro de apenas leitura ou leitura/escrita, pode executar o comando antes de carregar o registro. Todo registro já carregado não é afetado pelos comandos READ ONLY e READ WRITE Cada processo tem seu próprio estado (só leitura ou leitura/escrita) para cada tabela no banco de dados. Para que o usuário local possa modificar um registro, a tabela deve estar em modo leitura/escrita e o registro deve ser carregado e desbloqueado. Se uma tabela está em modo leitura unicamente, todo registro carregado desta tabela está bloqueado. Um registro bloqueado não pode ser guardado ou apagado desde outro processo. O modo apenas leitura é o modo recomendado porque autoriza aos outros usuários a carregar, modificar e logo guardar o registro. Quando termine as modificações a um registro, o registro deve ser liberado (e portanto desbloqueado para os outros usuários) com UNLOAD RECORD. Se um registro não é liberado, ele permanecerá bloqueado para os outros usuários até que um novo registro atual seja selecionado. Mudar o registro atual de uma tabela desbloqueia automaticamente o registro atual anterior. Deve chamar explicitamente a UNLOAD RECORD se não mudar o registro atual. Este princípio aplica aos registros existentes. Quando um novo registro é criado, pode ser guardado sem importar o estado da tabela a qual pertence. Nota: quando se utiliza em uma transação, o comando UNLOAD RECORD descarrega o registro atual só para o processo que administra a transação. Para os outros processos, o registro permanece bloqueado até que a transação não seja confirmada (ou cancelada). O seguinte exemplo mostra o loop mais simples para carregar um registro não bloqueado: READ WRITE([Clientes]) ` Coloca a tabela em modo leitura/escrita O loop continua até que o registro seja desbloqueado. O seguinte exemplo utiliza o loop anterior para carregar um registro desbloqueado e modificar o registro: READ WRITE([Inventario]) O comando MODIFY RECORD notifica automaticamente ao usuário se um registro estiver bloqueado e evita que o registro seja modificado. O seguinte exemplo evita esta notificação automática testando o registro primeiro com a função Locked. Se o registro estiver bloqueado, o usuário pode cancelar. Este exemplo prova eficientemente se o registro atual está bloqueado para a tabela [Comandos]. Se estiver bloqueado, o processo é atrasado pelo método por um segundo. Esta técnica pode ser utilizada em um desenvolvimento multi-usuário ou multi-processo: Repeat
Certos comandos da linguagem realizam ações particulares quando encontram um registro bloqueado.
|
PROPRIEDADES
Produto: 4D VER TAMBÉM
LOAD RECORD ARTICLE USAGE
Manual de linguagem 4D ( 4D v12.4) Parent of : Record Locking ( 4D v14 R3) |