Página 1 de 1

Aplicar propriedade a todos itens marcados com checkboxes em listview

Enviado: Seg Ago 06, 2018 4:16 pm
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

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

Enviado: Seg Ago 06, 2018 5:41 pm
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

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

Enviado: Qua Ago 08, 2018 11:35 am
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...

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

Enviado: Qua Ago 08, 2018 11:38 am
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!!!