Avaliação do Usuário

Estrela ativaEstrela ativaEstrela ativaEstrela ativaEstrela inativa
 


{ads1} 

9 - Baixando a Ordem da Música

A sequência básica da operação de baixar a ordem de uma música obedece uma sequência praticamente inversa à anterior e pode ser definida como:

I – Verificar se não há mais de uma música selecionada: para não dificultar muito o entendimento vamor realizar a operação apenas com um item por vez;

II – Armazenar a posição do item na caixa de listagem: podemos buscar esta posição obtendo o valor do item selecionado na posição 0, que é o primeiro item selecionado;

III – Verificar se o item não é o último da lista:  logicamente o último item não pode ter sua posição alterada para baixo;

IV – Criando uma consulta para obter um recordset editável com o mesmo conjunto de registros da caixa de listagem, na mesma ordem;

V – Mover o cursor para a posição do item: a posição no recordset será equivalente à posição na caixa de listagem, mais uma posição;

VI – Armazenar a maior e a menor  ordem: elas serão invertidas, sendo que a menor ordem é a do item selecionado e a maior a do item que será substituído;

VII – Atribuir a maior ordem ao item atual e salvar o recordset;

VIII – Mover o cursor para o próximo item, atribuir a menor ordem ao item atual, que era o próximo, e salvar o recordset, fechando em seguida;

IX – Atualizar a caixa de listagem;

X – Inverter a posição da seleção na caixa de listagem.

Veja como fica o código da operação:

Private Sub btnOrdemAbaixo_Click()

    'Declarando as variáveis
    Dim rstMusica As New ADODB.Recordset
    Dim ordemMaior As Integer
    Dim ordemMenor As Integer
    Dim itemLista As Integer
    Dim strSql As String
    
    'Verificando se há mais de um item selecionado
    If lstOrdemMusica.ItemsSelected.Count <> 1 Then
        MsgBox "Para alterar a ordem selecione apenas uma música.", _
                vbExclamation, "Classificação Musical"
        Exit Sub
    End If
    
    'Vamos guardar a posição do item selecionado
    'em relação ao conjunto total de itens
    itemLista = lstOrdemMusica.ItemsSelected(0)

    'Verificando se o item não é o último da lista
    If itemLista < lstOrdemMusica.ListCount - 1 Then
        
        'Criando e abrindo uma consulta editável para
        'alterar os valores e posições dos itens
        strSql = "Select * From SucessoMusical Where artista='" & _
        cbxArtista & "' Order By ordem"
        rstMusica.Open strSql, CurrentProject.Connection, _
            adOpenKeyset, adLockOptimistic
        
        'Movendo o cursor da consulta para a
        'posição do item selecionado
        rstMusica.AbsolutePosition = itemLista + 1
        
        'Armazenando a ordem dos dois itens que
        'serão invertidos
        ordemMaior = lstOrdemMusica.Column(1, itemLista + 1)
        ordemMenor = lstOrdemMusica.Column(1, itemLista)
        
        'Atribuindo a nova ordem ao primeiro item
        'Este item ficará com a ordem maior
        rstMusica("ordem") = ordemMaior
        'Salvando a alteração no recordset
        rstMusica.Update
        
        'Movendo para o próximo item
        rstMusica.MoveNext
        'Atribuindo a nova ordem ao segundo item
        'Este item ficará com a ordem menor
        rstMusica("ordem") = ordemMenor
        'Salvando a alteração no recordset
        rstMusica.Update
        
        'Fechando e destruindo o recordset
        rstMusica.Close
        Set rstMusica = Nothing
        
        'Atualizando a caixa de listagem
        lstOrdemMusica.Requery
        
        'Mudando a seleção dos itens da caixa de listagem
        lstOrdemMusica.Selected(itemLista + 1) = True
        lstOrdemMusica.Selected(itemLista) = False
        
    End If

End Sub

Como podem perceber a manipulação de registros através de caixas de listagem é algo relativamente simples, desde que realizada com atenção e paciência.

Alguns códigos auxiliares foram incluídos para ilustração, como por exemplo a mensagem de confirmação das operações. Estes códigos não são necessários, então fique à vontade para alterar o que desejar.

A partir do exemplo fornecido espero que o leitor seja capaz de aperfeiçoar a técnica e aplicar o conhecimento a seus projetos de maneira satisfatória.

Para facilitar o entendimento, em caso de dúvidas, fique à vontade para consultar o arquivo de exemplo com os códigos implementados.

Exemplo para download: CaixaListagem.zip

Muito obrigado pela atenção e até a próxima!

Seja social. Compartilhe!