4D v16.3

SET QUERY AND LOCK

Página Inicial

 
4D v16.3
SET QUERY AND LOCK

SET QUERY AND LOCK 


 

SET QUERY AND LOCK ( bloq ) 
Parâmetro Tipo   Descrição
bloq  Booleano in True = bloquear os registros encontrados por pesquisas; False = Não bloquear os registros

O comando SET QUERY AND LOCK permite solicitar o bloqueio automático dos registros encontrados por todas as pesquisas que seguem o chamado deste comando na transação atual. Isso significa que os registros não podem ser modificados por um processo diferente ao processo atual entre uma pesquisa e a manipulação de resultados.

Por padrão, os registros encontrados pelas pesquisas não estão bloqueados. Passe True no parâmetro bloq para ativar o bloqueio.

Este comando deve imperativamente ser utilizado no interior de uma transação. Se for chamado fora deste contexto, é gerado um erro. Isso permite um melhor controle do bloqueio de registros. Os registros encontrados permanecerão bloqueados até que a transação termine ( confirmada ou cancelada). Depois que a transação se completa, todos os registros são desbloqueados.

Os registros estão bloqueados para todas as tabelas na transação atual.

Quando uma instrução SET QUERY AND LOCK(True) for executada, os comandos de pesquisa (por exemplo QUERY) adotam um funcionamento específico se for encontrado um registro bloqueado:

- A pesquisa se detém e a variável sistema OK toma o valor 0,
- A seleção atual fica vazia,
- O conjunto sistema LockedSet contém o registro bloqueado que causou que a pesquisa fosse interrompida.

Portanto, neste contexto é necessário testar o conjunto LockedSet definido depois de uma pesquisa infrutífera (seleção atual vazia ou variável OK em 0) para determinar a causa da falha.

Chame SET QUERY AND LOCK(False) com o objetivo de desativar o mecanismo posteriormente.

SET QUERY AND LOCK modifica unicamente o comportamento dos comandos de pesquisa em outras palavras:

Entretanto, SET QUERY AND LOCK não afeta os outros comandos que modificam a seleção atual tais como as ALL RECORDS, RELATE MANY,  etc.

Exemplo  

Neste exemplo, não é possível apagar um cliente que teria sido passado da categoria “C” a categoria “A” em outro processo entre QUERY e DELETE SELECTION:

 START TRANSACTION
 SET QUERY AND LOCK(True)
 QUERY([Clientes];[Clientes]Categoria=C)
  `Neste momento, os registros encontrados são bloqueados automaticamente por todos os outros processos
 DELETE SELECTION([Clientes])
 SET QUERY AND LOCK(False)
 VALIDATE TRANSACTION

Se o comando não é chamado no contexto de uma transação, um erro é gerado.



Ver também 

QUERY

 
PROPRIEDADES 

Produto: 4D
Tema: Pesquisas
Número 661

Este comando modifica o conjunto sistema LockedSetEste comando modifica a variável sistema ErrorThis command can be run in preemptive processes

 
HISTÓRIA 

Criado por: 4D v11 SQL

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)