LISTBOX

JOHNHEY 23/11/2012 13:02:56
#414671
Fiz o seguinte código para lista todos os dados do meu bd em sql em uma listbox, conforme vou digitando vai filtrando os dados
Também coloquei que: se o campo de texto estiver em branco o listbox não será visivil, mas também gostaria que, quando digitar um nome que ainda não esteja em meu banco de dados o listbox também não ficaria visivel.
Também tem outro porém, quando digito letra o mesmo faz o filtro procurando em toda a palavra, se caso tenha a meio da palavra a letra digitada, ela também aparece, e eu não queria assim, queria que de digitasse a letra [Ô]A[Ô] ele listava apenas países que começasse com A.
espero ter sido claro.

Segue meu código:

 
Dim contador As Integer [ô]Contador de registos
contador = 0
Listanome.Visible = True
[ô]Limpa o listbox
Listanome.Items.Clear()
[ô] Texto de ligação à base de dados
Dim linha As String = Application.StartupPath & [Ô]\SIAF.mdf[Ô]
Dim myConnectionString As String = _
[Ô]Data source=.\SQLEXPRESS;AttachDbFilename=[Ô] & linha & [Ô];Integrated Security=True;User Instance=True[Ô]

Dim Con As SqlConnection = New SqlConnection(myConnectionString)
Con.Open()
Dim reader As SqlDataReader
Dim cmd As New SqlCommand([Ô]SELECT Pais FROM TBPais WHERE Pais LIKE [ô]%[Ô] & txtnome.Text & [Ô]%[ô] [Ô], Con)
reader = cmd.ExecuteReader
While reader.Read()
Listanome.Items.Add(reader([Ô]Pais[Ô])) [ô]Adiciona a pesquisa ao listbox
contador = contador + 1
Dim tamanho As Integer = 17 * contador
If txtnome.Text = [Ô][Ô] Then
Listanome.Visible = False [ô]Coloca o listbox invisivel
Else
[ô]Define o tamanho do listbox
If tamanho > [Ô]85[Ô] Then
Listanome.Height = [Ô]85[Ô]
Else
Listanome.Height = tamanho
End If
End If
End While
[ô]se não for encontrado nenhum regito não exibe o listbox.


[ô]Fecha as conexões
Con.Close()
reader.Close()
cmd.Dispose()
End Sub


Consegui fazer a busca por letras e o código ficou assim:

  
Dim contador As Integer [ô]Contador de registos
contador = 0
Listanome.Visible = True
[ô]Limpa o listbox
Listanome.Items.Clear()
[ô] Texto de ligação à base de dados
Dim linha As String = Application.StartupPath & [Ô]\SIAF.mdf[Ô]
Dim myConnectionString As String = _
[Ô]Data source=.\SQLEXPRESS;AttachDbFilename=[Ô] & linha & [Ô];Integrated Security=True;User Instance=True[Ô]

Dim Con As SqlConnection = New SqlConnection(myConnectionString)
Con.Open()
Dim reader As SqlDataReader
Dim cmd As New SqlCommand([Ô]SELECT * FROM TBPais WHERE Pais LIKE [ô][Ô] & txtnome.Text & [Ô]%[ô] [Ô], Con)
reader = cmd.ExecuteReader
While reader.Read()
Listanome.Items.Add(reader([Ô]Pais[Ô])) [ô]Adiciona a pesquisa ao listbox
contador = contador + 1
Dim tamanho As Integer = 17 * contador
If txtnome.Text = [Ô][Ô] Then
Listanome.Visible = False [ô]Coloca o listbox invisivel
Else
[ô]Define o tamanho do lis
If tamanho > [Ô]85[Ô] Then
Listanome.Height = [Ô]85[Ô]
Else
Listanome.Height = tamanho
End If
End If
End While
[ô]Fecha as conexões
Con.Close()
reader.Close()
cmd.Dispose()


Só que agora precisava de outras coisas.

1º Quando digitar um nome que ainda não tenha em meu BD o listbox fosse envissível.
Ex.
Se digitasse somente [Ô]p[Ô] listava todos os paises que começam por p
mas se digitar [Ô]pe[Ô] e não encontrar nenhum pais que inicie com essas letras o listbox não aparecia.

2º Quando terminasse de digitar todos o nome e fosse listado apenas 1 item no listbox também não seria visivel.
NAUTILUZ 28/11/2012 09:28:22
#414926
1 Use o IF isnull
ou coloque visible = true dentro do while

2 Use o IF MID(-1(len(campo)) = [Ô] [Ô] then

Espero telo ajudado valeu..
MARCELO.TREZE 28/11/2012 09:52:19
#414931
colega posta esta sua duvida no forum vb.net eles te ajudarão, seu codigo é .net e não vb6 ou vba

porque na realidade você terá de fazer uma verificação na consulta, o que em vb6 ficaria assim

If (RS.EOF And RS.BOF) then List1.Visible = False


Tópico encerrado , respostas não são mais permitidas