MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Carregar caixa de combinação com itens NÃO lançados em tabela relacionada

    Compartilhe
    MZapia
    MZapia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 27
    Registrado : 10/10/2015

    [Resolvido]Carregar caixa de combinação com itens NÃO lançados em tabela relacionada

    Mensagem  MZapia em 2/1/2019, 20:33

    Boa tarde...Feliz 2019 para todos...

    Surgiu uma dúvida aqui (deu pane...)

    Possuo três tabelas:

    TABELA: tbDepartamento
    ID_Departamento
    Departamento

    TABELA: tbPermissao
    ID_Permissao
    ID_Departamento
    ID_Modulo

    TABELA: tbModulo
    ID_Modulo
    Modulo

    Relacionamento: Departamento --> Permissao <--Modulo

    Estou querendo carregar uma caixa de combinação com os MÓDULOS (tbModulo.Modulo) não lançados ainda na tabela (tbPermissao) do departamento selecionado.

    EXEMPLO:

    Departamento: FINANCEIRO
    na tabela de permissão já foram lançados 3 módulos num total de 10 módulos cadastrados.
    Quero quando eu clicar na combo cboDepartamento apareça apenas os 07 módulos faltantes...

    Tentei utilizar o LEFT JOIN, porém deu erro...

    Alguém pode me auxiliar?
    Atenciosamente,
    Marcelo Zapia
    Marcelo David
    Marcelo David
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2538
    Registrado : 21/04/2011

    Re: [Resolvido]Carregar caixa de combinação com itens NÃO lançados em tabela relacionada

    Mensagem  Marcelo David em 3/1/2019, 11:32

    Bom dia e feliz 2019!  cheers

    Não entendi como que saberemos que o modulo 1 pertence ao departamento 2, pois quem faz essa relação é a tabela tbPermissao?

    Pois se ainda não há esse vinculo, não teremos como carregar apenas os modulos do departamento selecionado, uma vez que quem faz o vinculo é a própria tabela de permissões.

    Imagino que teremos que repensar a estrutura de tabelas e campos, caso meus questionamentos não possam ser esclarecidos.

    No aguardo.


    .................................................................................
    Marcelo David
    www.mrdsystem.com.br (em construção)
    MZapia
    MZapia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 27
    Registrado : 10/10/2015

    Re: [Resolvido]Carregar caixa de combinação com itens NÃO lançados em tabela relacionada

    Mensagem  MZapia em 3/1/2019, 12:38

    Prezado Marcelo, bom dia.

    Primeiramente, obrigado pela atenção.

    É o seguinte, fiz a pedido do cliente a permissão através do departamento do funcionário, ou seja, todo acesso e outras operações se dará para os departamentos que consequentemente estão relacionados com a tabela de usuários.

    A tabela módulo, nada mais é que o nome "amigável" dos formulários que estarão sob permissão.

    O que gostaria de fazer é na hora em que o usuário for dar permissão para um determinado departamento, ao clicar no botão incluir, carregasse a caixa de combinação com apenas os módulos em que o departamento ainda não foi relacionado.

    Exemplo:

    Possuo 3 módulos cadastrados: Cadastro de Clientes, Cadastro de Fornecedores e Cadastro de Bancos.

    O Departamento Financeiro já está com permissões para o Cadastro de Bancos...

    Se for incluir uma nova permissão para o departamento financeiro, ao clicar em incluir, carrega na caixa de combinação apenas os (Cadastro de Clientes e Cadastro de Fornecedores)...

    Abaixo, segue a função para carregar a caixa de combinação (que carrega TODOS os módulos)

    Código:
    Public Function fncCarregaModulo()
    '------------------------------------------------------------------------------------------
    'Carregar a combo
    '------------------------------------------------------------------------------------------
    Dim strSQL As String

    strSQL = "Select tbUsuarioPermissaoModulo.ID_Modulo,tbUsuarioPermissaoModulo.Modulo"
    strSQL = strSQL & " FROM tbUsuarioPermissaoModulo"
    strSQL = strSQL & " ORDER BY tbUsuarioPermissaoModulo.ID_Modulo"

    'Limpa a combo
    With cboModulo
        .RowSource = ""
        .RowSource = strSQL
    End With
    '------------------------------------------------------------------------------------------
    End Function


    Obrigado...
    Anexos
    Relacionamento.jpg
    Você não tem permissão para fazer download dos arquivos anexados.
    (35 Kb) Baixado 4 vez(es)
    Marcelo David
    Marcelo David
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2538
    Registrado : 21/04/2011

    Re: [Resolvido]Carregar caixa de combinação com itens NÃO lançados em tabela relacionada

    Mensagem  Marcelo David em 3/1/2019, 23:56

    Agora entendi.
    Vi que os nomes das tabelas informadas na mensagem 1 não coincidem com os nomes
    apresentado na imagem dos relacionamento. E pensando na estrutura que você pretende,
    me parece que falta relacionamento um para muitos.

    Diante disse e para sermos assertivos, poste seu banco para que testemos algo ou até mesmo
    altere caso seja necessário.



    .................................................................................
    Marcelo David
    www.mrdsystem.com.br (em construção)
    MZapia
    MZapia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 27
    Registrado : 10/10/2015

    Re: [Resolvido]Carregar caixa de combinação com itens NÃO lançados em tabela relacionada

    Mensagem  MZapia em 4/1/2019, 13:24

    Prezado Marcelo, bom dia.

    Segue o banco de dados (teste) para vossa análise.

    O que preciso: Quando selecionar o departamento, a caixa de combinação dos módulos carregue apenas os módulos que NÃO foram relacionados ao departamento selecionado...

    Atualmente, a caixa de combinação (Módulo) carrega TODOS os módulos.

    Grato pela sua atenção...
    Atenciosamente,

    Marcelo Zapia
    Anexos
    bdTeste.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (67 Kb) Baixado 4 vez(es)
    Dilson
    Dilson
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1739
    Registrado : 11/11/2009

    Re: [Resolvido]Carregar caixa de combinação com itens NÃO lançados em tabela relacionada

    Mensagem  Dilson em 4/1/2019, 16:32

    Experimente. Coloque no evento Ao receber foco do controle cboModulo:


    On Error GoTo TratarErro
    Recomeca:
    Dim bd As DAO.Database
    Dim Query1 As QueryDef
    Dim Query2 As QueryDef
    Set bd = CurrentDb
    Set Query1 = bd.CreateQueryDef("QDF1", "SELECT tbUsuarioPermissaoModulo.ID_Modulo, tbUsuarioPermissaoModulo.Modulo, tbUsuarioPermissao.Departamento " _
                                               & "FROM tbUsuarioPermissaoModulo LEFT JOIN tbUsuarioPermissao ON tbUsuarioPermissaoModulo.ID_Modulo = tbUsuarioPermissao.Modulo " _
                                               & "WHERE (((tbUsuarioPermissao.Departamento)=" & Me.cboDepartamento & "))")
    Set Query2 = bd.CreateQueryDef("QDF2", "SELECT tbUsuarioPermissaoModulo.ID_Modulo, tbUsuarioPermissaoModulo.Modulo " _
                                               & "FROM tbUsuarioPermissaoModulo LEFT JOIN QDF1 ON tbUsuarioPermissaoModulo.ID_Modulo = QDF1.ID_Modulo " _
                                               & "WHERE (((QDF1.ID_Modulo) Is Null));")
    Me.cboModulo.RowSource = "QDF2"
    bd.Close
    Exit_TrataErro:
    Exit Sub
    TratarErro:
    If Err.Number = 3012 Then
          DoCmd.DeleteObject acQuery, "QDF1"
          DoCmd.DeleteObject acQuery, "QDF2"
          GoTo Recomeca
    Else
          MsgBox "Aconteceu um erro inesperado. N° do Erro: " & Err.Number & "; Descrição do Erro: " & Err.Description
    End If
    Resume Exit_TrataErro


    Última edição por Dilson em 4/1/2019, 17:05, editado 1 vez(es) (Razão : Acrescentei a variável bd para referenciar CurrentDb)
    MZapia
    MZapia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 27
    Registrado : 10/10/2015

    Re: [Resolvido]Carregar caixa de combinação com itens NÃO lançados em tabela relacionada

    Mensagem  MZapia em 4/1/2019, 23:30

    Prezado Dilson, boa noite.

    Grato pelo auxílio...deu certo...

    Pesquisei sobre LEFT JOIN e pelo que entendi (espero que seja isso) , funciona com apenas 1 (uma) tabela, correto?!

    Já havia realizado em outras situações, mas sempre com uma tabela relacionada apenas...neste caso são duas tabelas...

    Muito obrigado pela ajuda...

    Abraço.

    Marcelo Zapia
    Dilson
    Dilson
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1739
    Registrado : 11/11/2009

    Re: [Resolvido]Carregar caixa de combinação com itens NÃO lançados em tabela relacionada

    Mensagem  Dilson em 5/1/2019, 15:02

    Olá Zapia !

    Ótimo cheers

    Sim sim meu camarada, no momento que vi a relação das tabelas já fiz de imediato uma instancia LEFT JOIN sobre duas tabelas (Modulo e Permissão) e me trouxe o resultado esperado sob um critério apenas: (ID Modulo = Nulo do lado da tabela Permissao). No entanto havia o critério ID Departamento a ser considerado e os dois foram colocados e não houve resultado algum. Percebi que teria primeiro que usar uma query para selecionar o ID Departamento desejado e com o resultado aplicar na segunda query a trazer o resultado.

    Implemente da melhor maneira ao seu caso.

    Até !





      Data/hora atual: 23/1/2019, 07:59