Avaliação do Usuário

Estrela ativaEstrela ativaEstrela ativaEstrela ativaEstrela inativa
 


{ads1} 

6 - Associando uma Música

Para realizar uma associação com os itens selecionados devemos realizar os seguintes passos:

I – Verificar se há um artista selecionado e armazenar o seu valor: podemos fazer isto apenas verificando se o campo cbxArtista não está nulo, já que o artista será obtido no momento da montagem do código SQL;

II – Criar um loop finito para associar cada item selecionado: esta etapa pode ser realizada criando-se um loop For Next, começando de 0 (zero, primeiro item da coleção de selecionados) e o total de itens selecionados menos um. A caixa de listagem possui uma propriedade que  nos fornece o total de itens selecionados:

lstMusica.ItemsSelected.Count

Assim podemos verificar cada um dos itens informando o item atual dentro do loop:

lstMusica.ItemsSelected(i)

A partir da referência ao item buscamos o código da música, o qual se encontra na primeira coluna da caixa de listagem, acessado através da seguinte propriedade:

lstMusica.Column(0, itemLista)

III – Buscamos a última ordem musical para o artista atual: utilizando o DMax, encontramos a maior ordem entre as músicas associadas ao artista, assim obtemos a próxima ordem a ser atribuída.

IV – Montamos e executamos o código SQL para realizar a associação, que consiste em atribuir o nome do artista selecionado ao campo artista e o valor da próxima ordem ao campo ordem;

VI – Atualizamos as duas caixas de listagem.

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

Private Sub btnIncluir_Click()
   
    'Declarando as variáveis
    Dim codigoMusica As Integer
    Dim itemLista As Integer
    Dim strSql As String
    Dim i As Integer
    Dim ultimaOrdem As Long
   
    'Verificando se há um artista selecionado
    If IsNull(cbxArtista) Then
        MsgBox "Escolha um artista!", vbExclamation, _
            "Classificação Musical"
        Exit Sub
    End If
   
    'Solicitando confirmação da classificação da música
    If MsgBox("Confirma a classificação da(s) música(s)?", _
        vbYesNo + vbQuestion, "Associação Música/Artista") = vbYes Then
       
        'Para cada item selecionado
        For i = 0 To lstMusica.ItemsSelected.Count - 1
           
            'Armazenando o número do item
            itemLista = lstMusica.ItemsSelected(i)
            'Armazenando o código da música
            codigoMusica = lstMusica.Column(0, itemLista)
           
            'Buscando a última ordem de classificação das músicas
            'do artista atual
            ultimaOrdem = Nz(DMax("ordem", "SucessoMusical", "artista='" & _
                cbxArtista & "'"), 0)
           
            'Montando o sql para a atribuição do artista e a classificação
            'da música na próxima ordem
            strSql = "Update SucessoMusical Set artista='" & cbxArtista & _
                      "', ordem=" & ultimaOrdem + 1 & _
                      " Where codMusica=" & codigoMusica
           
            'Executando o sql
            executaSql strSql
           
        Next i
       
        'Atualizando as caixas de litagem através
        'dos eventos da caixa de combinação do artista
        'e dos botões da caixa de listagem da música
        Call cbxArtista_AfterUpdate
        Call gpoMusica_Click
   
    End If

End Sub

7 - Desassociando uma Música

Para realizar a desassociação de uma música devemos executar passos semelhantes aos da associação. Porém alguns detalhes são diferentes entre as duas operações. Veja como deve ser a sequência:

I – Verificar se há itens selecionados para a desassociação;

II – Criar um loop For Next inverso: a desassociação deve ser feita a partir do último elemento, pois a cada desassociação a ordem dos itens seguintes deve ser reduzida;

III – Obter os valores do item, do código da música e da ordem da música;

IV – Montar e executar o código SQL para realizar a desassociação, que consiste em atribuir Nulo para o campo artista e 0 para a ordem;

VI – Atualizar as duas caixas de listagem, através dos métodos apropriados.

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

Private Sub btnExcluir_Click()
   
    'Declarando as variáveis
    Dim codigoMusica As Integer
    Dim ordemMusica As Integer
    Dim itemLista As Integer
    Dim strSql As String
    Dim i As Integer
    Dim musica As String
   
    'Verificando se há itens selecionados para exclusão
    If lstOrdemMusica.ItemsSelected.Count > 0 Then
       
        'Solicitando confirmação do usuário para a exclusão da associação
        If MsgBox("Confirma a desclassificação da(s) música(s)?", _
              vbYesNo + vbQuestion, "Associação Música/Artista") = vbYes Then
       
            'Para cada item selecionado
            For i = lstOrdemMusica.ItemsSelected.Count - 1 To 0 Step -1
               
                'Armazenando o número do item
                itemLista = lstOrdemMusica.ItemsSelected(i)
                'Armazenando o código da música
                codigoMusica = lstOrdemMusica.Column(0, itemLista)
                'Armazenando a ordem da música
                ordemMusica = lstOrdemMusica.Column(1, itemLista)
               
                'Montando o sql para exclusão da classificação da música
                strSql = "Update SucessoMusical Set artista=Null,ordem=0 " & _
            "Where codMusica=" & codigoMusica
               
                'Executando o sql
                executaSql strSql
               
                'Montando o sql para atualização das músicas com ordem
        'superior à excluída
                strSql = "Update SucessoMusical Set ordem=ordem-1 Where artista='" & _
            cbxArtista & "' And ordem > " & ordemMusica
               
                'Executando o sql
                executaSql strSql
               
            Next i
       
        End If
       
        'Atualizando as caixas de litagem através
        'dos eventos da caixa de combinação do artista
        'e dos botões da caixa de listagem da música
        Call cbxArtista_AfterUpdate
        Call gpoMusica_Click
   
    End If
   
End Sub

Seja social. Compartilhe!