none
CHECKBOX NO LISTVIEW NÃO MARCA TODOS OS CHECKS (vb6) RRS feed

  • Pergunta

  • Boa tarde Pessoal, uso o VB6 e...

    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?
    sexta-feira, 15 de janeiro de 2021 19:21

Todas as Respostas

  • Tente assim:

    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)
            
    If ListView1.ListItems.Item(i).Text = 'AJUSTE' Then
                ListView1.ListItems.Item(i).Checked = IIf(r.Fields('Cod_Permissao') = 2, True, False)
    
    If ListView1.ListItems.Item(i).Text = 'EXCLUIR' Then
                ListView1.ListItems.Item(i).Checked = IIf(r.Fields('Cod_Permissao') = 3, True, False)
    
    If ListView1.ListItems.Item(i).Text = 'REATIVAR' Then
                ListView1.ListItems.Item(i).Checked = IIf(r.Fields('Cod_Permissao') = 4, True, False)
           
        Next


    MARIANO1776

    sexta-feira, 15 de janeiro de 2021 22:46
  • Tente assim:

    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)
            
    If ListView1.ListItems.Item(i).Text = 'AJUSTE' Then
                ListView1.ListItems.Item(i).Checked = IIf(r.Fields('Cod_Permissao') = 2, True, False)
    
    If ListView1.ListItems.Item(i).Text = 'EXCLUIR' Then
                ListView1.ListItems.Item(i).Checked = IIf(r.Fields('Cod_Permissao') = 3, True, False)
    
    If ListView1.ListItems.Item(i).Text = 'REATIVAR' Then
                ListView1.ListItems.Item(i).Checked = IIf(r.Fields('Cod_Permissao') = 4, True, False)
           
        Next


    MARIANO1776

    Amigo e os "END IF" ?
    sexta-feira, 15 de janeiro de 2021 23:23
  • Para este caso não é necessário end if.

    Deve-se digitar na mesma linha, assim:

    If a=b then b=a

    É um teste, se não der certo retorne.

    Estou testando com vb.net, pode não dar certo.


    MARIANO1776

    sábado, 16 de janeiro de 2021 00:42
  • Para este caso não é necessário end if.

    Deve-se digitar na mesma linha, assim:

    If a=b then b=a

    É um teste, se não der certo retorne.

    Estou testando com vb.net, pode não dar certo.


    MARIANO1776

    Amigo, testei aqui

    deu no mesmo...

    Se o usuário tiver mais de 1 permissão, ele marca(check=true) somente de uma... as coisas ficam com check=false

    Coloquei um usuário somente com a permissão com código = 2... ele marcou certinho (marcou a linha do "AJUSTE")

    Coloquei um usuário com 2 permissões (1 e 2)... ele marcou somente o primeiro check (referente a permissão com código = 1 (ESTORNAR)) 



    sábado, 16 de janeiro de 2021 01:20