none
Como faço para que os dados sejam visualizados em tempo real?

    Question

  • Oi Galera! Sou novo na linguagem C#, e estou tendo dificuldades para desenvolver um software e nao sei como proseguir.

    O software funciona assim: tenho o programa com um banco de dados local, e um programa em um palmtop acessando o banco remoto, entao as informaçoes que envio para o programa local quero que apareça na tela. Por exemplo, no programa local tem uma tela onde aparece tds os pedidos, produtos cadastrados no palmtop em tempo real, td vez q o palm cadastra um novo produto quero q apareça na tela do programa local... o que devo pesquisar para fazer isso?alguma dica? pq eu so consigo listar os novos pedidos na tela, dando select td vez...ou seja, fechando e abrindo o software ou clicando no botao atualizar(q no caso chamei um select) eu queria que aparecesse na tela na hora que eu clico cadastrar no palm.

    nao sei se consegui explicar bem.

    Thursday, September 16, 2010 1:13 AM

Answers

  • Olá Marcos,

     

    Bom, no seu programa local, você pode colocar um timer, que a cada tanto tempo (100 ms, por exemplo) acesse o banco e busque as informações.

    Pelo menos é assim que eu faço quando quero fazer um "tempo real", é algo assim:

     

    Timer timer1 = new Timer();

    timer1.Enabled = true;

    timer1.Interval = 100; // 100 mili segundos

    timer1.Tick += new EventHandler(timer1_Tick); // evento que ocorre a cada 100 milisegundos

    timer1.Start();

     

    onde:

     

    private void timer1_Tick(object sender, EventArgs e)
    {
        // aqui você acessa o banco e faz suas alterações
    }

     

    Espero ter ajudado.

     

    Boa sorte.

    • Marked as answer by MarcosCps Tuesday, November 23, 2010 1:32 AM
    Thursday, September 16, 2010 11:56 AM

All replies

  • Olá Marcos,

     

    Bom, no seu programa local, você pode colocar um timer, que a cada tanto tempo (100 ms, por exemplo) acesse o banco e busque as informações.

    Pelo menos é assim que eu faço quando quero fazer um "tempo real", é algo assim:

     

    Timer timer1 = new Timer();

    timer1.Enabled = true;

    timer1.Interval = 100; // 100 mili segundos

    timer1.Tick += new EventHandler(timer1_Tick); // evento que ocorre a cada 100 milisegundos

    timer1.Start();

     

    onde:

     

    private void timer1_Tick(object sender, EventArgs e)
    {
        // aqui você acessa o banco e faz suas alterações
    }

     

    Espero ter ajudado.

     

    Boa sorte.

    • Marked as answer by MarcosCps Tuesday, November 23, 2010 1:32 AM
    Thursday, September 16, 2010 11:56 AM
  • Entao o que eu queria mesmo é quando receber informações no banco entao atualizasse o programa local, mas trabalhar com timer tambem seria uma boa solução! só um problema, acesar o banco a 100ms isso não sobrecarrega o banco de dados?? tipo ficar fazendo tanta conexao desnecessaria?

    brigadaoo pela ajuda!

    Thursday, September 16, 2010 11:11 PM
  • Então, você não precisa abrir varias conexões, mantenha a mesma aberta.

    Apenas faça sua pesquisa a cada 100 ms e, alias, isso seria super tempo real, acho que 500 ms seria ótimo.

    Não sei se é performático, mas eu buscava algo perto de 2000 registros com 13 campos a cada 1000 ms

    em um datacenter no texas, com uma internet de 1Mb e não ficava sobrecarregado.

    Acho que seria legal você fazer alguns testes de tempo e, é claro, pode ser que essa não seja a melhor forma.

     

    Espero ter ajudado

     

    Boa sorte.


    Att. Thiago Melo
    Friday, September 17, 2010 11:45 AM
  • uma outra idéia seria você utilizar RSS.

     


    Att, Hugo S. Mendes
    Friday, September 17, 2010 12:11 PM
  • Já tentou fazer isso como evento? Assim a atualização só aconteceria quando a base de dados é modificada...
    Friday, September 17, 2010 12:59 PM
  • como o processo está sendo executado em separado, fora do aplicativo, não dá para usar eventos.

     

    os eventos só são usados se fosse em nossa propria aplicação. o q não é o caso.

    Friday, September 17, 2010 1:33 PM
  • Olá pessoal!

    Bom, eu estou utilizando no momento base de dados PostgreSQL, nele tem um recurdo NOTIFY > LISTEN, ou seja, aplicações clientes podem notificar o banco que algo aconteceu e uma outra aplicação cliente fica "ouvindo" essas notificações. Neste caso, Marcos, você só executaria o SELECT novamente quando algum cliente notificasse a sua aplicação de que ouve realmente alteração na tabela. Provavelmente você está utilizando SQL Server, pelo que eu vi tem um recurso com a mesma finalidade, ou parecido, pesquise sobre SqlConnection.InfoMessage, acho que é o que funcionaria no seu caso.

    Espero ter ajudado. ;)


    Lucas
    Friday, September 17, 2010 4:15 PM
  • Olá marcos bom eu já fiz algo parecido com winforms
    pois eu tmbm precisava  atualizar uma tela ao modificar outra
    então eu não fiz um timer e sim um evento velho que disparace
    toda vez q uma tela fosse atualizada por exemplo eu crio a minha
    ClassAplicativo nela eu crio um evento estático de preferencia pois assim
    eu posso carregar ele com vários métodos de atualização para cada tela
    assim quando o evento dispara ele executa todos os métodos de atualização
    de cada tela e tipo eu crio os métodos de atualização em cada tela do meu
    aplicativo e adiciono ao evento mas ai vc tem q ter um cuidado é bom vc
    verificar se o método q vc está adicionando ao evento já está nele pois
    como ele é estático ele não perde o valor a não ser q vc o faça manualmente
    então continuando depois de carregar o meu evento eu forço ele disparar toda
    vez q eu apertar um botão que salve um dado no banco e possa influenciar
    uma outra tela assim o aplicativo fica realmente em tempo real, o timer é legal
    no caso de a pessoa acessar de diversos palms assim se torna uma idéia mto boa
    tmbm pois ela teria q atualizar uma tela que não etá na maquina

    Att Edney

    qualquer duvida poste ai ;D

    Friday, September 17, 2010 8:55 PM
  • vlw galera! vcs me deram otimas dicas , estou pesquisando cada uma delas para ver qual seria a melhor opção para fazer.

    devLucas, eu nao conheço esse recurso...mas parece ser a solução que estou procurando, estou usando sqlserver vou pesquisar sobre o que me diz...

    em breve postarei aqui o que consegui fazer, caso nao consiga, vou precisar de ajuda novamente :P

    obrigado a tds que ajudaram!

    Thursday, September 23, 2010 2:55 AM
  • Se precisar estamos aí ;)
    Lucas
    Thursday, September 23, 2010 3:21 AM