USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  ListView
cleyton_keu
PORTO ALEGRE
RS - BRASIL
Postada em 19/07/2006 00:47 hs            
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
     
ghost_jlp
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO PAULO
SP - BRASIL
Postada em 19/07/2006 11:43 hs            
aparentemente está certo... qual o erro?
     
Sandro
não registrado
Postada em 19/07/2006 16:59 hs   
Olá,
 
Tabém não vi problemas no seu código, mas você não disse o erro que aparece...
Bom, eu percebi que você está usando o listview com várias colunas, mas você já criou essas colunas? Como o  código é apenas uma parte do seu formulário, não dá para ver se você já criou as colunas. abaixo eu crio três colunas em um ListView, só como exemplo:
 
Dim Coluna As MSComctlLib.ColumnHeader
 
ListView1.View = lvwReport
 
Set Coluna = ListView1.ColumnHeaders.Add(, , "coluna 1")
Set Coluna = ListView1.ColumnHeaders.Add(, , "coluna 2")
Set Coluna = ListView1.ColumnHeaders.Add(, , "coluna 3")
 
Set Coluna = Nothing
 
Se não houver um código semelhante a esse no seu programa, você não poderá usar os Subitens para exibir os campos da sua consulta.
 
um abraço,
Sandro.
     
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2025   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página