Sistema Multiusuário

Delphi

02/03/2004

Colegas,

Estou fazendo uns testes com um sistema que desenvolvi e toda vez que tento abrir o sistema em duas máquinas simultaneamente aparece msgs de erro, indicando que determinada base de dados já está aberta.

Como faço para resolver este problema uma vez que o objetivo é trabalhar com multiusuário ?? Utilizo tables e geralmente no onactivate ou onshow de cada form solicito para que a tabela seja aberta:

table1.open;

Evidentemente que posteriormente irei usá-la para salvar uma informação, editar, excluir, etc...

É preciso abrir uma table para salvar, editar, inserir dados ??

Obrigado

CBier


Cbier

Cbier

Curtidas 0

Respostas

Henry

Henry

02/03/2004

Amigo c vc esta usando o BDE, tenho a config dele aqui......

Path do Alias F:\DIRETORIO
Estação n.2
NET DIR F:\
Path do Alias F:\DIRETORIO
Estação n.3
NET DIR F:\
Path do Alias F:\DIRETORIO
Não é aconselhável que os aplicativos feitos em Delphi 1, sejam executados no servidor da base de dados, pois o PARADOX apresenta problemas de corrupção de arquivos e índices neste caso. É aconselhável que no servidor você coloque somente as bases de dados. Mas caso você tenha necessidade de utilizar o servidor você pode utilizar uma solução alternativa para o problema do PARADOX, esta solução esta sendo satisfatória na maioria dos casos. Digamos que a letra do drive de rede que você vai acessar o servidor, seja a letra ´F:´, então, faça o seguinte: Coloque a linha abaixo no arquivo AUTOEXEC.BAT, do servidor.
SUBST F: C:
Configure o BDE do servidor para que ele acesse o drive ´F:´
Esta linha deverá ser colocada apenas no servidor, com isso você passa a ter em seu servidor, um drive virtual para acessar o
drive C:, evitando o problema do PARADOX.
No Delphi 2 e Delphi 3, você deve utilizar um instalador de programas. No CD do Delphi 2 e Delphi 3 existe um instalador
chamado InstallShield para fazer a instalação e configuração do aplicativo e do BDE.
Veja abaixo os exemplos da configuração do BDE p/ Delphi 2 e 3:
Servidor Estação 1
NET DIR \\SERVIDOR\C NET DIR \\SERVIDOR\C
PATH DO ALIAS \\SERVIDOR\C\DIRETORIO PATH DO ALIAS \\SERVIDOR\C\DIRETORIO
LOCAL SHARE TRUE LOCAL SHARE FALSE
Estação 2 Estação 3
NET DIR \\SERVIDOR\C NET DIR \\SERVIDOR\C
PATH DO ALIAS \\SERVIDOR\C\DIRETORIO PATH DO ALIAS \\SERVIDOR\C\DIRETORIO
LOCAL SHARE FALSE LOCAL SHARE FALSE
DICA:
O executável pode ser colocado em cada máquina da rede, diminuindo assim o tráfego de rede.


GOSTEI 0
Cbier

Cbier

02/03/2004

Não haverá problemas com as tabelas abertas ao mesmo tempo??
Se forem gravadas ao mesmo tempo não ocorrerá erros ??

No caso de uma busca através de um DBLookUp, pode ocorrer erro ??

CBier


GOSTEI 0
Marconi

Marconi

02/03/2004

As configurações acima estão ok!

Mas cuidado para mudar o usuário da rede. Se voce entrar nas duas máquinas com o mesmo usuário, o BDE pode se equivocar.

Fique atento. No diretório ´NET DIR´ da rede (que deve ser o mesmo para as duas máquinas - e designados pela mesma letra) o BDE vai gravar um arquivo PDOXUSRS.NET. Este arquivo gerencia os bancos de dados, que podem até estar em outros diretórios. Em cada banco de dados este arquivo pode até gerar mais dois outros; PDOXUSRS.LCK que gerencia os registros que estão em edição nos arquivos Paradox e PARADOX.LCK que gerencia a mesma coisa em arquivos dBase.

Normalmente estes últimos são automaticamente apagados quando nenhum usuário está usando. Mas voce pode apaga-los manualmente que serão gerados novamente.

O arquivo PDOXUSRS.NET não se apagará, mas também pode ser apagado manualmente quando ninguem estiver usando. Ele se autocriará.

A definição do diretório ´NET DIR´ é importante pois se voce tentar entrar no banco de dados onde já existam os arquivos LCK gerados por outro arquivo PDOXUSRS.NET vai dar páu.

Melhor é colocar o executável no servidor. Pois assim voce atualiza sempre em um só lugar e não corre o risco de ter duas versões diferentes do programa.

Marconi


GOSTEI 0
Marconi

Marconi

02/03/2004

Completando:

Quando alguem está editando um registro, ele só existe na máquina do usuário, mas não no banco de dados ainda. Porém se outro usuário tentar editar o mesmo registro o arquivo LCK vai registrar que este registro já está em edição e dará uma mensagem de registro bloqueado para edição.

Embora você tenha dado um Table.post ele ainda não vai ser enxegado pelo outro usuário até voce dar um Table.refresh. Veja que antes disso mesmo que o outro usuário de um Table.refresh, este registro ainda não vai ser atualizado para ele.

O arquivo PDOXUSRS.NET não precisa ser apagado nunca.

Espero ter ajudado

Marconi


GOSTEI 0
POSTAR