Pessoal abri um tópico sobre Listbox mas na verdade tenho q fazer com o ListView, vou explicar melhor, tenho um banco chamado Sismaco, dentro tem uma tabela chamada Material(cod_mat, material, marca, vlr), e tenho 2 formulários, um q cadastra Material (esse já está feito com suas funcionalidades) e tenho outro chamado chamado PesqMat, onde tem os textboxes(cod_mat, material, marca)
O q preciso fazer é digitar o cod_mat ou material ou marca ou todos e embaixo aparecer os dados dessa pesquisa no ListView: Abaixo tem meu código fonte, do form e da conexão, alguém poderia me ajudar no erro, ou alguém tem algum exemplo ou link.
/////Botão pesquisar
Private Sub btnPesq_Click()
Dim rs As New ADODB.Recordset
Dim sql As String
Dim whereAnd As String
' Limpa o resultado da última pesquisa...
ListView1.ListItems.Clear
' Variavel auxiliar na concatenação dos critérios do select
whereAnd = "Where "
sql = " Select Cod_Mat, Material, Marca, Quantidade, Valor from Material) "
' Só coloco o critério de nome na query se o usuário informou algo
If txtCod.Text <> "" Then
' O operador like permite encontrar o(s) caracter(es) informados
' pelo usuário em qualquer parte do campo. O % é um coringa, como
' coloquei no inicio e no fim do critério, ele vai procurar em qualquer
' parte do campo....
sql = sql & whereAnd & "Cod_Mat Like '%" & txtCod.Text & "%'"
whereAnd = "And "
End If
' Só coloco o critério de Mat se o usuário informou algo no campo
If txtMat.Text <> "" Then
' como o Mat tem que ser identico ao informado, uso o operador igual
sql = sql & whereAnd & "Material Like '%" & txtMat.Text & "%'"
End If
' Só coloco o critério de Mat se o usuário informou algo no campo
If txtMarc.Text <> "" Then
' como o Mat tem que ser identico ao informado, uso o operador igual
sql = sql & whereAnd & "Marca Like '%" & txtMarc.Text & "%'"
' Executo a query e obtenho o resultado
rs.Open sql, cn, adOpenForwardOnly
' Se algo foi encontrado...
If Not rs.BOF And Not rs.EOF Then
' ... percorro o resultado
While Not rs.EOF
Dim lvi As ListItem
Dim chave As String
' Vou colocar uma chave no item, mas não é necessário a principio.
' Uma chave tem que ter um valor único na coleção
chave = "Key" & rs("Cod_Mat")
' Crio o item...
Set lvi = ListView1.ListItems.Add(, chave, rs("Material"))
' ... e para cada coluna atribuo seu valor....
lvi.SubItems(1) = rs("Material")
lvi.SubItems(2) = rs("Marca")
lvi.SubItems(3) = rs("Quantidade")
lvi.SubItems(4) = rs("Valor")
' Passei a guardar o cod_mat no tag.
lvi.Tag = rs("Cod_Mat")
' proximo registro...
rs.MoveNext
Wend
Else
' Se não encontrar nada, dou uma mensagem de erro...
MsgBox "Nenhum registro encontrado.", vbInformation, "Exemplo"
End If
' Não esquecer de fechar o recordset e limpá-lo da memória
rs.Close
Set rs = Nothing
End If
End Sub
/////Do ListView
Private Sub ListView1_BeforeLabelEdit(Cancel As Integer)
If Not ListView1.SelectedItem Is Nothing Then
' Carrego o form em memória
Load frmAlt
' Carregos os text's com os valores...
frmAlt.txtCodAnt.Text = ListView1.SelectedItem.Text
frmAlt.txtMatAnt.Text = ListView1.SelectedItem.SubItems(1)
frmAlt.txtMarAnt.Text = ListView1.SelectedItem.SubItems(2)
frmAlt.txtQtdAnt = ListView1.SelectedItem.SubItems(3)
frmAlt.txtVlrAnt.Text = ListView1.SelectedItem.SubItems(4)
' Na hora de carregar o listview, passei a por na tag o cod_mat para
' facilitar o Update na outra tela.
frmAlt.Cod_Mat = ListView1.SelectedItem.Tag
'Alinho os detalhes no centro do form Clientes
frmAlt.Top = ((PesqMat.Height - frmAlt.Height) / 2) + Clientes.Top
frmAlt.Left = ((PesqMat.Width - frmAlt.Width) / 2) + Clientes.Left
' Exibo o form
frmAlt.Show vbModal
' Refaço a pesquisa para atualizar os dados
btnPesq_Click
End If
End Sub
/////módulo conexão
Option Explicit
Public cn As ADODB.Connection
Private Sub Main()
Dim strArquivo As String
Dim strLocal As String
Set cn = New ADODB.Connection
strArquivo = "SisMaCo.mdb"
strLocal = App.Path
cn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=" & strArquivo & ";" & _
"DefaultDir=" & strLocal & ";" & _
"Uid=Admin;Pwd=;"
' Já vou deixar a conexão aberta...
cn.Open
' Para exibir o form, basta chamar o Show. Isso dispara o evento Load do
' form e em seguida ele aparece na tela.
frmPesqMat.Show
End Sub