UPDATE COM LOOP NO LISTVIEW

WMR2018 31/10/2017 13:35:55
#477535
Boa Tarde pessoal

Preciso fazer um update numa tabela, baseado nos itens marcados num listview

A ideia seria consultar na tabela Usuario, o [Ô]Usuario[Ô] com o campo [Ô]Login[Ô] igual ao exibido no [Ô]combo1[Ô]

Ai baseado nos checkbox marcado do listview de cada linha, ele iria atualizar os campos na tabela USUARIO daquele [Ô]login=combo1[Ô]

Fiz mais ou menos assim, mais nao dar certo,

O que tá faltando?



UPDATE usuario SET WHERE (login = [ô][Ô] & Combo1 & [Ô][ô])


For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems.Item(i).Text = [Ô]Clientes - Inclusão[Ô] Then
rsUsuario.Fields([Ô]cliinc[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
ElseIf ListView1.ListItems.Item(i).Text = [Ô]Clientes - Alteração[Ô] Then
rsUsuario.Fields([Ô]clialt[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
ElseIf ListView1.ListItems.Item(i).Text = [Ô]Clientes - Exclusão[Ô] Then
rsUsuario.Fields([Ô]cliexc[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
ElseIf ListView1.ListItems.Item(i).Text = [Ô]Produtos - Inclusão[Ô] Then
rsUsuario.Fields([Ô]prodinc[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
ElseIf ListView1.ListItems.Item(i).Text = [Ô]Produtos - Alteração[Ô] Then
rsUsuario.Fields([Ô]prodalt[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
ElseIf ListView1.ListItems.Item(i).Text = [Ô]Produtos - Exclusão[Ô] Then
rsUsuario.Fields([Ô]prodexc[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
End If
Next

rsUsuario.Update


uso VB6 + SQLServer2008
OMAR2011 31/10/2017 14:35:41
#477537
Resposta escolhida
Use o próprio Lstviiew para faze o Update.
OMAR2011 31/10/2017 18:53:13
#477541
Verifica este exemplo e faz modificação ao seu gosto.
WMR2018 31/10/2017 21:19:51
#477542
Citação:

:
Verifica este exemplo e faz modificação ao seu gosto.


basicamente o exemplo é de exemplos de exibição no listview... no meu caso seria edição:

A Ideia seria exibir dados no listview, marcar/desmarcar o que quiser, e depois clicar no botão para salvar... entao fiz assim:

Public Sub ListarUsuario()
Dim sSQL As String

sSQL = [Ô]SELECT *, login, codigo FROM usuario ORDER BY codigo[Ô]
Set rsUsuario = dbData.OpenRecordset(sSQL)

Do While Not rsUsuario.EOF
cboLogin.AddItem rsUsuario.Fields([Ô]login[Ô])
cboLogin.ItemData(cboLogin.NewIndex) = rsUsuario([Ô]codigo[Ô])
rsUsuario.MoveNext
Loop
End Sub


Private Sub Command1_Click()
If MsgBox([Ô]Confirma a alteração no perfil de acesso?[Ô], vbQuestion + vbYesNo + vbDefaultButton2, [Ô]Controle de Acesso[Ô]) = vbYes Then

rsUsuario.MoveFirst
rsUsuario.Find [Ô]login=[ô][Ô] & cboLogin & [Ô][ô][Ô]

If Not rsUsuario.EOF Then
Call GravarAcesso
Else
MsgBox [Ô]Ocorreu um erro ao localizar usuário![Ô], vbExclamation, [Ô]Acesso[Ô]
End If
End If
End Sub


Sub GravarAcesso()
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems.Item(i).Text = [Ô]Clientes - Inclusão[Ô] Then
rsUsuario.Fields([Ô]cliinc[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
ElseIf ListView1.ListItems.Item(i).Text = [Ô]Clientes - Alteração[Ô] Then
rsUsuario.Fields([Ô]clialt[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
ElseIf ListView1.ListItems.Item(i).Text = [Ô]Clientes - Exclusão[Ô] Then
rsUsuario.Fields([Ô]cliexc[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
ElseIf ListView1.ListItems.Item(i).Text = [Ô]Produtos - Inclusão[Ô] Then
rsUsuario.Fields([Ô]prodinc[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
ElseIf ListView1.ListItems.Item(i).Text = [Ô]Produtos - Alteração[Ô] Then
rsUsuario.Fields([Ô]prodalt[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
ElseIf ListView1.ListItems.Item(i).Text = [Ô]Produtos - Exclusão[Ô] Then
rsUsuario.Fields([Ô]prodexc[Ô]) = IIf(ListView1.ListItems.Item(i).Checked = True, [Ô]1[Ô], [Ô]0[Ô])
End If
Next
rsUsuario.Update
MsgBox [Ô]Perfil de acesso cadastrado![Ô], vbInformation, [Ô]Perfil[Ô]
End Sub


o erro tá dando na subrotina GravarAcesso, pois ela diz que o comando que tô usando não permita [Ô]atualizar[Ô] os dados
OMAR2011 01/11/2017 15:31:55
#477557
Que tipo de campo da tabela é

rsUsuario.Fields([Ô][txt-color=#e80000]cliinc[/txt-color][Ô])
rsUsuario.Fields([Ô][txt-color=#e80000]clialt[/txt-color][Ô])
WMR2018 01/11/2017 16:46:55
#477559
Citação:

:
Que tipo de campo da tabela é

rsUsuario.Fields([Ô][txt-color=#e80000]cliinc[/txt-color][Ô])
rsUsuario.Fields([Ô][txt-color=#e80000]clialt[/txt-color][Ô])


tipo: int
OMAR2011 01/11/2017 17:21:26
#477560
O projeto que lhe enviei você consegue editar uma célula do Listiview.
Executa e clica no terceiro botão e tenta editar clicando em Stock e Baja.
Usei e modifiquei deste jeito para editar com checkbox sim ou não,accesse.

Private Sub Command7_Click()
On Error GoTo error_Sub

Dim rs As ADODB.Recordset

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient


rs.Open [Ô]Select * from perfis[Ô], conexao, adOpenStatic, adLockOptimistic
rs.MoveFirst

Dim item As ListItem
Dim i As Integer
While Not rs.EOF
i = i + 1
Set item = ListView1.ListItems(i)
If ListView1.ListItems.item(i).Checked Then

rs(5) = 1
rs(6) = 1
rs(7) = 1
rs(8) = 1
rs(9) = 1
[ô] rs(6) = 1
rs.Update
rs.MoveNext
Else
rs(5) = 0
rs(6) = 0
rs(7) = 0
rs(8) = 0
rs(9) = 0
[ô]rs(6) = 1
rs.Update
rs.MoveNext
End If
Wend

rs.Close
Set rs = Nothing

Exit Sub
error_Sub:
MsgBox Err.Description
End Sub
Tópico encerrado , respostas não são mais permitidas