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.
Question
fireblade
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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.