Interbase em rede
Tenho um cadastro de requsiciao o campo idrequisicao que é mostrado neste form, como o codigo
No meu botao incluir vou um select max(idrequisicao) e gravo este codigo,
ate ai tudo bem, esta fazendo correto,
Mas acontece quando a estacao 1 e a estacao 2 da rede se conecta ao mesmo tempo, é dado erro
de primary key pois o codigo esta errado.
Obs. Nao posso usar o generator do banco, pois se a o generator esta no nro 1000, e se
o usuario incluir um novo registro ira para 1001, ate ai blz, o usuario exclui o 1001, e
vai incluir mais um novo registro o generator ira para 1002, sendo que nao posso perder
essa numeracao (No caso 1001)
Como eu posso resolver isso
No meu botao incluir vou um select max(idrequisicao) e gravo este codigo,
ate ai tudo bem, esta fazendo correto,
Mas acontece quando a estacao 1 e a estacao 2 da rede se conecta ao mesmo tempo, é dado erro
de primary key pois o codigo esta errado.
Obs. Nao posso usar o generator do banco, pois se a o generator esta no nro 1000, e se
o usuario incluir um novo registro ira para 1001, ate ai blz, o usuario exclui o 1001, e
vai incluir mais um novo registro o generator ira para 1002, sendo que nao posso perder
essa numeracao (No caso 1001)
Como eu posso resolver isso
Evandro_araujo
Curtidas 0
Respostas
Bruno_fantin
16/11/2004
Você tem que fazer essa consulta no momento que o usuario aperta o botão salvar e mesmo assim fazer ela dentro de transação...
GOSTEI 0
Gandalf.nho
16/11/2004
Você tem que fazer essa consulta no momento que o usuario aperta o botão salvar e mesmo assim fazer ela dentro de transação...
E mesmo assim não é garantido, pq outro pode acessar a tabela durante a transação e pegar o mesmo valor. A menos que você faça um tratamento de erro para incrementar o valor até achar um valor não duplicado. Infelizmente, generator é a única opção não problemática.
Mas pq você não pode perder a numeração? É pra auditoria ou coisa parecida?
GOSTEI 0
Bruno_fantin
16/11/2004
Logico que é garantido... Acessa a tabela em modo exclusivo... Enquanto você não der commit ou rollback a tabela fica indisponivel para qualquer coisa...
GOSTEI 0
Gandalf.nho
16/11/2004
Mas num ambiente multi-usuário não é uma prática muito boa...
GOSTEI 0
Bruno_fantin
16/11/2004
Garanto que é....
Ajudei a fazer um sistema que usava essa forma numa tabela que por dia recebia 20 mil novos registros (alguns manuais e outros de forma eletronica)...
E nunca deu nenhum problema e também nunca deixou a tabela travada tempo suficiente para causar timeout...
Ajudei a fazer um sistema que usava essa forma numa tabela que por dia recebia 20 mil novos registros (alguns manuais e outros de forma eletronica)...
E nunca deu nenhum problema e também nunca deixou a tabela travada tempo suficiente para causar timeout...
GOSTEI 0