Programa em rede
23/05/2003
0
Só que está acontecendo um probleminha. :cry:
Quando edito ou incluo um registro se a outra máquina estiver com o progra aberto ele não mostra o novo dado.
Se eu fechar o programa e abrir novamente, ele mostra os dados atualizados.
O que faço?
Deboraborges
Posts
23/05/2003
Latrodectrus
primeiro vc vai colocar essas linhas no parametro de seu IBTransaction1
read_committed
rec_version
nowait
Depois coloque no evento afterPost e AfterDelete de cada Table ou DataSet...o codigo abaixo
IBTable.Database.ApplyUpdates([IBtable]);
IBTransaction1.CommitRetaining;
Naum esqueça para cada tabela ou DataSet,,
isso vai gravar seus dados fisicamente,
e beleza
Agora toda vez que vc der um post em seguida de um REFRESH também,
ex:
Ibtable1.pos;
IBtable1.Refresh;
23/05/2003
Aroldo Zanela
Para o seu aplicativo feito em Delphi rodar em rede, você deve instalar o BDE em todas as estações. No BDE de cada estação, você deve colocar no parâmetro NET DIR do drive PARADOX o local onde estão as bases de dados e na PATH do Alias especificar o caminho das base de dados. Mas muita atenção, todas as estações devem estar com a mesma configuração do BDE. Veja o exemplo abaixo para configuração do parâmetro NET DIR do drive PARADOX e o PATH do Alias.
Estação n.1
NET DIR F:\
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.
24/05/2003
Deboraborges
Configurei o BDE desta forma só que o problema é que quando eu insiro ou edito um registro em uma das máquinas, eu só consigo visualizar este dado em outra máquina se eu fechar e abrir o programa.
24/05/2003
Renan
ex: tabela.refresh;
:wink:
[b:1184a74e0c]renan.freitas.costa@bol.com.br[/b:1184a74e0c]
24/05/2003
Aroldo Zanela
Se você estiver usando TTables é necessário utilizar o método refresh para atualizar os dados que foram atualizados por outra estação. No caso de TQuerys é necessários utilizar o métodos de fechamento e abertura da mesma para ´pegar´ as atualizações.
Se não estiver funcionando desta maneira, recomento baixar uma nova versão do BDE pra ver se resolve. www.bdesupport.com
Me avise se não conseguir.
26/05/2003
Scobin
acrescente nas uses do form que estiver a tabela:
DBIProcs
procedure Tabela.AfterPost(DataSet: TDataSet);
begin
DBISaveChanges (tabela.Handle);
end;
26/05/2003
Deboraborges
Já fiz tudo isso e não adiantou. :cry:
:( *Coloquei refresh antes dos edit e append, depois dos post.
:? *Configurei BDE
Servidor
Enable BCD = False
Path C:\W_Power\Db
Net Dir C:
Clientes
Enable BCD = False
Net Dir S:
path S:\W_Power\Db
:cry: *Coloquei o comando abaixo em todos evento AfterPost de todas as tabelas:
DBISaveChanges(DataModule1.tblUsuario.Handle);
O que está faltando eu fazer para esse programa funcionar em rede?
:cry: :cry: Não sei mais o que fazer :cry: :cry:
27/05/2003
Scobin
Está usando o componente TTable no seus formulários, o que acontece é que toda vez que vc chama o seu sistema no terminal 2 o programa carrega toda a sua base de dados para este terminal 2, e quando vc faz uma alteração ou inclusão no terminal 1 a base que está carregada no terminal 2 não sofre nenhuma alteração. Sendo assim vc não conseguira ver as alterações no terminal 2 ao menos que vc feche o sistema e carregue de novo.
Vc pode fazer o seguinte:
1 - Vc está abrindo todas as tabelas no DataModule, mas quando vc fecha o formulário vc fecha as tabelas tbém? Se não fechar vc pode começando fechar as tabelas todas vez que vc fecha o formulários e abrir as tabelas toda vez que abrir o formulários.
2 - Vc pode no lugar de usar TTable usar TQuerys, sendo assim vc não trará toda a base de dados para o terminal 2, mas somente o Cadastro que vc querer, pois na TQuerys vc utilizado comando de SQL. Sendo assim qualquer alteração que a base de dados sofrer desde inclusão a uma alteração, todos os terminais terá acesso assim que acessar o cadastro alterado ou incluido.
3 - Vc abandonar o PARADOX e passar a trabalhar com Banco de Dados (Cliente/Servidor), eu particularmente utilizo o INTERBASE.
Passa o seu e-mail para mim que eu te encaminho uma apostila que fala sobre este assundo de trabalhar com (Cliente/Servidor), isso é se vc quiser.
27/05/2003
Deboraborges
tabela.active := false;
No evento OnActive coloquei:
tabela.active := true;
Estou até com :oops: de dizer que não funcionou.
Posso jogar meu programa no lixo? :cry:
Clique aqui para fazer login e interagir na Comunidade :)