Atualização automática de todas as estações da rede

Delphi

15/11/2004

Salve... pessoal tenho um aplicativo em delphi 7, BD firebird 1.5, estou usando componentes IBdatabase, IBtransaction e IBDataset... essa aplicação roda em diversas máquinas em rede... quando eu insiro um registro em uma tabela em uma determinada máquina... as outras não conseguem ver este registro... somente após fechar e abrir o sistema novamente... alguem sabe o que posso fazer para corrigir isso ???

obrigado !!! :lol:


Linox

Linox

Curtidas 0

Respostas

Godzilla_xf

Godzilla_xf

15/11/2004

[b:d4ce569958]Olá, bom pelo que eu sei para que as alterações ou inserções que o sistema cliente faz na base de dados do servidor sejam vistas por todas as outras estações da rede vc deve executar um Commit das transações executadas para que estas sejam salvas na base de dados.

Vc esta executando este Commit após as Inserções, alterações, exclusões etc...????

Acredito que seje isso mais posso estar enganado afinal vc não mensionou se estava efetuando os Commit´s e Rollback´s nas transções!!!!

espero ter ajudado...[/b:d4ce569958]


GOSTEI 0
Linox

Linox

15/11/2004

Estou usando sim... estou usando commitretaining para deixar a base ativa...

no after post das tabelas eu uso:

  IBDataset.ApplyUpdates;
  IBDataset.Refresh;
  IBTransaction.CommitRetaining;


As propriedades ( seetings ) do IBTransaction estão assim:
read_committed
rec_version
nowait


mas não atualiza pras demais estações... não sei o que é...


GOSTEI 0
Godzilla_xf

Godzilla_xf

15/11/2004

[b:eb683ea89d]Acredito que vc deveria tentar usar somente o ´Commit´ e não o CommitRetaining, acredito que vai funcionar. Faça um teste!!![/b:eb683ea89d]


GOSTEI 0
Linox

Linox

15/11/2004

Mas deveria funcionar com commitretaining... porque não funciona ?? depois que dou o commit o que eu preciso levantar ?? o banco de dados e todas as tabelas novamente ???


GOSTEI 0
Linox

Linox

15/11/2004

Dei só o commit, mas aí ele não grava a alteração.... nossa tá estranho isso...


GOSTEI 0
Godzilla_xf

Godzilla_xf

15/11/2004

Como esta a propriedade DefaultAction do IBTransaction1 esta como:
1. TACommit
2. TACommitRetaining

isso e só uma tentativa....


GOSTEI 0
Linox

Linox

15/11/2004

TACommit


GOSTEI 0
Gandalf.nho

Gandalf.nho

15/11/2004

Você deve configurar as transações como ReadCommited


GOSTEI 0
Linox

Linox

15/11/2004

mas ela já está...
read_committed 
rec_version 
nowait



GOSTEI 0
Nerdex

Nerdex

15/11/2004

[u:1b0de27d68]Comentário[/u:1b0de27d68]:
Este é um velho problema... pois venho acompanhando os posts em outra seção do Fórum que trata melhor sobre este tipo de assunto... Já vi gente dizendo que isto só é possivel se vc desativar e logo reativar um dataset para poder haver o refresh nos clientes... ´Absurdo... ter que fazer isto...´
Acredito que em 3 camadas isto não seja problema...


GOSTEI 0
Rômulo Barros

Rômulo Barros

15/11/2004

Acredito que vc esteja abrindo seus DataSets (DataSet.Open) durante a inicialização do projeto. Faça isto no evento OnCreate do seu formulário (DataSet.Open();) e no evento OnDestroy feche a seu DataSet (DataSet.Close(););


GOSTEI 0
Osocram

Osocram

15/11/2004

Jah tentou fazer um refresh no dataSet so p ver se ele tras o dado?

tipo vc altera no terminal 1 e vai no terminal 2 e dah um refresh... e veja se tras.

Pois os dados q vc esta vendo provavelmente estaum em memoria... por isso non tah atualizado ainda.


GOSTEI 0
Linox

Linox

15/11/2004

Poxa... pensei que isso estava resolvido... seguinte... quando eu altero um registro, ele fica pro meu micro... até sair... quando saio do sistema ele volta o valor antigo... não está adimitindo alterações alguem sabe o que pode ser ????

No AfterPost da tabela faço assim:

dsTABELA1.ApplyUpdates;
IBDdatabase.ApplyUpdates([dsTABELA1]);
IBTdatabase.CommitRetaining;
dsTABELA1.Refresh;

ME AJUDEM NAO AGUENTO MAIS...... :?


GOSTEI 0
POSTAR