MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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


3 participantes

    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período.

    avatar
    Goia
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 28/07/2010

    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período. Empty [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período.

    Mensagem  Goia 25/11/2013, 02:09

    Boas,
    Tenho 3 tabelas("Ausência","Treinamento". "Licença") com os campos ("Nome", "DtInicial","DtFinal"l)
    No Form aberto vinculado a tabela "Ausência" uso Dcount após atualizar o campo "DtFinal" que retornar uma Msg caso já exista registro para o "Nome" naquele período. (Funciona OK), porém pretendo que ao mesmo tempo o Dcount  verifique também nas outras 2 tabelas para evitar que seja registrado uma ausência em uma tabela sendo que  em outra esta registrado que o treinamento no mesmo período para o mesmo "Nome".

    Uso:

    Dim criterio As String
       criterio = "Nome='" & Nome& "' And DtInicial <=#" _
           & Format(DtFinal, "mm/dd/yyyy") & "# And DtFinal>=#" _
           & Format(DtInicial, "mm/dd/yyyy") & "#"
     
    If Not IsNull(DtInicial) And Not IsNull(DtFinal) Then
           If DCount("Nome", "Ausencia", criterio) > 0 Then
    mrpress
    mrpress
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 3
    Registrado : 06/07/2012

    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período. Empty Re: [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período.

    Mensagem  mrpress 26/11/2013, 20:55

    Se as três tabelas possuírem os mesmos campos "Nome", "DtInicial","DtFinal" faça uma consulta unindo as três e o código permanece o mesmo bastando setar o nome da consulta, ex:

    If DCount("Nome", "nome_da_consulta_que_uniu_as_tres_tabelas", criterio) > 0 Then
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período. Empty Re: [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período.

    Mensagem  Alexandre Neves 26/11/2013, 23:21

    Boa noite, Goia, e bem-vindo ao fórum
    Não deve ter o nome como campo de controlo. Pode haver nomes iguais e estraga-lhe tudo.
    Se pretende verificar se o nome já existe nalguma das 3 tabelas, pode utilizar (não percebo a lógica das datas iniciais e finais):
    If DCount("*","Ausência","Nome='" & Nome& "' And DtInicial <=#" & Format(DtFinal, "mm/dd/yyyy") & "# And DtFinal>=#" & Format(DtInicial, "mm/dd/yyyy") & "#")>0 or DCount("*","Treinamento","Nome='" & Nome& "' And DtInicial <=#" & Format(DtFinal, "mm/dd/yyyy") & "# And DtFinal>=#" & Format(DtInicial, "mm/dd/yyyy") & "#")>0 or DCount("*","Licença","Nome='" & Nome& "' And DtInicial <=#" & Format(DtFinal, "mm/dd/yyyy") & "# And DtFinal>=#" & Format(DtInicial, "mm/dd/yyyy") & "#")>0 then
    chega aqui se tiver registo nalguma das tabelas
    End If


    .................................................................................
    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
    avatar
    Goia
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 28/07/2010

    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período. Empty Re: [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período.

    Mensagem  Goia 27/11/2013, 01:14

    Alexandre,

    Há registros na TblAMD (01/01/2013), TblAusencia(02/01/2013) e TblComprovantes(03/01/2013).
    Na realidade os campos são:

    TblAusencia
    FuncAusencia
    HrInicialAusencia(mm/dd/yyyy hh:mm:ss)
    HrFinalAusencia(mm/dd/yyyy hh:mm:ss)

    TblComprovantes
    FuncAtest
    DtAtest1(mm/dd/yyyy)
    DtAtest2(mm/dd/yyyy)

    TblAMD
    FuncAMD
    DtInicialAMD(mm/dd/yyyy)
    DtFinalAMD(mm/dd/yyyy)

    Adaptei o seu código, porém o Dcount só reconhece os campos da TblAMD e do FrmAMD que estão em uso(aberto). Já os outros campos das outras tabelas não são reconhecidos.

    Então alterei para:

    If DCount("*", "TblAusencia", "FuncAusencia='" & FuncAMD & "' And HrInicialAusencia <=#" & Format(DtFinalAMD, "mm/dd/yyyy") _
           & "# And HrFinalAusencia>=#" & Format(DtInicialAMD, "mm/dd/yyyy") & "#") > 0 _
           Or DCount("*", "TblComprovantes", "FuncAtest='" & FuncAMD & "' And DtAtest1 <=#" & Format(DtFinalAMD, "mm/dd/yyyy") _
           & "# And DtAtest2>=#" & Format(DtFinalAMD, "mm/dd/yyyy") & "#") > 0 _
           Or DCount("*", "TblAMD", "FuncAMD='" & FuncAMD & "' And DtInicialAMD <=#" & Format(DtFinalAMD, "mm/dd/yyyy") _
           & "# And DtFinalAMD>=#" & Format(DtInicialAMD, "mm/dd/yyyy") & "#") > 0 Then

    Mesmo assim só retorna Msg referente a TblAMD.
    Tem jeito de abrir a tabela via código???
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período. Empty Re: [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período.

    Mensagem  Alexandre Neves 27/11/2013, 10:19

    Bom dia,
    Suponho que esteja a trabalhar com o código em VBA.
    Se não estiver a trabalhar em VBA, comece a trabalhar, pois facilita-lhe todo o trabalho


    .................................................................................
    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
    avatar
    Goia
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 28/07/2010

    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período. Empty Re: [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período.

    Mensagem  Goia 30/11/2013, 04:26

    Sim Alexandre, estou usando VBA porém tenho certa dificuldade,
    Fiz algumas buscas e alterei o código. Só que agora esta dando "erro '13' tipos incompatíveis.
    Alterei os campos para texto, numero e nada. Talvez seja o próprio código.

    Os campos FuncAMD, FuncAtest,FuncAusencia são texto.
    Os campos HrInicialAusencia ,HrFinalAusencia,DtAtest1,DtInicialAMD,DtFinalAMD são datas(DataGeral)

    Private Sub VerificaReg()

       If Not IsNull(DtInicialAMD),And Not IsNull(DtFinalAMD) Then
       
       If (DCount("*", "TblAusencia", "FuncAusencia='" & [Forms]![FrmAMD]![FuncAMD] & "" _
       And HrInicialAusencia <= "#" & Format([Forms]![FrmAMD]![DtFinalAMD], "mm/dd/yyyy hh:mm:ss") & "#" _
       And HrFinalAusencia >= "#" & Format([Forms]![FrmAMD]![DtInicialAMD], "mm/dd/yyyy hh:mm:ss") & "#")) > 0 _
       Or (DCount("*", "TblComprovantes", "FuncAtest='" & [Forms]![FrmAMD]![FuncAMD] & "" _
       And DtAtest1 <= "#" & Format([Forms]![FrmAMD]![DtFinalAMD], "mm/dd/yyyy hh:mm:ss") & "#" _
       And DtAtest2 >= "#" & Format([Forms]![FrmAMD]![DtInicialAMD], "mm/dd/yyyy hh:mm:ss") & "#")) > 0 _
       Or (DCount("*", "TblAMD", "FuncAMD='" & [Forms]![FrmAMD]![FuncAMD] & "'" _
       And DtInicialAMD <= "#" & Format([Forms]![FrmAMD]![DtFinalAMD], "mm/dd/yyyy hh:mm:ss") & "#" _
       And DtFinalAMD >= "#" & Format([Forms]![FrmAMD]![DtInicialAMD], "mm/dd/yyyy hh:mm:ss") & "#")) > 0 Then
       
               MsgBox "Já existe cadastro para " & [FuncAMD].Column(1) & " no período solicitado.", vbExclamation, "PERÍODO INVÁLIDO"
               DtInicialAMD = ""
               DtFinalAMD = ""
           Else
           End If
       Else
           IndiceAMD = QtdeAMD.Column(3)
       End If
       
    End Sub

    Obrigado
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período. Empty Re: [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período.

    Mensagem  Alexandre Neves 30/11/2013, 20:04

    Boa noite,
    Vá colocando campo a campo na condição e veja onde não funciona e ajuste


    .................................................................................
    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
    avatar
    Goia
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 28/07/2010

    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período. Empty Re: [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período.

    Mensagem  Goia 9/12/2013, 20:54

    Esta perfeito! OK!!!
    Finalizado.

    Private Sub VerificaReg()
       If Not IsNull(DtInicialAMD) And Not IsNull(DtFinalAMD) Then
           If DCount("*", "TblAMD", "FuncAMD='" & FuncAMD & "' And DtInicialAMD <= #" & Format(DtFinalAMD, "mm/dd/yyyy hh:mm:ss") & "# And DtFinalAMD >= #" & Format(DtInicialAMD, "mm/dd/yyyy hh:mm:ss") & "#") > 0 Then
               MsgBox "Consta MEDIDA DISCIPLINAR para " & [FuncAMD].Column(1) & " no período solicitado.", vbOKOnly + vbExclamation, "PERÍODO INVÁLIDO"
               DtInicialAMD = ""
               DtFinalAMD = ""
               ElseIf DCount("*", "TblAusencia", "FuncAusencia= '" & FuncAMD & "' And HrInicialAusencia <= #" & Format(DtFinalAMD, "mm/dd/yyyy hh:mm:ss") & "# And HrFinalAusencia >= #" & Format(DtInicialAMD, "mm/dd/yyyy hh:mm:ss") & "#") > 0 Then
               MsgBox "Consta uma AUSÊNCIA para " & [FuncAMD].Column(1) & " no período solicitado.", vbOKOnly + vbExclamation, "PERÍODO INVÁLIDO"
               DtInicialAMD = ""
               DtFinalAMD = ""
               ElseIf DCount("*", "TblComprovantes", "FuncAtest='" & FuncAMD & "' And DtAtest1 <= #" & Format(DtFinalAMD, "mm/dd/yyyy hh:mm:ss") & "# And DtAtest2 >= #" & Format(DtInicialAMD, "mm/dd/yyyy hh:mm:ss") & "#") > 0 Then
               MsgBox "Consta um COMPROVANTE para " & [FuncAMD].Column(1) & " no período solicitado.", vbOKOnly + vbExclamation, "PERÍODO INVÁLIDO"
               DtInicialAMD = ""
               DtFinalAMD = ""
           End If
       Else        
       End If
    End Sub
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período. Empty Re: [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período.

    Mensagem  Alexandre Neves 14/12/2013, 17:37

    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período. MaximoAccess%20ResolvidoMarcado


    .................................................................................
    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

    Conteúdo patrocinado


    [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período. Empty Re: [Resolvido]Dcount em 3 tabelas para verificar Registro existe no período.

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 27/4/2024, 12:55