Eu escolhi outra abordagem para a próxima situação.
Existe um banco de dados do Excel, digamos, DataBase.xls e um programa do Excel Programs.xlt, ambos não são compartilhados e residem em um diretório de um servidor / disco de rede. Cada usuário usa uma cópia do modelo de programas, portanto, Programs1.xls para o primeiro usuário e Programsn.xls para o n-ésimo usuário.
As regras são:
. muitas leituras simultâneas ao mesmo tempo são possíveis
. apenas 1 gravação é possível sem leituras simultâneas (a fim de evitar leituras de registros atualizados "pela metade")
. as ações de leitura e gravação são padronizadas e mantidas tão curtas quanto possível
A solução que eu escolhi é um Árbitro / Árbitro / Árbitro / Árbitro - eu chamei de Árbitro.xls.
É um arquivo de excel compartilhado e reside no mesmo diretório mencionado acima e é muito pequeno: só consiste em 2 campos - um contador de leitura nRead e um contador de gravação nWrite.
Todo usuário que deseja acessar o DataBase envia ao árbitro uma solicitação de leitura ou gravação.
No caso de uma solicitação de leitura, o árbitro verifica / espera até que não haja mais ações de gravação (nWrite = 0) e conceda uma leitura para esse usuário aumentando o contador nRead por 1. Após uma ação de leitura ser concluído, o contador nRead é diminuído em 1.
No caso de um pedido de gravação, o árbitro verifica / espera até que não haja mais ações de gravação ativas (nEscrita = 0), depois disso o Árbitro verifica / aguarda até que todas as ações de leitura sejam feitas (nRead = 0) e então concede a solicitação de gravação e defina o contador nWrite como 1. Após a ação de gravação, o contador de gravação nWrite é definido como 0. Depois disso, o árbitro pode conceder novas solicitações de leitura e / ou gravação. As esperas são implementadas com a função "Sleep" no Lib "Kernel32" com etapas de 1 segundo (1000 milissegundos). As etapas também são contadas e após 6 etapas / segundos uma solicitação de leitura é expirada, uma solicitação de gravação é expirada após 10 etapas / segundos, mas isso depende muito de muitos fatores e deve ser encontrado na prática.
Isso tudo funciona muito bem em um ambiente do Excel 2003, Windows XP com no máximo 14 usuários simultâneos. Esses usuários são gerentes trabalhando em diferentes locais espalhados por uma área de 5.000 quilômetros quadrados e usam a ferramenta todos os dias para atualizar Informações de Competências Médicas, Informações Pessoais, Compromissos etc. para seus funcionários (média de 15 funcionários por gerente)