CHECKBOX NO LISTVIEW NÃO MARCA TODOS OS CHECKS

 Tópico anterior Próximo tópico Novo tópico

CHECKBOX NO LISTVIEW NÃO MARCA TODOS OS CHECKS

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#496067 - 15/01/2021 17:14:49

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Boa tarde Pessoal,

Tenho a seguinte estrutura:
Tabela: Usuario
Codigo: 1
Login: João

Codigo: 2
Login: Maria

Tabela: Usuario_permissoes
Codigo: 1
Permissao: 'ESTORNAR'

Codigo: 2
Permissao: 'AJUSTE'

Tabela: Usuario_Acessos
Cod_Usuario: 1
Cod_Permissao: 1

Cod_Usuario: 1
Cod_Permissao: 2

Cod_Usuario: 2
Cod_Permissao: 1

São 3 tabelas... uma com meus usuários, outras com as permissões criadas e outra é o relacionamento das 2 tabelas (ou seja, qual permissão cada usuário tem).
Resumidamente: João pode ESTORNAR e AJUSTE e Maria somente ESTORNAR.

Preciso jogar todas as permissões em um listview com checkbox.... caso o usuário possua uma permissão o check = true, caso não, check = false na permissão que ele possui.

Fiz assim:

sSQL = 'SELECT usuario.*, usuario_permissoes.*, Usuario_Acessos.*, usuario_permissoes.permissao ' & _
'FROM usuario INNER JOIN usuario_acessos ON usuario.codigo = Usuario_Acessos.cod_usuario INNER JOIN usuario_permissoes ON usuario_permissoes.codigo = Usuario_Acessos.cod_permissao ' & _
'WHERE (usuario_acessos.cod_usuario = ' & txtCodLogin.Text & ')'

Set r = dbData.OpenRecordset(sSQL)

If r.BOF Then
    If r.State <> 0 Then r.Close
    Set r = Nothing
    Exit Sub
End If

Check1.Value = 0

Call LerAcesso


Sub LerAcesso()
Dim i As Integer

For i = 1 To ListView1.ListItems.Count
    If ListView1.ListItems.Item(i).Text = 'ESTORNAR' Then
        ListView1.ListItems.Item(i).Checked = IIf(r.Fields('Cod_Permissao') = 1, True, False)
    ElseIf ListView1.ListItems.Item(i).Text = 'AJUSTE' Then
        ListView1.ListItems.Item(i).Checked = IIf(r.Fields('Cod_Permissao') = 2, True, False)
    ElseIf ListView1.ListItems.Item(i).Text = 'EXCLUIR' Then
        ListView1.ListItems.Item(i).Checked = IIf(r.Fields('Cod_Permissao') = 3, True, False)
    ElseIf ListView1.ListItems.Item(i).Text = 'REATIVAR' Then
        ListView1.ListItems.Item(i).Checked = IIf(r.Fields('Cod_Permissao') = 4, True, False)
    End If
Next
End Sub


Aparece as permissões no listview... ele chega a marcar(check=true) uma permissão, mais caso o usuário tenha 2 ou mais permissões, ele não marca as outras

O que posso fazer para corrigir isso?







#496075 - 17/01/2021 13:04:21

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Citação:
:
Faço diferente.
For i = 1 To ListView1.ListItems.Count
    If ListView1.ListItems(i).ListSubItems(4).Text = 'ESTORNAR' Then
        ListView1.ListItems.item(i).Checked = True
    ElseIf  ListView1.ListItems(i).ListSubItems(4).Text = 'AJUSTE' Then
       ListView1.ListItems.item(i).Checked = True
    End If
Next


Amigo, tentei com 'i' e com '4' e deu mesmo erro:

For i = 1 To ListView1.ListItems.Count
    If ListView1.ListItems(i).ListSubItems(i).Text = 'ESTORNAR' Then
        ListView1.ListItems.Item(i).Checked = True
    ElseIf ListView1.ListItems(i).ListSubItems(i).Text = 'AJUSTE' Then
        ListView1.ListItems.Item(i).Checked = True
    End If
Next


erro: Index out of bounds



#496081 - 17/01/2021 21:03:54

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Citação:
:
Você não pode repetir o i.
If ListView1.ListItems(i).ListSubItems(?).Text = 'ESTORNAR' Then
        ListView1.ListItems.Item(i).Checked = True
    ElseIf ListView1.ListItems(i).ListSubItems(?).Text = 'AJUSTE' Then
        ListView1.ListItems.Item(i).Checked = True
    End If
Essa interrogação que coloquei é para a sua coluna onde vai aparecer  ESTORNAR,AJUSTE E OUTROS.
Ela pode ser a segunda,terceira,quarta ou mais.Depende de sua Consulta


Meu listview só exibe o checkbox e a permissão

'exibir todas as permissões no listview
sSQL = 'SELECT codigo, permissao from usuario_permissoes;'
Set RS = dbData.OpenRecordset(sSQL)

Do While Not RS.EOF
    ListView1.ListItems.Add , , RS.Fields(1)
    RS.MoveNext
Loop


Mudei seu ponto de interrogação por 0, 1, 2, 3, 4
Deu mesmo erro



 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário