Caro Fábio Vazquez,
Vamos supor o bloqueio de um registro de uma tabela de controle de códigos automáticos, gostaria de seu comentário a respeito destas duas técnicas que apresentarei a seguir (o código está simplificado, apenas para dar uma idéia das formas utilizadas):
1) Transação
BEGIN TRANSACTION
UPDATE tabela SET campo = campo + 1 WHERE condicao
IF ERROR() <> 0
ROLLBACK
RETURN
ENDIF
END TRANSACTION
2) Bloqueio de registro
IF RLOCK()
REPLACE campo WITH campo + 1
UNLOCK
ENDIF
O que eu gostaria de saber é se, numa condição intensa de cadastramento de registros num banco de dados com geração automática de código chave para um registro, qual das técnicas acima melhor se aplicaria, sem perigo de retorno de códigos duplicados ou com o menor tempo de bloqueio possível (melhor se formar uma fila de "espera", de acordo com as requisições).
Lembro que este procedimento de geração automática de códigos seria executado no servidor, a partir de um componente COM, que receberia as requisições para geração do código de forma simultânea de várias estações na rede.
Onde o comando FLUSH poderia ajudar nestes procedimentos (se é que poderia ajudar)?
Tive problemas na geração de códigos automáticos quando utilizei o componente a partir da intranet, com aplicações VFP nas estações e também com o acesso pela WEB, via ASP, de forma simultânea.
O coponente trabalhava sob o MTS no servidor Windows NT Server 4.0 SP6a.
A requisição ASP vinha diretamente do servidor WEB.
Houveram casos de geração de códigos repetidos.
Daqui a alguns meses precisarei colocar novamente a aplicação no ar (intranet e Internet) e não gostaria de passar pelos mesmos problemas.
Grato no que puder comentar.
Grande abraço!
Carlos Moisés
Carlos Moisés