Eolo escreveu:Isso acontece em todos os meus clientes. Por ex., duas estações podem incluir nomes (on the fly) no mesmo ACLIE.dbf:
- a estação A entra com o suposto novo nome (GETs)
- se o usuário manda gravar, eu rodo o FLOCK()...
(nessa hora, o arquivo continua disponível, pra consulta, na estação B)
... e SEEK no nome. Se já existir, UNLOCK e mensagem de erro na tela. Se não existir, APPEND, COMMIT e UNLOCK.
Tudo bem. A questão que levantei era pra se pensar na necessidade do travamento do arquivo. Acho que necessidade real não existe. Raciocine comigo. Se, no momento que antecede a gravação, você pesquisar pelo nome que está para ser incluído e ele não existir, qual é a possibilidade dele ser incluído noutra estação na fração de segundos que a gravação tomará? A possibilidade é pequena. Muito pequena.
Por outro lado, se há situações em que dois nomes poderiam ser incluídos ao mesmo tempo, de duas uma: ou a empresa é muito mal organizada ou, havendo uma boa justificativa para isso, você teria de ser muito azarado para que a duplicidade ocorra.
Eu tenho situações assim. Não com relação ao nome, mas ao CNPJ. Um fornecedor, por exemplo, deverá ser único. Jamais travo o arquivo todo. No momento que antecede a gravação eu busco pelo CNPJ. Não existindo, gravo. Se existir, páro e aviso da duplicidade. Isso nunca acontece, mas tomo esse cuidado. E só. Já é suficiente. É extremamente remota a possibilidade de ocorrer duplicidade. Não só pela característica (não é toda hora que incluem fornecedores) mas também, e principalmente pela estatística que, neste caso, está a meu favor.
Por outro lado, se você travar o arquivo todo por conta de uma simples inclusão, dependendo da rede, você estará "matando" a performance das demais estações. Isso tudo motivado por um medo injustificado, ou excesso de zelo, como queira chamar.
É claro que eu não quis dizer que o seu procedimento para resolver este problema está errado. É a sua forma de resolvê-lo.
[]'s
Maligno
http://www.buzinello.com/prg