Paradox em Rede, não consigo atualizar.
Ae galera estou desenvolvendo meu primeiro programa para rodar em rede e estou tendo muitos problemas.
Os dados não são atualizados. Vou tentar explicar.
Digamos que dois computadores insiram dados, o computador 1 só ver os dados inseridos pelo computador 2 se fechar o programa e abrir novamente. Tentei resolver isso com um comando refresh no evento scroll da query mas da pau.
Já não sei mais o que fazer. Se alguém por favor me puder ajudar.
Estou usando BDE e paradox.
Agradeço desde já.
Os dados não são atualizados. Vou tentar explicar.
Digamos que dois computadores insiram dados, o computador 1 só ver os dados inseridos pelo computador 2 se fechar o programa e abrir novamente. Tentei resolver isso com um comando refresh no evento scroll da query mas da pau.
Já não sei mais o que fazer. Se alguém por favor me puder ajudar.
Estou usando BDE e paradox.
Agradeço desde já.
O.mago
Curtidas 0
Respostas
Darlan
05/11/2005
faça um teste com a propiedade RequestLive = true e checkupdate = true
GOSTEI 0
Sabado
05/11/2005
Se está usando query pode utilizar os comandos SQL, como por exemplo, dar um select * from após a gravação dos dados.
Quanto ao Request Live, se não estiver utilizando grid para gravar, melhor é deixar em false.
Já o paradox vai te trair sendo usado em rede. Para que os outros computadores vejam as atualizações realizadas por um segundo equipamento, você vai ter que ficar atualizando temporariamente sua base de dados.
Experimente outro banco dedas, como SQL, Mysql, Interbase, dentre outros.
Quanto ao Request Live, se não estiver utilizando grid para gravar, melhor é deixar em false.
Já o paradox vai te trair sendo usado em rede. Para que os outros computadores vejam as atualizações realizadas por um segundo equipamento, você vai ter que ficar atualizando temporariamente sua base de dados.
Experimente outro banco dedas, como SQL, Mysql, Interbase, dentre outros.
GOSTEI 0
O.mago
05/11/2005
É com o Request Live não dá certo, já tentei. A opção checkupdate que vc citou seria cachedUpdate? Se for já tentei também. E não deu certo.
Como atualizo temporariamente a base de dados? O que não entendo é como na máquina onde registra o dado ele atualiza, porém na outra máquina só se fechar o programa e abrir denovo. Que coisa ridícula, não sei mais o que fazer. Mundar de banco de dados eu vou mudar para o Interbase, mas como nunca trabelhei com banco de dados que não fosse paradox, não tenho nenhuma noção de outro banco de dados, para eu aprender vai requerer tempo e tenho que terminar esse programa até segunda-feira. Será que não tem jeito um refresh em uma outra situação ou uma configuração diferente do net dir do BDE. Já tetei muita coisa e até agora nada. :cry:
Como atualizo temporariamente a base de dados? O que não entendo é como na máquina onde registra o dado ele atualiza, porém na outra máquina só se fechar o programa e abrir denovo. Que coisa ridícula, não sei mais o que fazer. Mundar de banco de dados eu vou mudar para o Interbase, mas como nunca trabelhei com banco de dados que não fosse paradox, não tenho nenhuma noção de outro banco de dados, para eu aprender vai requerer tempo e tenho que terminar esse programa até segunda-feira. Será que não tem jeito um refresh em uma outra situação ou uma configuração diferente do net dir do BDE. Já tetei muita coisa e até agora nada. :cry:
GOSTEI 0
Firekiller
05/11/2005
Não sei se te ajudará mas tenta aí:
Após dar um post ou delete (eventos afterpost e afterdelete), coloque o seguinte código:
dbiSaveChanges(Query1.Handle);
ou
dbiSaveChanges(Table1.Handle);
//Depende do que você tá usando;
Bom, então coloque um timer com Interval = 10000
e coloque
Database.CloseDatasets; //Se estiver usando database;
E você disse que no evento AfterScroll dá um erro ao colocar refresh... Que erro é esse? Pois a técnica do refresh é muito boa.
Após dar um post ou delete (eventos afterpost e afterdelete), coloque o seguinte código:
dbiSaveChanges(Query1.Handle);
ou
dbiSaveChanges(Table1.Handle);
//Depende do que você tá usando;
Bom, então coloque um timer com Interval = 10000
e coloque
Database.CloseDatasets; //Se estiver usando database;
E você disse que no evento AfterScroll dá um erro ao colocar refresh... Que erro é esse? Pois a técnica do refresh é muito boa.
GOSTEI 0
Firekiller
05/11/2005
Desculpe, me esqueci de uma coisa, tente assim:
UpdateCursorPos;
Check( dbiSaveChanges( Table1.Handle ) );
CursorPosChanged;
UpdateCursorPos;
Check( dbiSaveChanges( Table1.Handle ) );
CursorPosChanged;
GOSTEI 0
Firekiller
05/11/2005
Desculpe, me esqueci de uma coisa, tente assim no AfterPost ou AfterDelete:
UpdateCursorPos;
Check( dbiSaveChanges( Table1.Handle ) );
CursorPosChanged;
UpdateCursorPos;
Check( dbiSaveChanges( Table1.Handle ) );
CursorPosChanged;
GOSTEI 0
Edilcimar
05/11/2005
para que as pessoas possam ver as atualizações no piradox dê
table1.refresh; dbgrid1.refresh; aí as atualizações serão mostradas
table1.refresh; dbgrid1.refresh; aí as atualizações serão mostradas
GOSTEI 0
O.mago
05/11/2005
Colocar um Refresh na query no evento onscroll na verdade não dá nenhum pau, porém simplesmente não funciona, gera apenas um incoveniente que quando mando inserir um registro mostrar a mensagem que criei para um campo obrigatório.
Eu uso query, datasource e updateSQL.
[b:b9b77f3bb5]fireKiller[/b:b9b77f3bb5] vou tentar o que vc postou.
O que é a propriedade chachedupdate? Aqui ela está configurada como true, será que é por isso que não atualiza, apesar de como false dá pau.
[b:b9b77f3bb5]Edilcimar[/b:b9b77f3bb5] Tentei com Query.refresh e não deu certo, não estou usando DBGrid para mostrar os dados e sim DBedit.
Nunca pensei que uma coisa tão simples fosse dar tanto trabalho. :roll:
Eu uso query, datasource e updateSQL.
[b:b9b77f3bb5]fireKiller[/b:b9b77f3bb5] vou tentar o que vc postou.
O que é a propriedade chachedupdate? Aqui ela está configurada como true, será que é por isso que não atualiza, apesar de como false dá pau.
[b:b9b77f3bb5]Edilcimar[/b:b9b77f3bb5] Tentei com Query.refresh e não deu certo, não estou usando DBGrid para mostrar os dados e sim DBedit.
Nunca pensei que uma coisa tão simples fosse dar tanto trabalho. :roll:
GOSTEI 0
Firekiller
05/11/2005
Esqueci de dizer, deixe o Query1.Refresh no AfterScroll.
Se eu não estou enganado, a propriedade CachedUpdates quando está true, faz com que as alterações sejam feitas em um cache de memória, para depois serem transmitidas ao banco (como um clientdataset). Para transmitir essas informações para o banco (quando estiver true), você tem que colocar, após o Post ou Delete: Query.ApplyUpdates;
Se estiver false, não precisa do applyupdates.
Se eu não estou enganado, a propriedade CachedUpdates quando está true, faz com que as alterações sejam feitas em um cache de memória, para depois serem transmitidas ao banco (como um clientdataset). Para transmitir essas informações para o banco (quando estiver true), você tem que colocar, após o Post ou Delete: Query.ApplyUpdates;
Se estiver false, não precisa do applyupdates.
GOSTEI 0
O.mago
05/11/2005
É eu uso o applyupdates e comitupdates nos eventos afterpost e after delete da query. O Refresh não pode ser no beforepost? Porque está dando erro, exibe a mensagem de um campo requerido.
Se vc puder analisar pra mim, te mando o código do programa. É que só está isso pendende para ele funcionar e já estou com esse problema a duas semans. :cry:
Se vc puder analisar pra mim, te mando o código do programa. É que só está isso pendende para ele funcionar e já estou com esse problema a duas semans. :cry:
GOSTEI 0
Firekiller
05/11/2005
Bom, então seu problema tá resolvido (eu acho).... tire o refresh do beforePost, e coloque-o no AfterPost e no AfterScroll. Bom então você teria algo assim:
AfterPost:
Query1.ApplyUpdates;
UpdateCursorPos;
Check( dbiSaveChanges( Query1.Handle ) );
CursorPosChanged;
Query1.Refresh;
AfterScroll:
Query1.Refresh;
E se quiser, pode implementar a idéia do timer:
No OnTimer do Timer:
if Not (Query1.State In [dsInsert, dsEdit]) then
Database.CloseDatasets;
Tente da forma com a qual postei agora, e retorne se obteve sucesso ou não. Apenas lembrando, você deve tirar o Refresh do evento BeforePost.
AfterPost:
Query1.ApplyUpdates;
UpdateCursorPos;
Check( dbiSaveChanges( Query1.Handle ) );
CursorPosChanged;
Query1.Refresh;
AfterScroll:
Query1.Refresh;
E se quiser, pode implementar a idéia do timer:
No OnTimer do Timer:
if Not (Query1.State In [dsInsert, dsEdit]) then
Database.CloseDatasets;
Tente da forma com a qual postei agora, e retorne se obteve sucesso ou não. Apenas lembrando, você deve tirar o Refresh do evento BeforePost.
GOSTEI 0
O.mago
05/11/2005
Blz, Vou testar amanhã e posto o resultado.
Valew pela boa vontade, muito obrigado firekiller. T+
Valew pela boa vontade, muito obrigado firekiller. T+
GOSTEI 0
Silviogs
05/11/2005
Olá o.mago
´ Mundar de banco de dados eu vou mudar para o Interbase, mas como nunca trabelhei com banco de dados que não fosse paradox, não tenho nenhuma noção de outro banco de dados´
você não irá mudar de banco de dados, simplesmente você vai começar a usar um banco de dados (Interbase Firebird, PostgreSql etc.) pois o paradox não é banco de dados, ele é um gerenciador de arquivos.
veja : http://forum.clubedelphi.net/viewtopic.php?t=68924&highlight=
Caro amigo desde 1998 que não trabalho mais com piradox desde então utilizo banco de dados e mais recentemente PostgreSQL.(faça um pesquisa de autor silviogs e veja algums post´s falando a respeito). Voltando a seu assunto:
[b:4dcf52c40e]Configuração do BDE para ambiente de rede[/b:4dcf52c40e]
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.
Atenciosamente
Silvio Guedes
´ Mundar de banco de dados eu vou mudar para o Interbase, mas como nunca trabelhei com banco de dados que não fosse paradox, não tenho nenhuma noção de outro banco de dados´
você não irá mudar de banco de dados, simplesmente você vai começar a usar um banco de dados (Interbase Firebird, PostgreSql etc.) pois o paradox não é banco de dados, ele é um gerenciador de arquivos.
veja : http://forum.clubedelphi.net/viewtopic.php?t=68924&highlight=
Caro amigo desde 1998 que não trabalho mais com piradox desde então utilizo banco de dados e mais recentemente PostgreSQL.(faça um pesquisa de autor silviogs e veja algums post´s falando a respeito). Voltando a seu assunto:
[b:4dcf52c40e]Configuração do BDE para ambiente de rede[/b:4dcf52c40e]
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.
Atenciosamente
Silvio Guedes
GOSTEI 0
O.mago
05/11/2005
Olá [b:c34f985c16]silviogs[/b:c34f985c16], tenho mesmo que parar de usar paradox e usar um banco de dados, como o interbase, porém isso vai requerer um tempo, coisa que no momento não tenho já que esse programa deveria começar rodar hoje.
Sobre a configuração do BDE no qual você falou, está configurado certo, tanto que o programa roda em todas as estações, Net Dir e Alias estão funcionando sem problemas.
O que acontece é que quando a máquina 1 registra um dado, as outras máquinas só veêm esse registro se fecharem e abrirem o programa, o que é um absurdo todos os usuários terem que fechar o programa e abrir novamente cada vez que algum registro é adiciondo. Esse é meu problema.
[b:c34f985c16]firekiller[/b:c34f985c16] sua dica também não deu certo, coloquei o refresh nos locais indicados, aliás no post anterior eu errei coloquei o refresh no evento beforescroll e não beforepost. No afterscroll eu também já havia tentado, mas sem sucesso. O que foi novidade foi no evento afterpost, porém também não tive resultado nenhum. Essa parte do programa:
UpdateCursorPos;
Check( dbiSaveChanges( Query1.Handle ) );
CursorPosChanged;
Não compilou undeclared identifier.
Nem o refresh do DBNavigator funcionou, nem assim.
Mais alguma alternativa. :?:
Sobre a configuração do BDE no qual você falou, está configurado certo, tanto que o programa roda em todas as estações, Net Dir e Alias estão funcionando sem problemas.
O que acontece é que quando a máquina 1 registra um dado, as outras máquinas só veêm esse registro se fecharem e abrirem o programa, o que é um absurdo todos os usuários terem que fechar o programa e abrir novamente cada vez que algum registro é adiciondo. Esse é meu problema.
[b:c34f985c16]firekiller[/b:c34f985c16] sua dica também não deu certo, coloquei o refresh nos locais indicados, aliás no post anterior eu errei coloquei o refresh no evento beforescroll e não beforepost. No afterscroll eu também já havia tentado, mas sem sucesso. O que foi novidade foi no evento afterpost, porém também não tive resultado nenhum. Essa parte do programa:
UpdateCursorPos;
Check( dbiSaveChanges( Query1.Handle ) );
CursorPosChanged;
Não compilou undeclared identifier.
Nem o refresh do DBNavigator funcionou, nem assim.
Mais alguma alternativa. :?:
GOSTEI 0
Silviogs
05/11/2005
Olá
Evitando Perdas de Dados
Um dos problemas dos programadores Delphi é salvar as informações fisicamente no disco rígido. Quando estamos trabalhando com o programa as informações ficam retidas no buffer, o que, em caso de queda de energia ou até mesmo se o usuário fechar o Windows com a aplicação aberta resulta na perda dos dados, que foram processados na execução atual do sistema.
Para resolver o problema, basta acrescentar no evento AfterPost de cada componente Table as linhas de código que estão abaixo.
Na lista de Uses acrescente a unit DBIProcs.
Dessa forma, você não precisa temer perder os seus dados por uma falha elétrica ou pela quebra do sistema (como um erro GPF, por exemplo), após atualizar o banco de dados.
implementation
uses DBIProcs;
{$R *.DFM}
procedure TForm1.Table1AfterPost(DataSet: Dataset);
begin
DBISaveChanges(Table1.Handle);
end;
end.
Sobre as outras estações poderem ver o que foi cadastrado recentemente, vc pode colocar um timer para abrir e fechar a tabela depois de alguns segundo ou minutos. Acontece que o piradox não possui eventos para capturar quando o um dado foi inserido, só banco de dados possui esta caracteística.
Atencisoamente
Silvio Guedes
Evitando Perdas de Dados
Um dos problemas dos programadores Delphi é salvar as informações fisicamente no disco rígido. Quando estamos trabalhando com o programa as informações ficam retidas no buffer, o que, em caso de queda de energia ou até mesmo se o usuário fechar o Windows com a aplicação aberta resulta na perda dos dados, que foram processados na execução atual do sistema.
Para resolver o problema, basta acrescentar no evento AfterPost de cada componente Table as linhas de código que estão abaixo.
Na lista de Uses acrescente a unit DBIProcs.
Dessa forma, você não precisa temer perder os seus dados por uma falha elétrica ou pela quebra do sistema (como um erro GPF, por exemplo), após atualizar o banco de dados.
implementation
uses DBIProcs;
{$R *.DFM}
procedure TForm1.Table1AfterPost(DataSet: Dataset);
begin
DBISaveChanges(Table1.Handle);
end;
end.
Sobre as outras estações poderem ver o que foi cadastrado recentemente, vc pode colocar um timer para abrir e fechar a tabela depois de alguns segundo ou minutos. Acontece que o piradox não possui eventos para capturar quando o um dado foi inserido, só banco de dados possui esta caracteística.
Atencisoamente
Silvio Guedes
GOSTEI 0
O.mago
05/11/2005
Galera, encontrei uma solução que não me agrada mas resolve o problema em parte. Depois do afterpost da query coloquei:
query1.close;
query1.open;
e um botão atualizar que faz a mesma coisa.
Não entendo porque não tem um meio mesmo usando paradox de atualizar os dados sem precisar fechar e abrir tabela. Tenho que fechar a tabela de quem insere os dados e também de quem vai vê-los. Considero isso uma gambiarra muito grande. Não entendi também pq o refresh não funciona, pra min servia pra isso.
O que acontece é que os dados ficam armazenados no buffer quando eu fecho o programa (a tabela) ele grava no disco (verifiquei no desktop database), porém mesmo dando refresh na query em outra estação não exibe esse dado porque ele atualiza localmente aí não vê os dados inseridos. Fechando a tabela e abrindo novamente, ele busca denovo na rede e exibe os dados que foram cadastrados.
Resumido: A aplicação está gravando localmente e quando fecho a query ele grava no disco. Quando abre a aplicação ele carrega os registro existente naquele momento, quando o refresh é utilizado ele atualiza localmente. Para buscar na rede tenho que fechar e abrir novamente a query.
Será que não tem um jeito de resolver isso sem ter que ficar abrindo e fechando a query? Já que se eu colocar um timer, pode sobrecarregar a rede, e um botão manual de update não é muito funcional.
Obrigado a todos que tem tentado me ajudar.
Valew
T+
query1.close;
query1.open;
e um botão atualizar que faz a mesma coisa.
Não entendo porque não tem um meio mesmo usando paradox de atualizar os dados sem precisar fechar e abrir tabela. Tenho que fechar a tabela de quem insere os dados e também de quem vai vê-los. Considero isso uma gambiarra muito grande. Não entendi também pq o refresh não funciona, pra min servia pra isso.
O que acontece é que os dados ficam armazenados no buffer quando eu fecho o programa (a tabela) ele grava no disco (verifiquei no desktop database), porém mesmo dando refresh na query em outra estação não exibe esse dado porque ele atualiza localmente aí não vê os dados inseridos. Fechando a tabela e abrindo novamente, ele busca denovo na rede e exibe os dados que foram cadastrados.
Resumido: A aplicação está gravando localmente e quando fecho a query ele grava no disco. Quando abre a aplicação ele carrega os registro existente naquele momento, quando o refresh é utilizado ele atualiza localmente. Para buscar na rede tenho que fechar e abrir novamente a query.
Será que não tem um jeito de resolver isso sem ter que ficar abrindo e fechando a query? Já que se eu colocar um timer, pode sobrecarregar a rede, e um botão manual de update não é muito funcional.
Obrigado a todos que tem tentado me ajudar.
Valew
T+
GOSTEI 0
Jonatas Alves
05/11/2005
Boa Noite
O que você poderia fazer nesta situação, é utilizar o componente TTable, pois após a Inclusão/Edição/Exclusão/Gravação/Cancelamento, seria necessário incluir:
Também, seria necessário incluir este comando em cada deslocamento do ponteiro:
exemplo:
Conclusão: Seria necessário construir a rotina, para que os dados do Paradox, sempre estejam atualizados em todos os Clients. realizando isto, não é necessário fechar e abrir o programa, objetivando visualizar os dados atuais.
O que você poderia fazer nesta situação, é utilizar o componente TTable, pois após a Inclusão/Edição/Exclusão/Gravação/Cancelamento, seria necessário incluir:
ttable.refresh
Também, seria necessário incluir este comando em cada deslocamento do ponteiro:
exemplo:
ttable.next ttable.refresh
Conclusão: Seria necessário construir a rotina, para que os dados do Paradox, sempre estejam atualizados em todos os Clients. realizando isto, não é necessário fechar e abrir o programa, objetivando visualizar os dados atuais.
GOSTEI 0