- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 9 meses atrás por Marcio68Almeida.
-
AutorPosts
-
18 de abril de 2006 às 5:34 pm #75567Anônimo
Senhores(as), estou desenvolvendo um sistema em delphi com banco de dados oracle e me deparei com o seguinte problema, quando rodo o programa em 2 máquinas (máquina A e B por exemplo), não consigo ver a alteração online dos dados, ou seja, quando o usuário A altera um dado em uma tabela, esta alteração não é automática para o usuário B, ela só é automática se eu colocar uma função de refresh em um timer e este atualiza as tabelas de tempos em tempos, porém isto é prático para tabelas com poucos registros, no meu caso já tenho 4500 registros e esta atualização demora cerca de 60 seg. Existe algum tipo de gatilho interno ao oracle, que eu possa “visualizar” com o delphi, que me informe quando um registro sofreu alteração, para que eu possa atualizar somente os dados pertinentes somente a este registro e não à tabela como um todo, pois desta forma eu ganho em performance.
18 de abril de 2006 às 5:44 pm #75571Marcio68AlmeidaParticipanteDeixe-me ver se entendi…
Você tem um usuário, no caso o B, que fica com uma tela acompanhando as informações, e outro usuário A atualizando, e quer que, quando o usuário A atualize algo, automaticamente o B receba esta atualização ?
Ou…
Você faz uma consulta como usuário B e não pega a última atualização efetuada por A ?
No segundo caso, creio que a sua consulta guardou o último resultado em cache para agilizar e com isso as atualizações recentes não são contempladas. Quando eu faço meus programas que necessitam da última posição cadastrada, eu desabilito o recurso de cache, obrigando uma nova consulta, consequentemente diminuindo a performace.18 de abril de 2006 às 6:19 pm #75572Anônimoseria o primeiro caso marcio, o programa estará rodando em duas ou mais máquinas, porém oque acontece, quando o usuário A altera algum dado (do cliente azul, por exemplo) na base de dados, o usuário B só visualiza a alteração dos dados deste cliente se der um refresh na tabela, mas digamos que o usuário B não de um refresh e for tentar editar os dados do cliente azul, uma mensagem de erro me aparece na tela com o seguinte dizer “A linha não pode ser localizada para atualização. Alguns valores podem ter sido alterados desde que ela foi lida pela ultima vez”. Oque eu precisaria é atualizar somente os dados do cliente azul, ou seja o cliente que foi alterado, e não de toda base de dados, tem como fazer isto?
18 de abril de 2006 às 7:28 pm #75573Anônimo😛 senhores(as) achei uma solução, não sei se é a mais inteligente ou correta mas resolveu meu problema.
Na rotina de atualização dos dados eu utilizava um refresh na tabela EX:
NomeDaTabela.refresh – este processo, devido a quantidade de dados que eu tenho na tabela se tornava demorado (60 segundo para atualizar).
Oque eu fiz, ao invés de dar um refresh eu fechei e abri a tabela Ex:
NomeDaTabela.Close;
NomeDaTabela.Open;O tempo de atualização caiu para 1 segundo.
Caso alguem tenha uma outra solução, + tecnica, inteligente, prática por favor me informe.
Grato19 de abril de 2006 às 4:35 pm #75576Marcio68AlmeidaParticipanteVocê pode usar uma trigger para atualizar uma tabela de parâmetros, e ficar verificando a data e hora da última atualização nessa tabela, que deve conter apenas essa informação, compare-a com a última informação colhida e veja se houve atualização, havendo atualize a sua tela.
-
AutorPosts
- Você deve fazer login para responder a este tópico.