Duplicidade

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

MikeKlr
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 17 Mar 2005 14:24
Localização: SP

Duplicidade

Mensagem por MikeKlr »

Amigos Clippeiros,

Tenho um sistema relativamente pesado em clipper 5.3 + blinker + CDX + w2k server, ele tem um DBF principal que hoje está com aprox 400MB e 1.200.000 registros, tudo está funcionando normalmente nos acessos da rede em todas as rotinas.

Porém ultimamente vem acontecendo um problema que não consegui solucionar, o cenário é o seguinte :
São vários computadores cadastrando clientes ao mesmo tempo, uso arquivos .mem para controlar a autonumeração do código dos clientes e orçamentos, abro o .mem, pego o nro atual, adiciono +1 no nro, e gravo. o problema é que algumas vezes na semana está dando uma duplicidade, acho que por ser vários cadastrando ao mesmo tempo, coicide o milisegundo exato da gravação do .mem de 2 ou 3 terminais ao mesmo tempo e grava errado.

Gostaria de saber como vocês fazem pra controlar autonumeração? (sem usar recno() ou go bottom)

Desde já agradeço.
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Amigo eu faço exatamente como vc... só que eu uso um DBF só p/ controlar a numeração.
Abro com RLOCK(), pego o número jogo p/ memória, incremento 1 e gravo, UNLOCK para o próximo usuário...

Caso o numero não seja usado... eu dou como perdido...

Comigo funciona... não se vai te ajudar...
Editado pela última vez por Augusto em 18 Mar 2005 10:52, em um total de 1 vez.
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem por Hasse »

Bom dia amigos.

Eu uso da seguinte forma:

ARQLOCK()
&&................. nenhum outro usuário tem acesso ao arquivo para fazer alterações.
APPEND BLANCK
UNLOCK
&& .................liberar o arquivo para todos os usuários.
4) RLOCK()
&& .................para o usuário local fazer o seu trabalho.
5) UNLOCK
&& .................Libera o registro.
6) DBCOMMIT()
&& .................Dá visibilidade do dados à rede.

Os 4 primeiros comandos efetuam as operações muito rapidamnente. Nem se percebe o que está ocorrendo.

Fizemos vários teste preparando 5 terminais para fazerem a solicitação ao mesmo tempo, e a um comando todos os 5 foram acionados, os 5 novos registros foram adicionados, e somente um ou dois chegam a fazer a 2ª tentativa (ver abaixo, a explicação 'tentativas').

Observação: Para os comandos ARQLOCK(), APPEND BLANCK, RLOCK() uso funções que eu criei, que fazem 10 tentativas, uma a cada 0,5 segundo, e somente depois retornam mensagem informando o ocorrido para que seja tomada a decisão pertinente.

O sistema está rodando fazem 8 anos e ainda não tive qualquer número duplicado.

Espero ter contribuído com algum detalhe.

Hasse.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
MikeKlr
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 17 Mar 2005 14:24
Localização: SP

Mensagem por MikeKlr »

obrigado pelos comentários, irei testar substituindo o .mem que uso atualmente por um DBF pra armazenar o "próximo número"

Sucesso a todos.
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »



________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Responder