Fórum Acesso Simultâneo à Dados em aplicações Cliente / Servidor #215649
20/02/2004
0
Gostaria de saber, se há como evitar isso. Tipo, qdo estiver incluindo em outro computador, dar um aviso de que este registro já foi incluído por outro usuário!
Desde já, muito obrigada !!!
Vivipeder
Curtir tópico
+ 0Posts
20/02/2004
Codigodelphi
Gostei + 0
20/02/2004
Vivipeder
Gostei + 0
20/02/2004
Vinicius2k
bem, vamos começar pelo seu autoincremento... que no IB não existe, a não ser através de triggers... como vc tah fazendo?
T+
Gostei + 0
20/02/2004
Vivipeder
- qdo abro a tela, busco na Tabela o último registro. Dele, pego o código e somo 1. No meu button ´Salvar´ eu verifico se este código já existe. Se existir, dou Update, senão Insert. É que a tela está estruturada de tal forma, que o código será um dos existentes, somente se apessoa ´consultar´ um registro. O campo do código é desativado para edição. Mas neste caso, na rede, não dá certo, pois como disse, em ambos os computadores, a tela é aberta no modo de inserção. Só que o primeiro q salvar correrá o risco de ter o registro modificado caso o computador do lado salve ´por cima´.
O problema está consistindo nisso, no computador ´X´ a tela abre com código, p ex, 1 e no computador ´Y´, a tela tbem abrirá com código 1. Isso se for ao mesmo tempo. O que acontecerá é que se ´X´ salvar primeiro e ´Y´ depois, o registro de código 1 será substiutido, ficando com as informações feitas em ´Y´.
O q posso fazer para controlar este acesso simultaneo usando este tipo de controle ??? Pensei em talvez numa rotina de verificação para ver se há mais um computador aberto na mesma tela, mas não há como, entende ?
Espero ter explicado um pouco melhor o meu problema.... Obrigada por estar me ajudando!!!
Gostei + 0
20/02/2004
Vinicius2k
Acho q entendi e a situação, em si é meio inesperada... perdõe-me caso eu não tenha entendido corretamente... mas veja a idéia :
então, sempre será insert caso o usuário não consulte o registro antes correto?
-> faça uma query com buscando o max do seu código e acrescentando 1 apenas na hora de salvar (max é mais rápido do que dar select em tudo e ir para o último registro)... para que ocorra o erro os dois usuários terão que clicar no botão salvar no mesmo milésimo de segundo... pouco provável... um risco infinitamente pequeno, mas é um risco...
eu fazia assim nos tempos do clipper e até mesmo com delphi+paradox pq não gostava de usar o autoincrement do paradox... NUNCA me aconteceu duplicação de código... tenho alguns sistemas trabalhado 10 ou mais terminais, o tempo todo, na mesma tela, inserindo registros, com esta estrutura...
espero ter ajudado...
Gostei + 0
20/02/2004
Vivipeder
Gostei + 0
20/02/2004
Vinicius2k
T+
Gostei + 0
25/02/2004
Thomaz_prg
crio uma tabela apenas para controle do código (ou códigos se for mais de um sistema), e na hora em que o usuario entre na tela de inserção, é incrementado o valor desta tabela, e repassado ao campo ´autoincrementável´.
Exemplo.
Estrutura da tabela de clientes
//
se tabcodigos estiver vazia, cadastra valor 1 e retorna
senão altera valor do campo ucodcli somando + 1 (ucodcli:=ucodcli+1).
//
daí a o campo codcli da tabela de clientes recebe o valor do campo ucodcli da tabela tabcodigos.
//
cod_cli = tabcodigos.ucodcli
nome
endereco
estrutura da tabela tabcodigos.
ucodcli
* No caso de se usar mais de uma tabela, cada campo da tabela tabcodigos será referante a uma tabela.
Sei que talvez não tenha ajudado, porém acho que é sempre bom conhecer várias formas de se fazer.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)