BLOQUEIO DE REGISTRO PARA EDICAO/GRAVACAO

SIDSIL 22/03/2010 19:23:55
#337660
Boa Noite Amigos

Criei uma rotina onde irei gerar um numero automatico de fatura.Toda vez que for gravar a fatura eu pesquisarei uma tabela que contem a numeracao e entao pegarei esse numero e somarei +1, para ter o proximo numero de fatura.

Entretanto o meu sistema roda em rede, portanto pode ser que mais de um usuario mande gravar ao mesmo tempo, portanto eu gostaria de bloquear o registro dessa tabela que contem o contador para que mais ninguem pudesse utilizar o numero que um usuario pegar em determinado momento, para evitar e claro 2 faturas com o mesmo numero.

Estou usando o VB6 com SQL Express 2005.

Obrigado e um Abraco
ROBIU 23/03/2010 05:18:22
#337675
Resposta escolhida
1. Coloca um campo [Ô]Status[Ô] na tabela que contem a numeração. Ex.
0 - Desbloqueio,
1 - BloqueioAdd,
2 - BloqueioEdit,

2. O código da fatura será gerado quando salvar a fatura. Assim Dois usuários podem preencher a fatura ao mesmo tempo, sem aguardar um finalizar. Note que o processo de gravação é feito em segundos e dificilmente dois usuários vão está gravando o mesmo segundo.

3. Quando Add, apenas altera o status para BloqueioAdd. Pode-se até implementar para saber o nome do usuário que está fazendo a operação, adicionando o campo user nesta tabela.

4. Quando gravar, verifica o status. Se 1 - BloqueioAdd, faz um loop com intervalo timer para tentar gravar nos cinco segundos seguintes, em uma tentativas a cada segundo. Caso não grave nesse intervalo, sai do loop, para evitar travar e pede para o usuario tentar novamente.

5. Quando Editar, não será possível mudar a numeração, então esse BloqueioEdite terá a finalidade de evitar que dois usuário edite a mesma fatura ao mesmo tempo. Neste caso, se o Status for 2 - BloqueioEdite, Vai dá a mensagem que a fatura já está sendo editada. Se colocou o campo user, ainda vai informar quem está editando.

6. Após cada operação finalizada com sucesso, muda o Status para 0 - Desbloqueio.

Tópico encerrado , respostas não são mais permitidas