Answered by:
Como faço para que os dados sejam visualizados em tempo real?

-
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.
Question
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
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
-
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!
-
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 -
-
-
-
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 -
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 Edneyqualquer duvida poste ai ;D
-
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!
-