none
Como excluir registros duplicados da tabela no C#? RRS feed

  • Pergunta

  • Olá Pessoal.

    Preciso que me ajudem a criar uma rotina para excluir itens duplicados de uma tabela access, deixando somente um registro de cada registro duplicado, mas usando a linguagem C#.

    Alguém saberia me dar uma dica de como faço isto?

    Obrigado


    • Editado Linghston_ sábado, 24 de janeiro de 2015 17:58
    sábado, 24 de janeiro de 2015 12:36

Respostas

  • Amigão, boa noite !

    Consegui realizar alguns teste com este comando abaixo:

    Basta você abrir o access e executar o modo sql e jogar este scripit abaixo: (Obs.: Não esqueça de fazer o backup)

    Substitua os campos em negrito de acordo com sua necessidade.

    DELETE *FROM tblExemplo WHERE ID <> (SELECT Max(ID) AS MaxOfID FROM tblExemplo AS Dupe WHERE (Dupe.Nome = tblExemplo.Nome));

    Abaixo um link de como executar o access em modo de consulta sql

    https://altieripereira.wordpress.com/2009/09/29/tutorial-access-modo-consulta-sql/

    Este funcionou comigo aqui.

    Se for útil, não esqueça de marcar como resposta.

    Grande abraço!!


    Jimi Anderson

    terça-feira, 27 de janeiro de 2015 01:05

Todas as Respostas

  • Amigão,

    Bom dia!

    Ja que o problema é registos duplicados na base, tente criar uma rotina de verificação antes de inserir. Segue abaixo um exemplo onde verifico através de um select se existe o campo "status"da minha tabela contem "Reservado", se existir ele pula e não deixa salvar, caso contrario ele inseri.

    O exemplo abaixo está em sql e é só converter em access. 

     public DataTable Alterar_Reserva(inserindo_TO p)
            {
                // já inicializada no construtor
                // criar um select no status
                p.Status = "Reservado";
                conn.Open();
                String sqlMovimento = " Select * From reserva Where " +
                                      " reserva.status Like @status and reserva.id Like @id  ";
                SqlCommand cmdMovimento = new SqlCommand(sqlMovimento, conn);
                cmdMovimento.Parameters.AddWithValue("@status", p.Status + "%");
                cmdMovimento.Parameters.AddWithValue("@Id", p.Id + "%");
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmdMovimento;
                DataSet ds = new DataSet();
                da.Fill(ds);

                if (ds.Tables[0].DefaultView.Count == 0) //
                {

                    // conn.Open();
                    SqlTransaction transacao = conn.BeginTransaction();

                    String sqlProduto = " Update Reserva Set " +
                                        "Status = @Status, Nome = @Nome, Rg = @Rg, Tel = @Tel, Cel = @Cel, Nascimento = @Nascimento, Email= @Email Where Id = @Id";
                    SqlCommand cmdProduto = new SqlCommand(sqlProduto, conn, transacao);
                    cmdProduto.Parameters.AddWithValue("@Status", p.Status);
                    cmdProduto.Parameters.AddWithValue("@Nome", p.Nome);
                    cmdProduto.Parameters.AddWithValue("@Rg", p.Rg);
                    cmdProduto.Parameters.AddWithValue("@Tel", p.Tel);
                    cmdProduto.Parameters.AddWithValue("@Cel", p.Cel);
                    cmdProduto.Parameters.AddWithValue("@Nascimento", p.Nascimento);
                    cmdProduto.Parameters.AddWithValue("@Email", p.Email);
                    cmdProduto.Parameters.AddWithValue("@Id", p.Id);
                    cmdProduto.ExecuteNonQuery(); 
                    transacao.Commit();
                    conn.Close();

                }
                else
                {
                    throw new ApplicationException("Sua mensagem aqui");
                }
                return ds.Tables[0];

            }

    Se for util não esqueça de marcar !

    Grande Abraço !


    Jimi Anderson

    domingo, 25 de janeiro de 2015 11:40
  • Olá Jimi,

    Obrigado pela sua resposta, mas não é isto que necessito no momento, vou tentar explicar melhor para ver se você pode me ajudar.

    Eu já recebo um arquivo texto e nele vem registros duplicados, ao importar estas informações para tabela Access, devo excluir os registros duplicados deixando somente um registro de cada itens duplicado levando em conta algum parâmetro a mais quando necessário, como por exemplo: data lançamento, numero cadastro, etc....

    No Visual Fox eu uso o comando SET UNIQ ON mas no C# eu ainda não sei como fazer, você saberia como posso fazer isto?

    Obrigado.

    segunda-feira, 26 de janeiro de 2015 10:17
  • Ola Jimi,

    Achei esta instrução para SQL, sera que temos como adaptar ela para Access no C#?

    "DELETE t FROM tab_pg t WHERE t.Codreg NOT IN (SELECT MIN(Codreg) FROM tab_pg t_dup WHERE t_dup.Codreg = t.Codreg)";

    obrigado.

    segunda-feira, 26 de janeiro de 2015 13:38
  • Amigão, boa noite !

    Consegui realizar alguns teste com este comando abaixo:

    Basta você abrir o access e executar o modo sql e jogar este scripit abaixo: (Obs.: Não esqueça de fazer o backup)

    Substitua os campos em negrito de acordo com sua necessidade.

    DELETE *FROM tblExemplo WHERE ID <> (SELECT Max(ID) AS MaxOfID FROM tblExemplo AS Dupe WHERE (Dupe.Nome = tblExemplo.Nome));

    Abaixo um link de como executar o access em modo de consulta sql

    https://altieripereira.wordpress.com/2009/09/29/tutorial-access-modo-consulta-sql/

    Este funcionou comigo aqui.

    Se for útil, não esqueça de marcar como resposta.

    Grande abraço!!


    Jimi Anderson

    terça-feira, 27 de janeiro de 2015 01:05