Fórum Pq não trava o registro?? #185489
01/10/2003
0
estou fazendo um programinha bem simples só pra aprender.. to com dois micros em rede...
fiz um programa com um bd em access..
neste programa uso um componente database, um table e um datasource
fiz uma conexão ODBC chamada controle.. liguei o database neste ODBC.
liguei a table ao database e o datasource a table.. correto não??
queria a atualização dos dados online, ou seja qdo um usuario incluir , a atualização se dá automaticamente no outro micro.. qdo dois usuarios tentarem editar o mesmo registro aparecer uma mensagem.. mas não consigo mesmo..
o problema da edição estou tentando resolver desta forma, mas não dá certo pq ele deixa alterar os dois, mas é logico dá erro qdo tento gravar.
try { para verificar o erro }
begin
dscontrole.autoedit:= true;
tblcontrole.edit;
btnincluir.Enabled:=false;
end;
except
on E: EDBEngineError do { o erro..}
begin
application.MessageBox(´Registro ja esta sendo usado...!´,´Aviso!´,mb_ok+mb_iconerror);
btnincluir.Enabled:=true;
end;
end;
----------------------
o problema de da atualização estou tentando fechar e abrir a tabela qdo gravo, mas dá erro tb..
-------------------
e para piorar qdo dois usuario incluem um registro ao mesmo tempo.. dá erro que key violation..
estou vendo todas as respostas já dadas neste forum , mas até agora nenhuma funcionou..
será que é erro de configuração ou o programa mesmo??
vou procurando aqui mas se vcs tiverem um caminho a me indicar agradeceria demais
obrigado
João Marcelo- JM :( :x :cry:
Jm
Curtir tópico
+ 0Posts
01/10/2003
Rfpsatin
cada banco implementa de uma forma. Oracle por exemplo é de uma forma diferente do Interbase. Consegui resolver o problema com o IB de uma forma totalmente diferente da com Oracle justamente por causa destas diferenças.
O IB não bloqueia os registros, deixa-os abertos... quem chegar primeiro leva e quem vier depois e tentar pegar da erro rs...
Há várias formas de tratar... os componentes de acesso direto são uma solução. No teu caso, da uma olhada como o access trabalha com bloqueio, procure trabalhar dentro de um bloco de transação, veja os n´;iveis deisolamento q o componente de acesso ao BD suporta, varie ele. Se nada + der certo, tente a seguinte gambiarra.
Antes de tentar acessar um registro, tente dar um update num campo especifico dela q vc sabe o valor padrão, se retornar um erro tipo deadlock, corra rs... dee uma mensagem de registro em uso e mande o camarada esperar... rs... é piada? não! é gambiarra.
P/ cadastrar, procure ver se há possibilidade de usar generators ou campod de auto incremento, isso ajuda um bocado.
Gostei + 0
01/10/2003
Jm
Pelo que vc falou o access trabalha da mesma forma que o interbase ou seja, quem pegar primeiro leva e o segundo leva o erro..
como vc resolveu isso com interbase?
e o que vc quer dizer com ´os componentes de acesso direto são uma solução´ o que seriam estes componentes de acesso direto?
valeu dinovo
Gostei + 0
01/10/2003
Rfpsatin
eu resolvi o problema com o interbase controlando transação e pela gambiarra q te descrevi
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)