MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


2 participantes

    [Resolvido]Classificando Colunas Listview

    avatar
    mfrigerio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 112
    Registrado : 01/08/2012

    [Resolvido]Classificando Colunas Listview Empty Classificando Colunas Listview

    Mensagem  mfrigerio 11/10/2012, 13:15

    Bom dia respeitados amigos deste Forum.
    venho novamente recorrer a vocês por uma ajuda.

    Estou tentando ordenar o listview com uma coluna numéria utilizando o seguinte método ao carregar userform contendo listview

    Código:

        'Ordenar Coluna Listview
        ListView1.SortOrder = lvwDescending '= lvwAscending
        ListView1.SortKey = 0
        ListView1.Sorted = True
    porém ele me retorna assim, conforme imagem abaixo ... não obedecendo a ordem correta dos números.

    Imagem da Tela

    alguém poderia por favor me ajudar nessa .... antecipo abradecimentos.
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Classificando Colunas Listview Empty Re: [Resolvido]Classificando Colunas Listview

    Mensagem  criquio 11/10/2012, 13:27

    O campo é tipo número? De que forma a listview é carregada? Via Recordset?


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    mfrigerio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 112
    Registrado : 01/08/2012

    [Resolvido]Classificando Colunas Listview Empty Re: [Resolvido]Classificando Colunas Listview

    Mensagem  mfrigerio 11/10/2012, 13:42

    Bom dia.
    Meu banco de dados esta em access2010, o campo é autonumérico.
    estou sim utilizando um Recordset.

    em um Formulário tenho este listview, que carrego essas informaçoes ao abrir o formulário
    . obs: Quando eu Clico em cima do rótulo da coluna listview , eu consigo esse resultado, pois utilizo o código Abaixo para isso, e funciona direitinho .... porém gostaria que ao abrir o formulário fizesse isso....


    Código:


    Private Sub UserForm_Initialize()
     'cabecalho do listview
        With ListView1
            .Gridlines = True
            .View = lvwReport
            .FullRowSelect = True
            .ColumnHeaders.Add(Text:="Núm.Lanç.", Width:=50, Alignment:=fmAlignmentLeft).Tag = "Number"
            .ColumnHeaders.Add(Text:="Data", Width:=55, Alignment:=fmAlignmentLeft).Tag = "Date"
            .ColumnHeaders.Add(Text:="Ano", Width:=30, Alignment:=fmAlignmentLeft).Tag = "Number"
            .ColumnHeaders.Add(Text:="Mês", Width:=50, Alignment:=fmAlignmentLeft).Tag = "String"
            .ColumnHeaders.Add(Text:="Nome Condutor", Width:=115, Alignment:=fmAlignmentLeft).Tag = "String"
            .ColumnHeaders.Add(Text:="Centro Custo", Width:=80, Alignment:=fmAlignmentLeft).Tag = "String"
            .ColumnHeaders.Add(Text:="Placa", Width:=50, Alignment:=fmAlignmentLeft).Tag = "String"
            .ColumnHeaders.Add(Text:="Marcação KM", Width:=60, Alignment:=fmAlignmentRight).Tag = "Number"
            .ColumnHeaders.Add(Text:="Litros", Width:=50, Alignment:=fmAlignmentRight).Tag = "Number"
            .ColumnHeaders.Add(Text:="Vr.Unit.", Width:=50, Alignment:=fmAlignmentRight).Tag = "Number"
            .ColumnHeaders.Add(Text:="Vr.Total", Width:=70, Alignment:=fmAlignmentRight).Tag = "Number"
           
        End With

    ..........  restante do código


    End Sub





    ' Classificando Colunas
    Private Sub Listview1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    '-------------------------------------------------------------------------
       
      On Error Resume Next
       
       
     
       
        ' Começa ordenar o listview pela coluna clicada
       
        With ListView1
       
            ' Display the hourglass cursor whilst sorting
           
            Dim lngCursor As Long
            lngCursor = .MousePointer
            .MousePointer = vbHourglass
           
            ' Prevent the ListView control from updating on screen -
            ' this is to hide the changes being made to the listitems
            ' and also to speed up the sort
           
           
           
            ' Check the data type of the column being sorted,
            ' and act accordingly
           
            Dim l As Long
            Dim strFormat As String
            Dim strData() As String
           
            Dim lngIndex As Long
            lngIndex = ColumnHeader.Index - 1
       
            Select Case UCase$(ColumnHeader.Tag)
            Case "DATE"
           
                ' Sort by date.
               
                strFormat = "YYYYMMDDHhNnSs"
           
                ' Loop through the values in this column. Re-format
                ' the dates so as they can be sorted alphabetically,
                ' having already stored their visible values in the
                ' tag, along with the tag's original value
           
                With .ListItems
                    If (lngIndex > 0) Then
                        For l = 1 To .Count
                            With .Item(l).ListSubItems(lngIndex)
                                .Tag = .Text & Chr$(0) & .Tag
                                If IsDate(.Text) Then
                                    .Text = Format(CDate(.Text), _
                                                        strFormat)
                                Else
                                    .Text = ""
                                End If
                            End With
                        Next l
                    Else
                        For l = 1 To .Count
                            With .Item(l)
                                .Tag = .Text & Chr$(0) & .Tag
                                If IsDate(.Text) Then
                                    .Text = Format(CDate(.Text), _
                                                        strFormat)
                                Else
                                    .Text = ""
                                End If
                            End With
                        Next l
                    End If
                End With
               
                ' Sort the list alphabetically by this column
               
                .SortOrder = (.SortOrder + 1) Mod 2
                .SortKey = ColumnHeader.Index - 1
                .Sorted = True
               
                ' Restore the previous values to the 'cells' in this
                ' column of the list from the tags, and also restore
                ' the tags to their original values
               
                With .ListItems
                    If (lngIndex > 0) Then
                        For l = 1 To .Count
                            With .Item(l).ListSubItems(lngIndex)
                                strData = Split(.Tag, Chr$(0))
                                .Text = strData(0)
                                .Tag = strData(1)
                            End With
                        Next l
                    Else
                        For l = 1 To .Count
                            With .Item(l)
                                strData = Split(.Tag, Chr$(0))
                                .Text = strData(0)
                                .Tag = strData(1)
                            End With
                        Next l
                    End If
                End With
               
            Case "NUMBER"
           
                ' Sort Numerically
           
                strFormat = String(30, "0") & "." & String(30, "0")
           
                ' Loop through the values in this column. Re-format the values so as they
                ' can be sorted alphabetically, having already stored their visible
                ' values in the tag, along with the tag's original value
           
                With .ListItems
                    If (lngIndex > 0) Then
                        For l = 1 To .Count
                            With .Item(l).ListSubItems(lngIndex)
                                .Tag = .Text & Chr$(0) & .Tag
                                If IsNumeric(.Text) Then
                                    If CDbl(.Text) >= 0 Then
                                        .Text = Format(CDbl(.Text), _
                                            strFormat)
                                    Else
                                        .Text = "&" & InvNumber( _
                                            Format(0 - CDbl(.Text), _
                                            strFormat))
                                    End If
                                Else
                                    .Text = ""
                                End If
                            End With
                        Next l
                    Else
                        For l = 1 To .Count
                            With .Item(l)
                                .Tag = .Text & Chr$(0) & .Tag
                                If IsNumeric(.Text) Then
                                    If CDbl(.Text) >= 0 Then
                                        .Text = Format(CDbl(.Text), _
                                            strFormat)
                                    Else
                                        .Text = "&" & InvNumber( _
                                            Format(0 - CDbl(.Text), _
                                            strFormat))
                                    End If
                                Else
                                    .Text = ""
                                End If
                            End With
                        Next l
                    End If
                End With
               
                ' Sort the list alphabetically by this column
               
                .SortOrder = (.SortOrder + 1) Mod 2
                .SortKey = ColumnHeader.Index - 1
                .Sorted = True
               
                ' Restore the previous values to the 'cells' in this
                ' column of the list from the tags, and also restore
                ' the tags to their original values
               
                With .ListItems
                    If (lngIndex > 0) Then
                        For l = 1 To .Count
                            With .Item(l).ListSubItems(lngIndex)
                                strData = Split(.Tag, Chr$(0))
                                .Text = strData(0)
                                .Tag = strData(1)
                            End With
                        Next l
                    Else
                        For l = 1 To .Count
                            With .Item(l)
                                strData = Split(.Tag, Chr$(0))
                                .Text = strData(0)
                                .Tag = strData(1)
                            End With
                        Next l
                    End If
                End With
           
            Case Else  ' Assume sort by string
               
                ' Sort alphabetically. This is the only sort provided
                ' by the MS ListView control (at this time), and as
                ' such we don't really need to do much here
           
                .SortOrder = (.SortOrder + 1) Mod 2
                .SortKey = ColumnHeader.Index - 1
                .Sorted = True
               
            End Select
       
         
           
            .MousePointer = lngCursor
       
        End With
       
    End Sub

    ' Classificando Colunas
    '****************************************************************
    ' InvNumber
    ' Function used to enable negative numbers to be sorted
    ' alphabetically by switching the characters
    '----------------------------------------------------------------

    Private Function InvNumber(ByVal Number As String) As String
        Static i As Integer
        For i = 1 To Len(Number)
            Select Case Mid$(Number, i, 1)
            Case "-": Mid$(Number, i, 1) = " "
            Case "0": Mid$(Number, i, 1) = "9"
            Case "1": Mid$(Number, i, 1) = "8"
            Case "2": Mid$(Number, i, 1) = "7"
            Case "3": Mid$(Number, i, 1) = "6"
            Case "4": Mid$(Number, i, 1) = "5"
            Case "5": Mid$(Number, i, 1) = "4"
            Case "6": Mid$(Number, i, 1) = "3"
            Case "7": Mid$(Number, i, 1) = "2"
            Case "8": Mid$(Number, i, 1) = "1"
            Case "9": Mid$(Number, i, 1) = "0"
            End Select
        Next
        InvNumber = Number
    End Function


    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Classificando Colunas Listview Empty Re: [Resolvido]Classificando Colunas Listview

    Mensagem  criquio 11/10/2012, 14:12

    Quando falei em Recordset, me referia a algo como:

    Set rs = "Select * from NomeDaTabela"

    Nesse caso o filtro poderia ser passado no próprio Recordset:

    Set rs = "Select * from NomeDaTabela ORDER BY NomeDoCampo"

    Mas dê uma olhada aqui para ver se ajuda.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    mfrigerio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 112
    Registrado : 01/08/2012

    [Resolvido]Classificando Colunas Listview Empty Re: [Resolvido]Classificando Colunas Listview

    Mensagem  mfrigerio 11/10/2012, 14:29


    Obrigado pela ajuda ...
    mas não consegui entender direito ...
    veja por favor como estou carregando o userform.


    Código:


    Private Sub UserForm_Initialize()
         
       
     'cabecalho do listview
        With ListView1
            .Gridlines = True
            .View = lvwReport
            .FullRowSelect = True
            .ColumnHeaders.Add(Text:="Núm.Lanç.", Width:=50, Alignment:=fmAlignmentLeft).Tag = "Number"
            .ColumnHeaders.Add(Text:="Data", Width:=55, Alignment:=fmAlignmentLeft).Tag = "Date"
            .ColumnHeaders.Add(Text:="Ano", Width:=30, Alignment:=fmAlignmentLeft).Tag = "Number"
            .ColumnHeaders.Add(Text:="Mês", Width:=50, Alignment:=fmAlignmentLeft).Tag = "String"
            .ColumnHeaders.Add(Text:="Nome Condutor", Width:=115, Alignment:=fmAlignmentLeft).Tag = "String"
            .ColumnHeaders.Add(Text:="Centro Custo", Width:=80, Alignment:=fmAlignmentLeft).Tag = "String"
            .ColumnHeaders.Add(Text:="Placa", Width:=50, Alignment:=fmAlignmentLeft).Tag = "String"
            .ColumnHeaders.Add(Text:="Marcação KM", Width:=60, Alignment:=fmAlignmentRight).Tag = "Number"
            .ColumnHeaders.Add(Text:="Litros", Width:=50, Alignment:=fmAlignmentRight).Tag = "Number"
            .ColumnHeaders.Add(Text:="Vr.Unit.", Width:=50, Alignment:=fmAlignmentRight).Tag = "Number"
            .ColumnHeaders.Add(Text:="Vr.Total", Width:=70, Alignment:=fmAlignmentRight).Tag = "Number"
           
        End With
       
       
    'Conectando banco de dados
        Dim cn As ADODB.Connection
        Set cn = New ADODB.Connection
        With cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & ActiveWorkbook.Path & "\BANCO-FROTA.MDB;"
            .Properties("Jet OLEDB:Database Password") = "123"
            .Open
        End With

        'Abrindo a tabela do banco de dados
        Set rs = New ADODB.Recordset
        rs.Open "Lancamentos", cn, adOpenKeyset, adLockOptimistic, adCmdTable ' Todos os registros da tabela"

        'limpa a lista
        ListView1.ListItems.Clear
        While Not rs.EOF
              Set li = ListView1.ListItems.Add(, , rs.Fields("Código").Value)
                If IsNull(rs.Fields("DataLanc").Value) Then
                    DtLanc = ""
                Else
                    DtLanc = rs.Fields("DataLanc").Value
                End If
                  li.SubItems(1) = DtLanc
                 
                If IsNull(rs.Fields("AnoLanc").Value) Then
                    AnoLanc = ""
                Else
                    AnoLanc = rs.Fields("AnoLanc").Value
                End If
                  li.SubItems(2) = AnoLanc
                 
                If IsNull(rs.Fields("MesLanc").Value) Then
                    MesLanc = ""
                Else
                    MesLanc = rs.Fields("MesLanc").Value
                End If
                  li.SubItems(3) = UCase(MesLanc)
                 
                If IsNull(rs.Fields("NomeCondutor").Value) Then
                    NomeCondutor = ""
                Else
                    NomeCondutor = rs.Fields("NomeCondutor").Value
                End If
                  li.SubItems(4) = UCase(NomeCondutor)
                 
                If IsNull(rs.Fields("NomeCentroCusto").Value) Then
                    NomeCentroCusto = ""
                Else
                    NomeCentroCusto = rs.Fields("NomeCentroCusto").Value
                End If
                  li.SubItems(5) = UCase(NomeCentroCusto)
                 
                If IsNull(rs.Fields("Placa").Value) Then
                    Placa = ""
                Else
                    Placa = rs.Fields("Placa").Value
                End If
                  li.SubItems(6) = UCase(Placa)
                 
                If IsNull(rs.Fields("KM").Value) Then
                    KM = ""
                Else
                    KM = rs.Fields("KM").Value
                End If
                  li.SubItems(7) = Format(KM, "#,###")
                 
                If IsNull(rs.Fields("Litros").Value) Then
                    Litros = ""
                Else
                    Litros = rs.Fields("Litros").Value
                End If
                  li.SubItems(8) = Format(Litros, "###,#0.0")
                 
                If IsNull(rs.Fields("VrUnitario").Value) Then
                    VrUnitario = ""
                Else
                    VrUnitario = rs.Fields("VrUnitario").Value
                End If
                  li.SubItems(9) = Format(VrUnitario, "##,##0.000")
                 
              ' Vr Total Calculado
                  li.SubItems(10) = Format(CDbl(Litros * VrUnitario), "##,##0.00")
                 
            rs.MoveNext
        Wend
       
        'Ordenar Coluna Listview
        ListView1.SortOrder = lvwDescending '= lvwAscending
        ListView1.SortKey = 0
        ListView1.Sorted = True
     
      'Desconectar banco
        rs.Close 'fecha a tabela
        Set rs = Nothing
        cn.Close 'fecha o banco de dados
        Set cn = Nothing
         

    End Sub


    onde eu colocaria essa ordenação no código acima... obrigado ...



    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Classificando Colunas Listview Empty Re: [Resolvido]Classificando Colunas Listview

    Mensagem  criquio 11/10/2012, 14:45

    Tente alterar a linha abaixo:

    rs.Open "Lancamentos", cn, adOpenKeyset, adLockOptimistic, adCmdTable ' Todos os registros da tabela"

    para:

    rs.Open "SELECT * FROM Lancamentos ORDER BY NomeDoCampoASerOrdenado", cn, adOpenKeyset, adLockOptimistic, adCmdTable ' Todos os registros da tabela"


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    mfrigerio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 112
    Registrado : 01/08/2012

    [Resolvido]Classificando Colunas Listview Empty Re: [Resolvido]Classificando Colunas Listview

    Mensagem  mfrigerio 11/10/2012, 14:50

    Muito obrigado.
    Resolveu expetacularmente ....
    e era fácil d+ a solução ... obrigado mesmo ... aprendi + essa ...
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Classificando Colunas Listview Empty Re: [Resolvido]Classificando Colunas Listview

    Mensagem  criquio 11/10/2012, 16:33

    Só faltou clicar no botão Resolvido. Dessa vez eu mesmo clico, mas fica o lembrete para sempre finalizar o tópico quando o mesmo for Resolvido.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.


    Conteúdo patrocinado


    [Resolvido]Classificando Colunas Listview Empty Re: [Resolvido]Classificando Colunas Listview

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 7/5/2024, 16:57