PROBLEMAS COM USO MULTIUSUARIO

DINEY 09/02/2010 09:26:31
#333970
Bom dia...

Pessoal estou com um problema no uso do meu sistema quando usado por mais de um usuario, tenho um sistema em DAO e uso Access97 que roda a mais de 5 anos sem problemas em desktop e normalmente usado por um usuario, mas algum tempo atras coloquei o sistema em rede e inicialmente em duas maquinas e agora em 3 maquinas, e a partir de então começou a dar alguns probleminhas rsrsrs... começou a aparecer cadastros de clientes duplicados, por algum motivo na hora de salvar ou alterar alguns cadastros esta salvando no NSU de outros clientes ou seja substituindo cadastros existentes.

Eu uso por exe.:
[Ô]Set RSBoletos = DbCAS.OpenRecordset([Ô]boletos[Ô], dbOpenDynaset)[Ô]

no [Ô]Form_Load[Ô], seria melhor usar apenas no ato de [Ô]salvar[Ô] ou [Ô]consultar[Ô] [Ô]excluir[Ô]
isso ajudaria?

Sei que ADO e outro tipo de banco dados é melhor, mas de imediato preciso resolver o problema com o que tenho, pois migrar tudo vai demandar um tempo razoavel e não da pra fazer isso de imediato.

Alguem poderia me dar uma ideia.

Claudiney
www.cassystems.com.br
SINKERTEC 09/02/2010 10:12:40
#333973


Cara.....na vdd assim

Em qual momento vc percebeu a zica? é na inclusão do q? alteração do q?
DINEY 09/02/2010 11:03:16
#333979
SINKERTEC, valeu pela atenção...

não sei ao certo quando, mas deduzi que seja na hora de fazer alguma alteração no cadastro ou inclusão de num novo cadastro, quando usado simultaneamente.

Não consegui detectar o momento do erro.

Claudiney
www.cassystems.com.br
SINKERTEC 09/02/2010 11:41:49
#333986


Olha..eu penso assim

Trabalhando do jeito que vc está trabalhando....em cada tabela que pode ser aberta simultaneamente...teria q criar um campo flag, onde por exemplo se eu puxar o cliente código 2 pra alterar , esse flag = 1...e nenhum outro usuario conseguira mexer nesse cadastro até o flag voltar a 0

qto a inserção, o certo é criar codigos de autonumeração..aí mata essse bo

boa sorte
DINEY 09/02/2010 11:59:34
#333989
SINKERTEC,

muito interessante sua ideia, mas vc poderia me mostrar ou dar um exemplo de como implantar este metodo de flag no mdb?

não tenho idéia de como fazer,

Claudiney
www.cassystems.com.br
SINKERTEC 09/02/2010 12:41:50
#334004


Cara..seria algo mais ou meno assim

Vc tem a tabela clientes com os campos lá e tal, certo? Crie, só mais um campo (Flag)

Toda vez que incluir um Cliente, no registro, coloca o flag como 0 (zero)

Qdo a pessoa chama o registro do cliente pra alterar, vc faz um edit no registro, simplesmente pra atualizar o flag para 1..

e claro..na chamada que vc usa pra trazer o registro a ser alterado, vc coloca sendo q se o flag = 1, retorne a msg para o usuário ( Cliente sendo alterado por outro usuário, aguarde)

Qdo o primeiro usuário confirmar a alteração, atualiza junto o flag para 0, liberando o registro

entendeu?
MRADO.VB 09/02/2010 14:27:43
#334016
Ao Sinkertec...

E se o primeiro usuário não confirmar a alteração e deixar o registro trancado?

O que acontece se o primeiro usuário não confirmar a alteração e a máquina dele trancar?
SINKERTEC 09/02/2010 14:36:58
#334017


Na vdd assim...se n fizer uma coisa, fara outra certo?

Caso n confirme...tipo...saia da tela ou n cofirme a alteração, basta dar um edit novamente...retornando o flag para zero, liberando o registro da mesma forma!!

Ou por acaso, vc quer dizer se a luz acabar por exemplo e o registro ficar trancado?


MARCELO.TREZE 09/02/2010 14:43:46
#334018
Resposta escolhida
Eu acredito que esteja acontecendo o seguinte:

duas pessoas acessam praticamente ao mesmo tempo o banco de dados, e se vc possuir um campo que seja autonumerado, então as duas irào pegar o mesmo id, só que ao salvar uma irá salvar com os dadod e um cliente e outra com os dados de outro cliente a que salvar por ultimo prevalecerá.

será que não é isto

bom se for isso vc pode tentar abrir o banco para que apenas uma pessoa mexa por vez

[ô]Quando for preciso usar o banco de dados utilize esse método de
[ô]abertura de banco

On Error GoTo TrataErro [ô]Caso ocorra um erro ele irá para a rotina TrataErro
Set banco = OpenDatabase(App.Path & [Ô]\db5.mdb[Ô]) [ô]Abro o banco de dados
Set tborc = banco.OpenRecordset([Ô]PedOrc[Ô], dbOpenTable, dbDenyWrite) [ô]Abro a tabela como dbDenyWrite - ou seja o banco de dados ficará disponível apenas para essa pessoa .


TrataErro: [ô]Caso de erro ( outra pessoa tenta abrir a base de dados virá para essa rotina )
If MsgBox([Ô]Não é possível efetuar esta operação no momento. Aguardar?[Ô], vbYesNo + vbQuestion, [Ô]Orçamentos e Pedidos[Ô]) = vbYes Then [ô]Faço um pergunta se deseja esperar a liberação da base de dados
Resume [ô]Se quiser esperar, mando o Resume para que o programa continue da linha que deu o erro
Else [ô]Senão
Unload Me [ô]Fecho a tela
End If


[ô]O que acontece com esse código é o seguinte. 2 usuários vão abrir a
[ô]mesma tela, para gravar um código de cliente ( exemplo ). Pela lógica
[ô]você não pode ter o mesmo número de registro para 2 clientes distintos,
[ô]correto? Intão, essa rotina faz com que por mais preciso que os 2
[ô]apertem o botão de incluir ( exemplo do cliente ) nunca abrirá nas 2
[ô]máquinas. Um deles terá a base aberta, o outro irá para a rotina de erro
[ô]até que a liberação da base seja feita.

[ô]Problemas: se você abrir a base e esquiecer de fechá-la, ninguem da sua
[ô]rede conseguirar acessar a tabela enquanto a mesma estiver aberta
[ô]nesse modo.

[ô]Soluções: garantia de que quando você for incluir, alterar ou excluir um
[ô]registro, saberá que o mesmo será feito sem nenhum problema.

[ô]PS: abre o banco de dados desse jeito ( mostrado acima ) apenas para
[ô]rotinas de inclusão, alteração e exclusão de registros. Para consulta
[ô]troque o dbDenyWrite para dbReadOnly.

veja se ajuda
DINEY 10/02/2010 10:33:30
#334070
MARCELO_TREZE,

bom dia...

olha perfeita sua idéia é o que eu preciso, muito obrigado.

Agora uma pergunta:
eu uso o [Ô]banco.OpenRecordset[Ô] no [Ô]Form_Load[Ô], o correto então é usar apenas no ato de [Ô]salvar[Ô] ou [Ô]consultar[Ô] [Ô]excluir[Ô] ?

mais uma vez obrigado.

Claudiney
www.cassystems.com.br
MARCELO.TREZE 10/02/2010 10:43:19
#334071
seria o ideal, pois assim nào correria o rsico de manter o recordset aberto, ok
lembre-se apenas de abri-lo e fecha-lo para não bloquear o acesso de outro usuário.
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas