COMO DA REFRESH EM 1 LISTVIEW BD MYSQL

KURTGU 29/03/2011 13:32:46
#369585
Pessoal to com uma duvida aqui, ja sei adiciona,excluir,Pesquisar, agora gostaria de saber como faco pra da um refresh em um listview para aparecer os novos itens adicionados por outras pessoas.....gostaria de fazer isso de uma forma automatica sem precisar precionar nenhum botao, em um timer algo parecido como posso fazer isso?
PEGUDO 29/03/2011 14:07:25
#369589
A melhor maneira é você fazer a cada Tick do Timer

ListView1.Items.Clear()[txt-color=#007100] [ô]Limpa os Itens da ListView[/txt-color]
PreencherListView() [txt-color=#007100][ô]Refaz a pesquisa no BD, Retorna os dados de novo - inclusive os novos - e repreenche a listview[/txt-color]

PreencherListView() é um nome exemplo de um procedimento que vai repopular a ListView

Veja um exemplo meu para Preencher um listView com 4 colunas

[txt-color=#0000f0]Public Sub[/txt-color] PreencheListView()
[txt-color=#0000f0]Dim[/txt-color] RecSet [txt-color=#0000f0]As[/txt-color] ADODB.Recordset
[txt-color=#0000f0]Dim[/txt-color] Entrada, Almoco, Retorno, Saida [txt-color=#0000f0]As String[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] Contador [txt-color=#0000f0]As Integer[/txt-color] = 0
Dia = Format(Date.Today, [Ô]short date[Ô])
Tratar_Dia(Dia)

Conectar()

RecSet = C.Execute([txt-color=#e80000][Ô]SELECT tblHorarios.CodColaborador, tblHorarios.entrada, tblHorarios.almoco, tblHorarios.retorno, tblHorarios.saida,[Ô][/txt-color] & _
[txt-color=#e80000][Ô]tblHorarios.comentario FROM tblHorarios INNER JOIN tblColaboradores ON tblHorarios.CodColaborador =[Ô][/txt-color] & _
[txt-color=#e80000][Ô] tblColaboradores.codigo WHERE tblHorarios.data=[ô][Ô][/txt-color] & Dia & [txt-color=#e80000][Ô][ô][Ô][/txt-color])

[txt-color=#0000f0]While Not[/txt-color] RecSet.EOF
Entrada = RecSet([txt-color=#e80000][Ô]Entrada[Ô][/txt-color]).Value.ToString
Almoco = RecSet([txt-color=#e80000][Ô]almoco[Ô][/txt-color]).Value.ToString
Retorno = RecSet([txt-color=#e80000][Ô]retorno[Ô][/txt-color]).Value.ToString
Saida = RecSet([txt-color=#e80000][Ô]saida[Ô][/txt-color]).Value.ToString

[txt-color=#007100][ô]Contador vai indicar qual linha receberá o conteúdo[/txt-color]
frmPrincipal.ListView1.Items.Item(Contador).SubItems.Add(Entrada) [txt-color=#007100][ô]Coloca conteudo na coluna 1 da primeira linha[/txt-color]
frmPrincipal.ListView1.Items.Item(Contador).SubItems.Add(Almoco) [txt-color=#007100][ô]Coloca conteudo na coluna 2 da primeira linha[/txt-color]
frmPrincipal.ListView1.Items.Item(Contador).SubItems.Add(Retorno) [txt-color=#007100][ô]Coloca conteudo na coluna 3 da primeira linha[/txt-color]
frmPrincipal.ListView1.Items.Item(Contador).SubItems.Add(Saida) [txt-color=#007100][ô]Coloca conteudo na coluna 4 da primeira linha[/txt-color]

Contador += 1
RecSet.MoveNext()
[txt-color=#0000f0]End While[/txt-color]
RecSet = [txt-color=#0000f0]Nothing[/txt-color]
C.Close()
[txt-color=#0000f0]End Sub[/txt-color]
KURTGU 29/03/2011 14:44:11
#369598
blz pegudo vlw pela ajuda so me tira um duvida como consigo esse efeito de clear e refresh com esse codigo de conexao

[txt-color=#e80000] [ô]Conexao com o banco[/txt-color]
Dim conn As MySqlConnection
conn = New MySqlConnection()
conn.ConnectionString = [Ô]server=meuserver ; user id=meuid; password=minhasenha; database=meubd[Ô]
[ô]_________________________________________________________________________________________________[ô]
Try
conn.Open()
Catch myerror As MySqlException
MsgBox([Ô]Erro De conexao com banco tente novamente![Ô])
End Try
[ô]_________________________________________________________________________________________________[ô]
Dim myAdapter As New MySqlDataAdapter
Dim sqlquery = [Ô]SELECT id,nome FROM online[Ô]
Dim myCommand As New MySqlCommand
myCommand.Connection = conn
myCommand.CommandText = sqlquery
myAdapter.SelectCommand = myCommand
Dim myData As MySqlDataReader
myData = myCommand.ExecuteReader()
conn.Close()
[ô]_________________________________________________________________________________________________[ô]
[txt-color=#e80000][ô]Carregar itens no listview [/txt-color]
conn.Open()
Dim lvwItem As New ListViewItem()
myAdapter.SelectCommand = myCommand
Dim myData2 As MySqlDataReader
myData2 = myCommand.ExecuteReader()

While myData2.Read
lvwItem = ListView1.Items.Add(myData2.GetString(0))
lvwItem.SubItems.Add(myData2.GetString(1))
End While
KURTGU 29/03/2011 16:21:28
#369616
Alguem? sabe o codigo que preciso colocar no timer para isso funcionar?
RODRIGOFERRO 29/03/2011 17:30:56
#369632
Resposta escolhida
A idéia e assim...

a cada Tick do Timer

Tick_ON
Conecta_Ao_Banco
Limpa_o_ListView
Popula_o_ListView
Desconecta
Tick_OFF

Abraços
KURTGU 29/03/2011 18:51:14
#369643
Pois e e ai zero blz entao cara seguir sua linha de pensamento e ele ta dando o clear na list view mais nao ta atualizando conforme eu queria tipo dois pc com o mesmo bd e a mesma tabela tipo assim....

Pc 01 >>> Adiciona 2 itens

Pc 02>>> Receba esses dois itens no listview automaticamente


Por isso queria colocar isso em um timer...para a cada sei la tantos segundos ele desse um clear e mais nao conseguir fazer funcionar de forma nenhuma..... ele ta carregando os itens normalmente se eu fechar e abrir de novo o progama os novos itens vao estar..... mais um desafio pela frente hheheheh assim que aprendemos.....
TECLA 29/03/2011 20:20:45
#369647
O código que escreveu está no escopo do evento TICK do TIMER?
KURTGU 29/03/2011 20:55:37
#369665
aqui tecal nao sei se esta certo mais estou fazendo assim.....


Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
[ô]____________________________________________________________________________________________________[ô]
[txt-color=#e80000][ô]Conexao com o banco[/txt-color]
Dim conn As MySqlConnection
conn = New MySqlConnection()
conn.ConnectionString = [Ô]server=db4free.net ; user id=dario; password=thica123; database=vgames[Ô]
[ô]_________________________________________________________________________________________________[ô]
Try
conn.Open()
Catch myerror As MySqlException
MsgBox([Ô]Erro De conexao com banco tente novamente![Ô])
End Try
[ô]_________________________________________________________________________________________________[ô]
Dim myAdapter As New MySqlDataAdapter
Dim sqlquery = [Ô]SELECT id,nome FROM online[Ô]
Dim myCommand As New MySqlCommand
myCommand.Connection = conn
myCommand.CommandText = sqlquery
myAdapter.SelectCommand = myCommand
Dim myData As MySqlDataReader
myData = myCommand.ExecuteReader()

conn.Close()
[ô]_________________________________________________________________________________________________[ô]
[txt-color=#e80000] [ô]limpar listview
ListView1.Clear()[/txt-color]


[ô]Carregar Itens no Listview
conn.Open()
Dim lvwItem As New ListViewItem()
myAdapter.SelectCommand = myCommand
Dim myData2 As MySqlDataReader
myData2 = myCommand.ExecuteReader()


While myData2.Read
lvwItem = ListView1.Items.Add(myData2.GetString(0))
lvwItem.SubItems.Add(myData2.GetString(1))
End While
End Sub
PEGUDO 29/03/2011 21:39:54
#369670
Impossível um form de um PC 02 atualizar automaticamente quando você insere dados no PC 01.
Mesmo um programa em rede ou intranet precisa de um Timer para verificar atualizações

Você terá de fazer com eu e o ZeroCal falamos

Coloca um Timer1 no Form do PC 02 com enabled = true
a propriedade interval deixa como 30000 para atualizar a cada 30 seg.
e a todo momento o timer vai acessar o banco de dados do PC 01 para verificar se houve alguma alteração.

Vamos supor que seu banco de dados chama-se Dados.mdb e que o PC 01 se chama Servidor

Public Sub Conectar()
[txt-color=#0000f0]Dim[/txt-color] C [txt-color=#0000f0]As[/txt-color] ADODB.Connection
[txt-color=#0000f0]With[/txt-color] C
.Provider = [txt-color=#e80000][Ô]Microsoft.Jet.OLEDB.4.0[Ô][/txt-color]
.ConnectionString = [txt-color=#e80000][Ô]\\SERVIDOR\Pasta_Do_BD\Dados.mdb[Ô][/txt-color] [txt-color=#007100][ô]Fazendo conexão com BD do PC 01[/txt-color]
.Open()
[txt-color=#0000f0]End With
End Sub[/txt-color]

No timer você coloca
[txt-color=#0000f0]Dim [/txt-color]RecSet [txt-color=#0000f0]as[/txt-color] ADODB.Recordset
[txt-color=#0000f0]Try[/txt-color]
Conectar()
ListView1.Items.Clear [txt-color=#007100][ô]Limpa o ListView[/txt-color]
RecSet = C.Execute([txt-color=#e80000][Ô]SELECT * FROM Sua_Tabela[Ô][/txt-color]) [txt-color=#007100][ô]Exemplo de busca de dados[/txt-color]
[txt-color=#0000f0]While Not[/txt-color] RecSet.EOF
[txt-color=#007100][ô]Coloque aqui o código para popular o ListView[/txt-color]
RecSet.MoveNext
[txt-color=#0000f0]End While
Catch[/txt-color]
[txt-color=#007100][ô]Código caso dê erro de conexão[/txt-color]
[txt-color=#0000f0]End Try[/txt-color]

RecSet = [txt-color=#0000f0]Nothing[/txt-color]
C.Close()
JONATHANSTECKER 29/03/2011 21:52:55
#369671
Eu faço da mesma forma. Porém no timer ao invés de eu já atualizar a lista, eu primeiro verifico se é necessário essa atualização!

Tenho uma tabelas Configuracao onde informo a data e hora toda vez que alguém efetua alguma alteração.
E no timer verifico se essa data e hora confere com a do sistema. Caso não, ai sim atualizo a lista.
Com isso pude deixar meu timer com um disparo a cada 5 segundos... Fica tranqüilo e quase que imediato!

Mas a idéia é essa...
Adicione um Timer em seu sistema, defina o tempo de disparo dele (Interval) e no evento Tick adicione a sua rotina de atualização.
KURTGU 29/03/2011 21:56:52
#369673
blz vou tentar aqui e posto como ficou......
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas