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]Where Not Exists

    caiosouza
    caiosouza
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 419
    Registrado : 05/12/2016

    [Resolvido]Where Not Exists Empty [Resolvido]Where Not Exists

    Mensagem  caiosouza 8/2/2018, 12:48

    Bom dia a todos,

    Uso um botão para inserir Treinamentos em uma tabela a partir de uma Listbox.
    Gostaria que antes de inserir as linhas na tabela o código verificasse os seguintes itens:

    1 - Verificar se os treinamentos já não foram lançados, filtrando pelo N_COLABORADOR e N_TREINAMENTO
    2 - Se já foram lançados, verificar se o treinamento esta em dia (DATA_TREINAMENTO)=Nulo, se não estiver, lançar mesmo assim mesmo que já exista.

    Segue código:

    Código:

    Private Sub SALVAR_Click()
    On Error Resume Next
        Dim N As Long
       
        For N = 0 To Me.LISTA_TREINAMENTOS.ListCount - 1
            CurrentDb.Execute "INSERT INTO TAB_HISTORICO(N_COLABORADOR, COLABORADOR, N_TREINAMENTO, TREINAMENTO, SETOR, CELULA, N_CELULA, N_REVISAO) VALUES " & _
    "('" & Me.TXT_REGISTRO & "', '" & Me.COLABORADOR & "', '" & Me.LISTA_TREINAMENTOS.Column(3, N) & "', '" & Me.LISTA_TREINAMENTOS.Column(0, N) & "', '" & Me.SETOR & "'," & _
    "'" & Me.CELULA.Column(0) & "', '" & Me.CELULA.Column(1) & "', '" & Me.LISTA_TREINAMENTOS.Column(1, N) & "') " & _

    "WHERE NOT EXISTS (SELECT * FROM TAB_HISTORICO WHERE TAB_HISTORICO.N_TREINAMENTO = Me.LISTA_TREINAMENTOS.Column(3))" 'O filtro é feito aqui...

        Next
    DoCmd.GoToRecord , , acNewRec
    End Sub


    .................................................................................
    Caio Souza

    Engenheiro de Software
    avatar
    frankhosaka
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 22
    Registrado : 22/12/2017

    [Resolvido]Where Not Exists Empty Re: [Resolvido]Where Not Exists

    Mensagem  frankhosaka 10/2/2018, 12:09

    Não sabia que existia a cláusula NOT EXISTS no SQL, e também nunca criei registros através do SQL.

    O maior problema é que não tenho nenhuma experiência na área de treinamento, mas posso improvisar aqui:

    Vamos supor que a lista de treinamento seja assim: respirar, tossir, sentar.

    No formulário principal, eu vejo que o cliente Reclama Muito da Silva não fez nenhum treinamento, mesmo assim eu vou apertar o botão Registrar Treinamento, e aí o Access vai no Histórico do Treinamento e cria os seguintes registros:

    10/02/18 Reclama Muito da Silva - Respirar.
    10/02/18 Reclama Muito da Silva - Tossir.
    10/02/18 Reclama Muito da Silva - Sentar.

    Ou seja, tudo o que você quer é uma lista de todos os treinamentos para qualquer cliente?
    caiosouza
    caiosouza
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 419
    Registrado : 05/12/2016

    [Resolvido]Where Not Exists Empty Re: [Resolvido]Where Not Exists

    Mensagem  caiosouza 24/3/2018, 15:23

    @frankhosaka, boa tarde!

    Não, na verdade só preciso que o cód. em SQL insira os dados da tabela x na tabela y, porém antes disso deve ser feita uma verificação na tabela y pra ver se já não existe treinamentos já lançados e dentro do prazo.

    Ex.:
    Treinei o Pedro, no dia 24/03/18 e o treinamento do Pedro tem validade de 12 meses (vence em 24/03/19*), quando eu for realizar algum agendamento em massa preciso que o SQL verifique os treinamento do Pedro e se o treinamento dele ainda não tiver vencido, simplesmente não insere os dados na tabela y.


    .................................................................................
    Caio Souza

    Engenheiro de Software
    avatar
    frankhosaka
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 22
    Registrado : 22/12/2017

    [Resolvido]Where Not Exists Empty Re: [Resolvido]Where Not Exists

    Mensagem  frankhosaka 24/3/2018, 15:50

    Eu não sou muito bom com o SQL, antes usaria as ferramentas básicas.
    Criaria uma consulta na tabela y, onde um campo iria retornar "vencido" se o último treinamento do aluno for superior a 12 meses ou se não há nenhum treinamento.
    Baseado no resultado da consulta da tabela y, iria acrescentar a tabela x no y, mas usando a ferramenta consulta criar tabela. Se a tabela sair errada, é só deletar, deixando a tabela y intacta.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Where Not Exists Empty Re: [Resolvido]Where Not Exists

    Mensagem  Alexandre Neves 25/3/2018, 20:55

    Boa noite,
    Veja se é isto
    Código:
    Private Sub SALVAR_Click()
    On Error Resume Next
        Dim N As Long
       
        For N = 0 To Me.LISTA_TREINAMENTOS.ListCount - 1
            CurrentDb.Execute "INSERT INTO TAB_HISTORICO(N_COLABORADOR, COLABORADOR, N_TREINAMENTO, TREINAMENTO, SETOR, CELULA, N_CELULA, N_REVISAO) VALUES " & _
    "('" & Me.TXT_REGISTRO & "', '" & Me.COLABORADOR & "', '" & Me.LISTA_TREINAMENTOS.Column(3, N) & "', '" & Me.LISTA_TREINAMENTOS.Column(0, N) & "', '" & Me.SETOR & "'," & _
    "'" & Me.CELULA.Column(0) & "', '" & Me.CELULA.Column(1) & "', '" & Me.LISTA_TREINAMENTOS.Column(1, N) & "') " & _

    "WHERE NOT EXISTS (SELECT * FROM TAB_HISTORICO WHERE TAB_HISTORICO.N_TREINAMENTO =" & Me.LISTA_TREINAMENTOS.Column(3) & " and  N_COLABORADOR=" & Me.COLABORADOR & ")" 'O filtro é feito aqui...

        Next
    DoCmd.GoToRecord , , acNewRec
    End Sub


    .................................................................................
    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
    caiosouza
    caiosouza
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 419
    Registrado : 05/12/2016

    [Resolvido]Where Not Exists Empty Re: [Resolvido]Where Not Exists

    Mensagem  caiosouza 26/3/2018, 13:28

    Caro Alexandre, bom dia!

    A partir da sua lógica de raciocínio, alterei o código conforme abaixo:

    Código:
           CurrentDb.Execute "INSERT INTO TAB_HISTORICO(N_COLABORADOR, COLABORADOR, N_TREINAMENTO, TREINAMENTO, SETOR, CELULA, N_CELULA, N_REVISAO) VALUES " & _
    "(" & Me.TXT_REGISTRO & ", '" & Me.COLABORADOR & "', " & Me.LISTA_TREINAMENTOS.Column(3, N) & ", '" & Me.LISTA_TREINAMENTOS.Column(0, N) & "', '" & Me.SETOR & "'," & _
    "'" & Me.CELULA.Column(0) & "', " & Me.CELULA.Column(1) & ", " & Me.LISTA_TREINAMENTOS.Column(1, N) & ") " & _
    "WHERE NOT EXISTS (SELECT * FROM TAB_HISTORICO WHERE [N_TREINAMENTO]=" & Me.LISTA_TREINAMENTOS.Column(3, N) & " AND [N_COLABORADOR]=" & Me.TXT_REGISTRO & ")" 'O filtro é feito aqui...

    Porém agora me traz o erro: Ponto e vírgula (";") faltando no final da instrução SQL. (Erro 3137), já coloquei o ";" no final, porém o erro persiste.

    A ideia é o código verificar na TAB_HISTORICO e oque não tiver inserir na TAB_HISTORICO.


    .................................................................................
    Caio Souza

    Engenheiro de Software
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Where Not Exists Empty Re: [Resolvido]Where Not Exists

    Mensagem  Alexandre Neves 27/3/2018, 15:16

    Boa tarde,
    Veja agora
    CurrentDb.Execute "INSERT INTO TAB_HISTORICO(N_COLABORADOR, COLABORADOR, N_TREINAMENTO, TREINAMENTO, SETOR, CELULA, N_CELULA, N_REVISAO) VALUES (" & Me.TXT_REGISTRO & ", '" & Me.COLABORADOR & "', " & Me.LISTA_TREINAMENTOS.Column(3, N) & ", '" & Me.LISTA_TREINAMENTOS.Column(0, N) & "', '" & Me.SETOR & "'," & _
    "'" & Me.CELULA.Column(0) & "', " & Me.CELULA.Column(1) & ", " & Me.LISTA_TREINAMENTOS.Column(1, N) & ") " & _
    "WHERE N_TREINAMENTO & '-' & N_COLABORADOR NOT IN ('" & Me.LISTA_TREINAMENTOS.Column(3, N) & "-" & Me.TXT_REGISTRO & "')"


    .................................................................................
    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
    caiosouza
    caiosouza
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 419
    Registrado : 05/12/2016

    [Resolvido]Where Not Exists Empty Re: [Resolvido]Where Not Exists

    Mensagem  caiosouza 3/4/2018, 15:33

    Alexandre Neves, bom dia!

    Tópico solucionado da seguinte forma:

    Código:

    If DCount("N_COLABORADOR", "TAB_HISTORICO", "[N_COLABORADOR]=" & IntReg & " AND [TREINAMENTO]='" & StrTreinamento & "'") < 1 Then
        CurrentDb.Execute "INSERT INTO TAB_HISTORICO(N_COLABORADOR, COLABORADOR, TREINAMENTO, SETOR, CELULA, N_REVISAO, CARGA_HORARIA, TIPO) VALUES " & _
        "(" & IntReg & ", '" & StrColaborador & "', '" & StrTreinamento & "', '" & StrSetor & "', '" & StrCelula & "'," & NumRev & ",'" & HorCarga & "', '" & StrTipo & "')"
    End If

    Obrigado!


    .................................................................................
    Caio Souza

    Engenheiro de Software

    Conteúdo patrocinado


    [Resolvido]Where Not Exists Empty Re: [Resolvido]Where Not Exists

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 22/11/2024, 15:13