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


2 participantes

    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    avatar
    mrjoneskod
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 17/09/2013

    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino? Empty [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    Mensagem  mrjoneskod 6/1/2016, 10:46

    Prezados amigos,
    Estou apanhando aqui. Eu fiz uma consulta que devo rodar todo primeiro dia útil do mês para gerar débitos a serem cobrados dos clientes.

    Para isso eu busco dados na tabela clientes e na tabela contratos e faço um insert na tabela pgto_clientes

    A questão é, eu não quero duplicação de dados... Por exemplo, se por engano alguém já tiver rodado a consulta, se alguém já tiver inserido algum débito manualmente por alguma negociação, etc.. eu queria que o insert só incluísse dados diferentes daqueles já presentes... obvio o campo de id_debito não deve ser levado em conta pois é incremental, mas se o restante da linha for idêntico... deveria ser ignorada a inserção.

    segue meu código
    Código:


    INSERT INTO pgtoMensalistas ( cod_cliente, valor_pagto, mes_referencia, ano_referencia )
    SELECT clientes.cod_cliente, contratos.valor_mensal AS valor_pagto, Month(Date()) AS mes_referencia, Year(Date()) AS ano_referencia
    FROM (contratos INNER JOIN clientes ON contratos.cod_contrato = clientes.cod_contrato) INNER JOIN pgtoMensalistas ON clientes.cod_cliente = pgtoMensalistas.cod_cliente
    WHERE (((clientes.cod_cliente)>1) AND ((clientes.ativo)=True));


    Tentei inserir uma condição de mais ou menos assim, mas dá erro, pois volta mais de um resultado por linha:
    Código:

     AND clientes.cod_cliente + valor_pagto + mes_referencia + ano_referencia <> (SELECT cod_cliente + valor_pagto + mes_referencia + ano_referencia from pgtoMensalistas)

    Também tentei usar o distinctrow, mas sem sucesso.

    Aguardo a LUZ! hehehe abraços!
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino? Empty Re: [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    Mensagem  Cláudio Más 6/1/2016, 10:59

    Olá,

    Tente isso:

    Código:
    INSERT INTO pgtoMensalistas ( cod_cliente, valor_pagto, mes_referencia, ano_referencia )
    SELECT a.cod_cliente, a.valor_pagto, a.mes_referencia, a.ano_referencia
    FROM

    (SELECT clientes.cod_cliente, contratos.valor_mensal AS valor_pagto, Month(Date()) AS mes_referencia, Year(Date()) AS ano_referencia
    FROM (contratos INNER JOIN clientes ON contratos.cod_contrato = clientes.cod_contrato) INNER JOIN pgtoMensalistas ON clientes.cod_cliente = pgtoMensalistas.cod_cliente
    WHERE (((clientes.cod_cliente)>1) AND ((clientes.ativo)=True))) a

    LEFT JOIN pgtoMensalistas ON (a.ano_referencia = pgtoMensalistas.ano_referencia) AND (a.mes_referencia = pgtoMensalistas.mes_referencia) AND (a.valor_pagto = pgtoMensalistas.valor_pagto) AND (a.[cod_cliente] = pgtoMensalistas.[cod_cliente])
    WHERE (((pgtoMensalistas.cod_cliente) Is Null) AND ((pgtoMensalistas.valor_pagto) Is Null) AND ((pgtoMensalistas.mes_referencia) Is Null) AND ((pgtoMensalistas.ano_referencia) Is Null))
    avatar
    mrjoneskod
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 17/09/2013

    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino? Empty Re: [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    Mensagem  mrjoneskod 6/1/2016, 11:42

    Olá Cláudio, tentei com seu código, porém o resultado é sempre 0 (zero) registros a inserir... estou tentando aqui imaginar as razões, mas acho que estou um pouco enferrujado com SQL...
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino? Empty Re: [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    Mensagem  Cláudio Más 6/1/2016, 13:21

    Pode enviar um banco de dados com somente as tabelas envolvidas?
    avatar
    mrjoneskod
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 17/09/2013

    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino? Empty Re: [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    Mensagem  mrjoneskod 6/1/2016, 16:10

    Claro, segue o link.

    http://ge.tt/7Au61KV2/v/0

    Assim que baixar me avise que vou tirar do ar
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino? Empty Re: [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    Mensagem  Cláudio Más 6/1/2016, 17:26

    Obrigado, pode remover o arquivo.
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino? Empty Re: [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    Mensagem  Cláudio Más 6/1/2016, 17:38

    Tente uma nova instrução:

    Código:
    INSERT INTO pgtoMensalistas ( cod_cliente, valor_pagto, mes_referencia, ano_referencia )
    SELECT a.cod_cliente, a.valor_pagto, a.mes_referencia, a.ano_referencia
    FROM

    (SELECT clientes.cod_cliente, contratos.valor_mensal AS valor_pagto, Month(Date()) AS mes_referencia, Year(Date()) AS ano_referencia
    FROM (contratos INNER JOIN clientes ON contratos.cod_contrato = clientes.cod_contrato) LEFT JOIN pgtoMensalistas ON clientes.cod_cliente = pgtoMensalistas.cod_cliente
    WHERE (((clientes.cod_cliente)>1) AND ((clientes.ativo)=True))) AS a

    LEFT JOIN pgtoMensalistas ON (a.[cod_cliente] = pgtoMensalistas.[cod_cliente]) AND (a.valor_pagto = pgtoMensalistas.valor_pagto) AND (a.mes_referencia = pgtoMensalistas.mes_referencia) AND (a.ano_referencia = pgtoMensalistas.ano_referencia)

    WHERE (((pgtoMensalistas.cod_cliente) Is Null) AND ((pgtoMensalistas.valor_pagto) Is Null) AND ((pgtoMensalistas.mes_referencia) Is Null) AND ((pgtoMensalistas.ano_referencia) Is Null))

    Sendo que irá considerar um registro já existente quando os quatro campos coincidirem (cod_cliente, valor_pagto, mes_referencia e ano_referencia).
    avatar
    mrjoneskod
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 17/09/2013

    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino? Empty Re: [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    Mensagem  mrjoneskod 6/1/2016, 17:44

    Perfeito... Só mais duas dúvida.. Eu quero executar automaticamente essa consulta todo primeiro dia útil do mês... até ai tranquilo... Eu queria saber como executar de maneira invisível.. sem abrir a consulta e o usuário ver o processo. Além disso, vou colocar uma opção manual, um botão em algum form, tem como personalizar a mensagem de resultado?

    Desculpa abusar, rs. Estou pesquisando, mas não encontrei nada sobre esses 2 assuntos... apenas com relatórios vi como executar de maneira oculta.
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino? Empty Re: [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    Mensagem  Cláudio Más 6/1/2016, 18:00

    Para executar a consulta:

    Código:
    CurrentDb.Execute "INSERT INTO pgtoMensalistas ( cod_cliente, valor_pagto, mes_referencia, ano_referencia ) SELECT a.cod_cliente, a.valor_pagto, a.mes_referencia, a.ano_referencia FROM (SELECT clientes.cod_cliente, contratos.valor_mensal AS valor_pagto, Month(Date()) AS mes_referencia, Year(Date()) AS ano_referencia FROM (contratos INNER JOIN clientes ON contratos.cod_contrato = clientes.cod_contrato) LEFT JOIN pgtoMensalistas ON clientes.cod_cliente = pgtoMensalistas.cod_cliente WHERE (((clientes.cod_cliente)>1) AND ((clientes.ativo)=True)))  AS a LEFT JOIN pgtoMensalistas ON (a.ano_referencia = pgtoMensalistas.ano_referencia) AND (a.mes_referencia = pgtoMensalistas.mes_referencia) AND (a.valor_pagto = pgtoMensalistas.valor_pagto) AND (a.[cod_cliente] = pgtoMensalistas.[cod_cliente]) WHERE (((pgtoMensalistas.cod_cliente) Is Null) AND ((pgtoMensalistas.valor_pagto) Is Null) AND ((pgtoMensalistas.mes_referencia) Is Null) AND ((pgtoMensalistas.ano_referencia) Is Null))"


    Para informar quantidade de registros inseridos, crie a seguinte consulta com o nome de "Conta_Insert", por exemplo:

    Código:
    SELECT a.cod_cliente, a.valor_pagto, a.mes_referencia, a.ano_referencia
    FROM (SELECT clientes.cod_cliente, contratos.valor_mensal AS valor_pagto, Month(Date()) AS mes_referencia, Year(Date()) AS ano_referencia
    FROM (contratos INNER JOIN clientes ON contratos.cod_contrato = clientes.cod_contrato) LEFT JOIN pgtoMensalistas ON clientes.cod_cliente = pgtoMensalistas.cod_cliente
    WHERE (((clientes.cod_cliente)>1) AND ((clientes.ativo)=True)))  AS a LEFT JOIN pgtoMensalistas ON (a.ano_referencia = pgtoMensalistas.ano_referencia) AND (a.mes_referencia = pgtoMensalistas.mes_referencia) AND (a.valor_pagto = pgtoMensalistas.valor_pagto) AND (a.[cod_cliente] = pgtoMensalistas.[cod_cliente])
    WHERE (((pgtoMensalistas.cod_cliente) Is Null) AND ((pgtoMensalistas.valor_pagto) Is Null) AND ((pgtoMensalistas.mes_referencia) Is Null) AND ((pgtoMensalistas.ano_referencia) Is Null))

    E use o comando abaixo:

    Código:
    MsgBox "Foram inseridos " & DCount("*", "Conta_Insert") & " novos registros"
    avatar
    mrjoneskod
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 17/09/2013

    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino? Empty Re: [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    Mensagem  mrjoneskod 6/1/2016, 18:11

    Sem palavras para agradecer!

    Muito obrigado!
    Precisando estou as ordens!

    Conteúdo patrocinado


    [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino? Empty Re: [Resolvido]Como fazer um INSERT que ignora dados já presentes na tabela destino?

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/11/2024, 19:41