Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Aplicar propriedade a todos itens marcados com checkboxes em listview

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Anderson Rafael
Colaborador
Colaborador
Mensagens: 28
Registrado em: Seg Mai 14, 2018 11:09 am

Aplicar propriedade a todos itens marcados com checkboxes em listview

Mensagem por Anderson Rafael »

Olá galera, estou com uma dúvida, parece simples de resolver mas estou a dias quebrando a cabeça e não encontro nada, tenho um listview que ativo os checkboxes clicando em um botão, ao ativar desejo selecionar variados itens da lista e fazer um "UPDATE" no banco de dados access naqueles itens marcados, segue o que tenho até o momento
Obs: com este procedimento ele altera todos os dados do listview, e não apenas os selecionados

Código: Selecionar todos

Private Sub btnEntregar_Click()
Application.ScreenUpdating = False
Dim cx As New ClasseConexao
Dim banco As ADODB.Recordset
i = 1
For i = 1 To lstLista.ListItems.Count
        sql = "UPDATE Fornecedores"
        sql = sql & " SET Status = '" & "ENTREGUE" & "'"
        If Not IsNull(Me.txtEntregar.Value) Then sql = sql & ", Efetiva = '" & Me.txtEntregar.Value & "'"
    If lstLista.ListItems(i).Checked = True Then
        sql = sql & " WHERE Pedido = " & lstLista.ListItems.Item(i).Checked
    End If
i = i + 1
Next i
        Set banco = New ADODB.Recordset
        cx.Conectar
        banco.Open sql, cx.conn
    Set banco = Nothing
    cx.Desconectar
Application.ScreenUpdating = True
Call PopulaListBox(txtCliente.Text, txtProduto.Text, txtMunicipio.Text, txtPedido.Text, cboPendente.Text, txtDatIni.Value)
End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Aplicar propriedade a todos itens marcados com checkboxes em listview

Mensagem por Reinaldo »

Talvez algo +/- assim:

Código: Selecionar todos

Private Sub btnEntregar_Click()
Application.ScreenUpdating = False
Dim cx As New ClasseConexao
Dim banco As ADODB.Recordset
Dim SQL As String, SqlWhere As String
i = 1
'Monta clausula where para itens selecionados
For i = 1 To lstLista.ListItems.Count
    If lstLista.ListItems(i).Checked = True Then
        If SqlWhere <> vbNullString Then
            SqlWhere = SqlWhere & " OR" & "Pedido = " & lstLista.ListItems.Item(i)
        Else
            SqlWhere = " WHERE Pedido = " & lstLista.ListItems.Item(i)
        End If
    End If
i = i + 1
Next i
'Monta string do sql
    SQL = "UPDATE Fornecedores"
    SQL = SQL & " SET Status = '" & "ENTREGUE" & "'"
    If Not IsNull(Me.txtEntregar.Value) Then SQL = SQL & ", Efetiva = '" & Me.txtEntregar.Value & "'"
'Verifica se há conteudo na clausila where e adcionA na sql
    If SqlWhere <> vbNullString Then SQL = SQL & SqlWhere
        
        Set banco = New ADODB.Recordset
        cx.Conectar
        banco.Open SQL, cx.conn
    Set banco = Nothing
    cx.Desconectar
Application.ScreenUpdating = True
Call PopulaListBox(txtCliente.Text, txtProduto.Text, txtMunicipio.Text, txtPedido.Text, cboPendente.Text, txtDatIni.Value)
End Sub


Anderson Rafael
Colaborador
Colaborador
Mensagens: 28
Registrado em: Seg Mai 14, 2018 11:09 am

Re: Aplicar propriedade a todos itens marcados com checkboxes em listview

Mensagem por Anderson Rafael »

Olá Reinaldo, desculpe a demora para responder, acabou que nao tive tempo de dar uma olhada no fórum.
Inseri seu código, QUASE funcionou...
Agora está funcionando ele atualizar os dados selecionados nos checkboxes do listview, porém por algum motivo ele está aplicando um sim um não, por exemplo, seleciono 5 registros para alterar, ele altera o 1, o 3 e o 5...


Anderson Rafael
Colaborador
Colaborador
Mensagens: 28
Registrado em: Seg Mai 14, 2018 11:09 am

Re: Aplicar propriedade a todos itens marcados com checkboxes em listview

Mensagem por Anderson Rafael »

Reinaldo, acabei de descobrir, assim que respondi me flagrei da solução, acontece por causa do i = i + 1 seguido de next i, assim ele sempre pula um registro, o que fiz foi tirar o i = i + 1 e deixar somente o next i, Muito obrigado!!!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder