BLOQUEIO AO ACESSAR TABELA NA BD

SURI 09/06/2015 18:53:55
#447562
Olá vbmaníacos,
Estou em fase de teste de uma aplicação que foi idealizada como mono-posto. Acontece que o meu cliente cresceu e a loja está maior e para atender a clientela carece de mais postos de facturação.

Comecei então algumas alterações no código e na estrutura do banco (sem claro afectar o que já existe). No entanto, o maior problema consiste no seguinte: ao fazer os teste para geração do número da nota fiscal, se pelo menos dois usuários pressionarem ENTER ao mesmo tempo o gerador de número sequencial atribui o mesmo número aos usuários distintos e quando passam para a fase de gravação da nota fiscal, obviamente que gera um erro, pois, o campo [Ô]nmr_nota[Ô] é UNIQUE.

Penso que devo abrir a conexão na hora de gerar o número da nota fiscal com algum bloqueio, mas nunca o fiz e por isso recorro ao fórum para que receba alguma dica/instrução. De um modo geral, uma chega nos bloqueios optimistas, pessismistas etc.

Uso .net e firebird 2.5
TUNUSAT 10/06/2015 08:11:26
#447579
Resposta escolhida
Suri,

Não manjo muito de Firebird. Mas este problema é clássico, pois é conceitual ... independente de Banco de Dados.

Existem algumas ideias para resolver o problema:
Você pode colocar [Ô]Auto Incremento[Ô] (https://social.msdn.microsoft.com/Forums/vstudio/pt-BR/d0b5190f-85a7-46cb-a74b-fcbc8cbe6d33/auto-incremento?forum=adoptpt) neste campo?
Você pode gravar a tabela para gravação e definir um tempo de intervalo para, por exemplo 3 tentativas de gravação?
Você está fazendo um [Ô]Select[Ô] para saber qual é o último número gravado. Ao tentar gravar e apresenta erro de violação de integridade de chave primária (pois alguém já usou este número) então você acrescenta mais 1 e tenta gravar de novo ... deixe em looping por 3 tentativas de gravação ... e depois pode fazer um [Ô]timer[Ô] de 3 segundos e tentar 3 vezes novamente ... caso o erro persista então aborte...
Pode usar o BeginTransaction, CommitTransaction e RollBackTransaction.

Pode ver em outros sites, independente do BD e da linguagem de programação:
============================================
PREVENIR MENSAGEM DE ERRO POR CHAVE PRIMARIA
http://www.vbmania.com.br/index.php?modulo=forum&metodo=abrir&id=365641&pagina=1
============================================
Duvida Erro de Chave primaria duplicada
http://javafree.uol.com.br/topic-882457-Duvida-Erro-de-Chave-primaria-duplicada.html
============================================
Chave duplicada
https://social.msdn.microsoft.com/Forums/pt-BR/129e8f5d-683a-472c-9aa4-fb6c80c24f64/chave-duplicada?forum=vsvbasicpt
============================================
chave primária duplicando
https://social.technet.microsoft.com/Forums/pt-BR/ccba785b-7f73-47e5-8078-1d1a21bb0711/chave-primria-duplicando
============================================

Se não conseguir aqui, pode tentar ver a resposta em sites mais específicos:
============================================
FIREBASE
http://www.firebase.com.br/artigo.php?id=1021
============================================
Módulo 4: Gerenciamento de Dados
http://www.profdamasco.site.br.com/SigApostilaGerenciamentoDados.pdf
============================================

Espero ter ajudado.

[][ô]s,
Tunusat.
Tópico encerrado , respostas não são mais permitidas