Pular para o conteúdo
  • Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 9 meses atrás por Marcio68Almeida.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #75567
    Anô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.

      #75571
      Marcio68Almeida
      Participante

        Deixe-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.

        #75572
        Anônimo

          seria 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?

          #75573
          Anô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.
            Grato

            #75576
            Marcio68Almeida
            Participante

              Você 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.

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.
            plugins premium WordPress