Jump to content
Fórum Script Brasil
  • 0

Incrementar contador


fireblade

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...