FILTRANDO LISTVIEW AO DIGITAR
Olá, tenho um listview que está carregando os nomes de funcionários conforme critérios da query sql. Na medida em que se digita caracteres em um textbox ele também filtra os nomes dos funcionários. O problema que estou enfrentando é que se o usuário para de digitar e resolve apagar os caracteres já digitados com BACKSPACE , para iniciar uma nova sequência de digitação, o listview era para carregar os funcionários conforme a string sql. Mas, ao limpar o txt ele carrega TODOS os funcionários da tabela de funcionários ignorando os critérios do select da query sql. Somente volta a carregar normalmente quando fecho e abro novamente o form. Para melhor verificação segue o código que estou usando(vb6/access2007):
AQUI CARREGA O LISTVIEW:
Public Sub ListaClientes()
Dim rs As New ADODB.Recordset
[ô]limpa o cabeçalho
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
[ô]define a conexão e abre o Recordset com os dados da tabela Clientes
With rs
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.CacheSize = 50
.Source = [Ô]SELECT tbContrato.codMatricula, tbFunc.Nome, tbFunc.codFunc, tbContrato.codFunc [Ô] & _
[Ô]FROM tbFunc INNER JOIN tbContrato ON tbFunc.codFunc = tbContrato.codFunc [Ô] & _
[Ô]WHERE tbContrato.codFuncao=2 Or tbContrato.codFuncao=3[Ô] [ô] ao limpar o txt ele ignora esse critério.
Debug.Print
.ActiveConnection = conn
.Open
End With
[ô]Cria o cabeçalho do controle ListView
ListView1.ColumnHeaders.Add , , [Ô]Código[Ô], 900, lvwColumnLeft
ListView1.ColumnHeaders.Add , , [Ô]Nome[Ô], 3550, lvwColumnLeft
[ô]Preenche o controle listview com os dados da tabela
Dim i As Integer
For i = 0 To rs.RecordCount - 1
Set LIClientesID = ListView1.ListItems.Add(, [Ô]A[Ô] & rs(0), rs(0))
If Not IsNull(rs(0)) Then
LIClientesID.SubItems(1) = [Ô][Ô] & rs!Nome
End If
rs.MoveNext
Next i
[ô]fecha o recordset e libera a variável
rs.Close
Set rs = Nothing
End Sub
PARA FILTRAR:
Private Sub txtProcurar_Change()
Dim sql As String
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
sql = [Ô]SELECT tbContrato.codMatricula,tbFunc.Nome, tbContrato.codFuncao [Ô] & _
[Ô]FROM tbFunc INNER JOIN tbContrato ON tbFunc.codFunc = tbContrato.codFunc [Ô] & _
[Ô]where tbFunc.nome like [ô][Ô] & txtProcurar.Text & [Ô]%[ô][Ô]
ListaClientes1 (sql)
End Sub
Public Sub ListaClientes1(sql As String)
Dim rstClientes1 As New ADODB.Recordset
[ô]limpa o cabeçalho
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
[ô]define a conexão e abre o Recordset com os dados da tabela Clientes
Set rstClientes1 = New ADODB.Recordset
With rstClientes1
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.CacheSize = 50
.Source = sql
.ActiveConnection = conn
.Open
End With
[ô]Cria o cabeçalho do controle ListView
ListView1.ColumnHeaders.Add , , [Ô]MatrÃcula[Ô], 900
ListView1.ColumnHeaders.Add , , [Ô]Nome[Ô], 4400, lvwColumnLeft
[ô]Preenche o controle listview com os dados da tabela
Dim i As Integer
For i = 0 To rstClientes1.RecordCount - 1
Set LIClientesID = ListView1.ListItems.Add(, [Ô]A[Ô] & rstClientes1(0), rstClientes1(0))
If Not IsNull(rstClientes1(0)) Then
LIClientesID.SubItems(1) = rstClientes1(1) [ô]nome
End If
rstClientes1.MoveNext
Next i
[ô]fecha o recordset e libera a variável
rstClientes1.Close
Set rstClientes1 = Nothing
End Sub
AQUI CARREGA O LISTVIEW:
Public Sub ListaClientes()
Dim rs As New ADODB.Recordset
[ô]limpa o cabeçalho
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
[ô]define a conexão e abre o Recordset com os dados da tabela Clientes
With rs
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.CacheSize = 50
.Source = [Ô]SELECT tbContrato.codMatricula, tbFunc.Nome, tbFunc.codFunc, tbContrato.codFunc [Ô] & _
[Ô]FROM tbFunc INNER JOIN tbContrato ON tbFunc.codFunc = tbContrato.codFunc [Ô] & _
[Ô]WHERE tbContrato.codFuncao=2 Or tbContrato.codFuncao=3[Ô] [ô] ao limpar o txt ele ignora esse critério.
Debug.Print
.ActiveConnection = conn
.Open
End With
[ô]Cria o cabeçalho do controle ListView
ListView1.ColumnHeaders.Add , , [Ô]Código[Ô], 900, lvwColumnLeft
ListView1.ColumnHeaders.Add , , [Ô]Nome[Ô], 3550, lvwColumnLeft
[ô]Preenche o controle listview com os dados da tabela
Dim i As Integer
For i = 0 To rs.RecordCount - 1
Set LIClientesID = ListView1.ListItems.Add(, [Ô]A[Ô] & rs(0), rs(0))
If Not IsNull(rs(0)) Then
LIClientesID.SubItems(1) = [Ô][Ô] & rs!Nome
End If
rs.MoveNext
Next i
[ô]fecha o recordset e libera a variável
rs.Close
Set rs = Nothing
End Sub
PARA FILTRAR:
Private Sub txtProcurar_Change()
Dim sql As String
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
sql = [Ô]SELECT tbContrato.codMatricula,tbFunc.Nome, tbContrato.codFuncao [Ô] & _
[Ô]FROM tbFunc INNER JOIN tbContrato ON tbFunc.codFunc = tbContrato.codFunc [Ô] & _
[Ô]where tbFunc.nome like [ô][Ô] & txtProcurar.Text & [Ô]%[ô][Ô]
ListaClientes1 (sql)
End Sub
Public Sub ListaClientes1(sql As String)
Dim rstClientes1 As New ADODB.Recordset
[ô]limpa o cabeçalho
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
[ô]define a conexão e abre o Recordset com os dados da tabela Clientes
Set rstClientes1 = New ADODB.Recordset
With rstClientes1
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.CacheSize = 50
.Source = sql
.ActiveConnection = conn
.Open
End With
[ô]Cria o cabeçalho do controle ListView
ListView1.ColumnHeaders.Add , , [Ô]MatrÃcula[Ô], 900
ListView1.ColumnHeaders.Add , , [Ô]Nome[Ô], 4400, lvwColumnLeft
[ô]Preenche o controle listview com os dados da tabela
Dim i As Integer
For i = 0 To rstClientes1.RecordCount - 1
Set LIClientesID = ListView1.ListItems.Add(, [Ô]A[Ô] & rstClientes1(0), rstClientes1(0))
If Not IsNull(rstClientes1(0)) Then
LIClientesID.SubItems(1) = rstClientes1(1) [ô]nome
End If
rstClientes1.MoveNext
Next i
[ô]fecha o recordset e libera a variável
rstClientes1.Close
Set rstClientes1 = Nothing
End Sub
se fizer assim não resolve?
if len(txtProcurar.Tex) =0 then
ListView1.ListItems.Clear
else
sql = [Ô]SELECT tbContrato.codMatricula,tbFunc.Nome, tbContrato.codFuncao [Ô] & _
[Ô]FROM tbFunc INNER JOIN tbContrato ON tbFunc.codFunc = tbContrato.codFunc [Ô] & _
[Ô]where tbFunc.nome like [ô][Ô] & txtProcurar.Text & [Ô]%[ô][Ô]
ListaClientes1 (sql)
end if
ALANTB, pela seu post tem que colocar condição para o preenchimento desejado.
Private Sub txtProcurar_Change()
Dim sql As String
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
If Trim(txtProcurar.Text) = [Ô][Ô] Then
ListaClientes
Exit sub
Else
sql = [Ô]SELECT tbContrato.codMatricula,tbFunc.Nome, tbContrato.codFuncao [Ô] & _
[Ô]FROM tbFunc INNER JOIN tbContrato ON tbFunc.codFunc = tbContrato.codFunc [Ô] & _
[Ô]where tbFunc.nome like [ô][Ô] & txtProcurar.Text & [Ô]%[ô][Ô]
ListaClientes1 (sql)
End if
End Sub
é mais ou menos assim.
Private Sub txtProcurar_Change()
Dim sql As String
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
If Trim(txtProcurar.Text) = [Ô][Ô] Then
ListaClientes
Exit sub
Else
sql = [Ô]SELECT tbContrato.codMatricula,tbFunc.Nome, tbContrato.codFuncao [Ô] & _
[Ô]FROM tbFunc INNER JOIN tbContrato ON tbFunc.codFunc = tbContrato.codFunc [Ô] & _
[Ô]where tbFunc.nome like [ô][Ô] & txtProcurar.Text & [Ô]%[ô][Ô]
ListaClientes1 (sql)
End if
End Sub
é mais ou menos assim.
OMAR2011, funcionou perfeitamente..é isso mesmo que eu precisava. Vou encerrar!!!!
Tópico encerrado , respostas não são mais permitidas