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

    Dcount com 4 critérios dando erro [Resolvido]

    Compartilhe

    diegogcoelho
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3
    Registrado : 17/06/2013

    Dcount com 4 critérios dando erro [Resolvido]

    Mensagem  diegogcoelho em Ter 15 Ago 2017, 13:22

    Bom dia senhores.

    Sempre recorri ao fórum para tirar dúvidas e aprender mais sobre o uso do Access e já tem muito tempo que o fórum me tem sido de grande valia.
    Acontece que estou com uma duvida que eu ainda não encontrei resposta por aqui, e nem em outras fontes na internet, e venho na esperança que alguém possa me ajudar.
    Já estou quebrando a cabeça no problema abaixo a mais de uma semana. Segue o explicativo:
    Trata-se de um sistema de autorização de acesso a salas, é cadastrado: a carteirinha do estudante, o numero da sala a data de inicio e a data final da autorização.

    Tabela - Autorizacao:
    *Carteirinha -> numero duplo -> sequencial possui 11 dígitos
    *Sala -> numero duplo -> sequencial possui 11 dígitos
    *Data_inicial -> Data abreviada
    *Data_final  -> Data abreviada

    Formulario – Autoriza:
    *Caixa de texto 1 -> num_cart -> não acoplado
    *Caixa de texto 2 -> num_sala -> não acoplado
    *Botão -> Verifica

    A ideia é que eu entre com os dados do numero da carteirinha e da sala e clique no botão “Verifica”. O botão tem um código VBA que deve executar uma consulta na tabela “Autorização” e ver se existe alguma linha contendo os dois códigos (carteirinha e sala) e verifica se a data atual está entre a data inicial e final, caso todas essas condições esteja satisfeitas ele retorna com uma caixa de mensagem dizendo: “Autorização concedida”.
    Vi aqui no fórum e em outras fontes que a função DCOUNT se encaixaria no que eu quero fazer, porem estou com muitos problemas na parte dos critérios, quando não acontece erro de sintaxe acontece uma falha que diz que os dados são incompatíveis. Segue abaixo o código feito para o botão verifica.

    Código:
    Private Sub Verifica_Click()
    Dim Ncart, Nsala As Double
    Dim contador As Integer
    Dim data As Date

    Ncart = 0
    Nsala = 0
    contador = 0
    data = Date

    If Me.num_cart <> "" Then
        Ncart = CDbl(Me.num_cart)
    End If

    If Me.num_sala <> "" Then
        Nsala = CDbl(Me.num_sala)
    End If

    contador = DCount("Carteirinha", "Autorizacao", "Carteirinha = " & Ncart And "Sala = " & Nsala And "Data_inicial <= #" & data & "#" And "Data_final >= #" & data & "#")

    If contador > 0 Then
        MsgBox "Autorização concedida!"
        Else
        MsgBox "Autorização NÃO concedida!"
    End If

    End Sub

    Agradeço muito quem puder me ajudar.
    Obrigado.
    Anexos
    Database1.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (106 Kb) Baixado 2 vez(es)


    Última edição por diegogcoelho em Ter 15 Ago 2017, 17:21, editado 1 vez(es)
    avatar
    marceloarboit
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 84
    Registrado : 09/07/2015

    Re: Dcount com 4 critérios dando erro [Resolvido]

    Mensagem  marceloarboit em Ter 15 Ago 2017, 14:04

    Bom dia Diego,

    Eu também sempre tive muitos problemas com DCount, DLookup com vários critérios. Eu acabo sempre recorrendo a consultas pra fazer uma pré-filtragem e adaptar o código as minhas necessidades.

    Utilizando seu exemplo, eu criei uma consulta para filtrar os intervalos de datas conforme sua necessidade, e fiz o DCount com base nessa query.

    Segue o exemplo que criei.

    Espero ter ajudado!

    Abraço,
    Marcelo.
    Anexos
    Database1-Rev.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (114 Kb) Baixado 4 vez(es)
    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1043
    Registrado : 05/02/2010

    DCount com 4 critérios dando erro

    Mensagem  good guy em Ter 15 Ago 2017, 14:53

    Olá Diego, tente assim:

    Código:

    Private Sub Verifica_Click()
    Dim Ncart, Nsala As Long
    Dim contador As Integer
    Dim dtdata, dtdatainicial As Date

    Ncart = Me.num_cart
    Nsala = Me.num_sala
    contador = 0

    dtdatainicial = Nz(DLookup("data_inicial", "Autorizacao", "num_sala = " & Nsala))
    dtdata = Date

    If Me.num_cart <> "" Then
        Ncart = CLng(Me.num_cart)
    End If

    If Me.num_sala <> "" Then
        Nsala = CLng(Me.num_sala)
    End If

    If Nz(DLookup("Carteirinha", "Autorizacao", "Data_inicial >= #" & dtdatainicial & "#")) <> Ncart Then  '1ª condição
    MsgBox "Autorização NÃO concedida!", vbCritical, "Autorização"
    Else
    If Nz(DLookup("Sala", "Autorizacao", "Data_final >= #" & dtdata & "#")) <> Nsala Then    '2ª condição
    MsgBox "Autorização NÃO concedida!", vbCritical, "Autorização"
    Else
    contador = Nz(DCount("Carteirinha", "Autorizacao", "Carteirinha = " & Ncart)) '

        If contador > 0 Then
            MsgBox "Autorização concedida!", vbInformation, "Autorização"
            Else
            MsgBox "Autorização NÃO concedida!", vbCritical, "Autorização"
        End If
    End If
    End If
    End Sub
    Anexos
    Autorizacao.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (26 Kb) Baixado 3 vez(es)

    diegogcoelho
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3
    Registrado : 17/06/2013

    Re: Dcount com 4 critérios dando erro [Resolvido]

    Mensagem  diegogcoelho em Ter 15 Ago 2017, 15:48

    Obrigado marceloarboit e good guy pela disponibilidade.
    A principio as duas maneiras funcionaram, mas ao adicionar mais autorizações na tabela, as duas sugestões mostraram algumas inconsistências. Autorizando onde não devia ou não autorizando quando devia.
    Como esse sistema terá varias autorizações cadastradas eu extrapolei e coloquei 4 registros na tabela para fazer testes.
    Segue abaixo os quatro registros que usei para fazer os testes.


    Carteirinha   sala        Data_inicial    Data_final  
    721046        987654   01/07/2017   31/07/2017  
    721045        654321   01/07/2017   31/07/2017  
    720146        654321   01/08/2017   31/08/2017  
    720145        987654   01/08/2017   31/08/2017
    Se você puderem fazer a gentileza de testar.
    Mas de qualquer maneira, obrigado novamente.
    avatar
    marceloarboit
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 84
    Registrado : 09/07/2015

    Re: Dcount com 4 critérios dando erro [Resolvido]

    Mensagem  marceloarboit em Ter 15 Ago 2017, 16:10

    Diego,

    Realmente. Nesse caso, eu não poderia ter feito 2 contadores distintos, tive que usar o AND para funcionar.
    Veja se agora está correto!

    Abs.,
    Marcelo.
    Anexos
    Database1-Rev2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (116 Kb) Baixado 5 vez(es)

    diegogcoelho
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3
    Registrado : 17/06/2013

    Re: Dcount com 4 critérios dando erro [Resolvido]

    Mensagem  diegogcoelho em Ter 15 Ago 2017, 16:19

    Testei aqui Marcelo, e agora funcionou perfeitamente.

    Muito obrigado pela ajuda.
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6496
    Registrado : 05/11/2009

    Re: Dcount com 4 critérios dando erro [Resolvido]

    Mensagem  Alexandre Neves em Ter 15 Ago 2017, 17:06

    Boa tarde,
    Falta o "Resolvido"


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

      Data/hora atual: Sab 18 Nov 2017, 13:41