Ir para conteúdo
Fórum Script Brasil
  • 0

Incrementar contador


fireblade

Pergunta

Olá!

Tenho um campo numa tabela chamada 'numeracao' que guarda o número do último documento da tabela documentos. Quando quero inserir um novo documento na tabela MOVIMENTOS, tenho que ler o numero do ultimo documento na tabela numeração com o comando: SELECT numero FROM NUMERACAO WHERE doc='STK'. Depois incremento o numero e executo o comando: UPDATE NUMERACAO SET numero="var_numerolido" WHERE doc='STK'. Depois é só inserir uma linha nova na tabela movimentos em que o número do documento é o numero lido da tabela numeracao.

Por vezes quando mais que utilizador está a trabalhar, ao inserir uma linha nova na tabela movimentos, dá o erro "As alterações que pediu à tabela não foram bem sucedidas porque iriam criar valores duplicados no índice, na chave primária ou na relação", pois o numero do documento é chave primaria da tabela movimentos. Ao que parece é que quando um PC lê o numero da tabela numeracao e antes de fazer update com o novo numero, um outro PC lê o mesmo numero da tabela numeracao, ao escrever na tabela movimentos um dos dois PC's irá dar erro pois já existe uma linha com esse numero.

Poderei fazer algo para evitar que isto aconteça? É possível bloquear a tabela numeração enquanto um PC lê o numero e faz o update, de modo a que mais nenhum PC consiga ler o numero enquanto a tabela não for actualizada com o novo numero.

Obrigado :)

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Muda o campo pra numeração automática, daí o banco coloca o valor e não o sistema. E divide em Front e Back End, daí seu sistema precisa conectar no banco, e se for multiusuário, ao gravar dados eles precisarão se conectar e enviar uma consulta e o banco gerencia isso

Link para o comentário
Compartilhar em outros sites

  • 0
Muda o campo pra numeração automática, daí o banco coloca o valor e não o sistema. E divide em Front e Back End, daí seu sistema precisa conectar no banco, e se for multiusuário, ao gravar dados eles precisarão se conectar e enviar uma consulta e o banco gerencia isso

Não posso mudar o campo para numeração automática porque na tabela MOVIMENTOS os campos 'numero documento' e 'tipo documento' são chaves primárias, logo eu preciso de escrever o numero do documento, pois podem existir dois numeros de documentos iguais para tipo de documentos diferentes.

Link para o comentário
Compartilhar em outros sites

  • 0

acho que ta errado a questão da tabela numeração, deveria haver tabela documento pois um documento tem um número sequencial não um número sequencial tem um documento, daí uma tabela documento emitido onde você coloca o código do documento e seu número sequencial. Daí você separa seu DB e sua INTERFACE e coloca nas regras de negócio que o número sequencial é gerado na gravação, ou seja, o usuário preenche todo o documento e na hora de salvar o sistema busca o próximo número livre e depois da uma msg pro usuário informando que o dado foi gravado com sucesso com o número x

Com isso você busca o próximo número

SELECT IIF(ISNULL(MAX(TDE.NumeroSequencial)), 0, MAX(TDE.NumeroSequencial)) + 1 AS ProximoNumeroSequencial FROM TabelaDocumentoEmitido AS TDE WHERE TDE.CodDocumento = 1;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...