none
Criar filtros utilizando os critérios data inicial data final e placa do veículo RRS feed

  • Pergunta

  • Bom dia !

    Estou criando um formulário que inicialmente carrega as informações do meu banco de dados, porém preciso ter a opção de realizar alguns filtros que seriam entre a data inicial a data final e a placa do veículo. 

    Alguém poderia me ajudar com o comando
    quarta-feira, 6 de abril de 2016 14:44

Respostas

  • Você pode usar filtros SQL também. Não é recomendável usar muito essa técnica, pois pode dar problemas de vazamento de memória em certos cenários, como deixar seus dados num LIstObject e inserir registros na tabela frequentemente:

    Sub Main()
        Dim cn As Connection
        Dim NumRecords As Long
        Dim rs As ADODB.Recordset
        Dim sb As Collection
        Dim Sql As String
        Dim iLine As Variant
        
        Set cn = New ADODB.Connection
        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                              "Data Source=" & ThisWorkbook.FullName & ";" & _
                              "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        cn.Open
        
        Set sb = New Collection
        sb.Add "select *"
        sb.Add "from [Plan1$]"
        sb.Add "where     [Placa] like 'AAA-%'"
        sb.Add "      and [Motorista] = 'JOÃO'"
        sb.Add "order by [Motorista], [Placa]"
        
        For Each iLine In sb
            Sql = Sql & iLine & vbNewLine
        Next iLine
        
        Set rs = New ADODB.Recordset
        rs.CursorLocation = adUseClient
        rs.Open Sql, cn, adOpenForwardOnly, adLockReadOnly
        NumRecords = rs.RecordCount
        
        Do Until rs.EOF
            'Código para povoar o ListView
            Debug.Print rs!Motorista, rs!Placa
            '
            rs.MoveNext
        Loop
        
        rs.Close
        Set rs = Nothing
        cn.Close
        Set cn = Nothing
    End Sub
    


    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    quarta-feira, 6 de abril de 2016 20:48
    Moderador

Todas as Respostas

  • Por exemplo, para filtrar todas as placas que começam AAA e com motoristas de nome JOÃO:

    Sub Main()
        'Em qual linha começam os dados?
        Const DATA_ROW As Long = 2
        
        Dim i As Long
        Dim LastRow As Long
        Dim ws As Worksheet
        
        Set ws = ThisWorkbook.Worksheets("Plan1")
        
        With ws
            LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
            For i = 2 To LastRow
                If Not .Cells(i, "A") Like "AAA*" Then GoTo Continue
                If .Cells(i, "B") <> "JOÃO" Then GoTo Continue
                
                'Aqui coloque a rotina para inserir os dados na ListView.
    Continue:
            Next i
        End With
    End Sub
    


    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    • Marcado como Resposta Jannaina Silva quarta-feira, 6 de abril de 2016 20:28
    • Não Marcado como Resposta Jannaina Silva quarta-feira, 6 de abril de 2016 20:28
    quarta-feira, 6 de abril de 2016 18:18
    Moderador
  • Você pode usar filtros SQL também. Não é recomendável usar muito essa técnica, pois pode dar problemas de vazamento de memória em certos cenários, como deixar seus dados num LIstObject e inserir registros na tabela frequentemente:

    Sub Main()
        Dim cn As Connection
        Dim NumRecords As Long
        Dim rs As ADODB.Recordset
        Dim sb As Collection
        Dim Sql As String
        Dim iLine As Variant
        
        Set cn = New ADODB.Connection
        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                              "Data Source=" & ThisWorkbook.FullName & ";" & _
                              "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        cn.Open
        
        Set sb = New Collection
        sb.Add "select *"
        sb.Add "from [Plan1$]"
        sb.Add "where     [Placa] like 'AAA-%'"
        sb.Add "      and [Motorista] = 'JOÃO'"
        sb.Add "order by [Motorista], [Placa]"
        
        For Each iLine In sb
            Sql = Sql & iLine & vbNewLine
        Next iLine
        
        Set rs = New ADODB.Recordset
        rs.CursorLocation = adUseClient
        rs.Open Sql, cn, adOpenForwardOnly, adLockReadOnly
        NumRecords = rs.RecordCount
        
        Do Until rs.EOF
            'Código para povoar o ListView
            Debug.Print rs!Motorista, rs!Placa
            '
            rs.MoveNext
        Loop
        
        rs.Close
        Set rs = Nothing
        cn.Close
        Set cn = Nothing
    End Sub
    


    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    quarta-feira, 6 de abril de 2016 20:48
    Moderador