DELETE NOS REGISTROS DUPLICADOS DEIXANDO APENAS UM REGISTRO
BOM DIA ,
ESTOU COM UM PROBLEMA ESTOU TENTANDO EXCLUIR OS REGISTROS DUPLICADOS ,
ESTOU USANDO O TQUERY NO DELPHI , POREM TODOS OS SCRIPTS SQL QUE ESTOU USANDO
ELE NAO ACEITA DA ERRO .
ALGUEM SABE UM SCRIPT QUE EU POSSA USAR QUE IRA FUNCIONAR???
ESTOU COM UM PROBLEMA ESTOU TENTANDO EXCLUIR OS REGISTROS DUPLICADOS ,
ESTOU USANDO O TQUERY NO DELPHI , POREM TODOS OS SCRIPTS SQL QUE ESTOU USANDO
ELE NAO ACEITA DA ERRO .
ALGUEM SABE UM SCRIPT QUE EU POSSA USAR QUE IRA FUNCIONAR???
Lucas Domiciano
Curtidas 0
Melhor post
Felipe Souza
18/01/2018
Coloca o nome dos componentes TQuery corretamente abaixo e veja se funciona:
var
vTel : string;
begin
Query1.Sql.Clear;
Query1.Sql.Add(' SELECT * FROM CONTATOS ORDER BY TEL_CLIENTE ');
Query1.Open;
vTel := '';
Query1.First;
while (not Query1.Eof) do
begin
if (vTel = Query1.FieldByName('TEL_CLIENTE').AsString) then
begin
Query2.Sql.Clear;
Query2.Sql.Add(' DELETE FROM CONTATOS WHERE COD_CONTATO = ' + Query1.FieldByname('COD_CONTATO').AsString );
Query2.ExecSql;
end;
vTel := Query1.FieldByName('TEL_CLIENTE').AsString;
Query1.Next;
end;
end;
var
vTel : string;
begin
Query1.Sql.Clear;
Query1.Sql.Add(' SELECT * FROM CONTATOS ORDER BY TEL_CLIENTE ');
Query1.Open;
vTel := '';
Query1.First;
while (not Query1.Eof) do
begin
if (vTel = Query1.FieldByName('TEL_CLIENTE').AsString) then
begin
Query2.Sql.Clear;
Query2.Sql.Add(' DELETE FROM CONTATOS WHERE COD_CONTATO = ' + Query1.FieldByname('COD_CONTATO').AsString );
Query2.ExecSql;
end;
vTel := Query1.FieldByName('TEL_CLIENTE').AsString;
Query1.Next;
end;
end;
GOSTEI 1
Mais Respostas
Felipe Souza
18/01/2018
Bom dia Lucas, esta colocando o script diretamente no componente TQuery ou fazendo um add manualmente ? Poderia postar o scritp que esta usando ? Qual banco de dados esta usando ? Ja vinculou a conexao do banco ao componente TQuery ?
GOSTEI 0
Lucas Domiciano
18/01/2018
ESTOU FAZENDO ADD MANUALMENTE . USANDO O BANCO DATABASE DESKTOP , E FIZ A CONEXAO .
ESTOU FAZENDO UM SELECT PRIMEIRO BUSCANDO TODOS OS REGISTROS DUPLICADOS , PARA DEPOIS FAZER O DELETE .
ESSE É O SCRIPT DO SELECT QUE TO FAZENDO.
SELECT TEL_CLIENTE , COUNT(TEL_CLIENTE) FROM CONTATOS GROUP BY TEL_CLIENTE HAVING COUNT(TEL_CLIENTE)>1;
ESTOU FAZENDO UM SELECT PRIMEIRO BUSCANDO TODOS OS REGISTROS DUPLICADOS , PARA DEPOIS FAZER O DELETE .
ESSE É O SCRIPT DO SELECT QUE TO FAZENDO.
SELECT TEL_CLIENTE , COUNT(TEL_CLIENTE) FROM CONTATOS GROUP BY TEL_CLIENTE HAVING COUNT(TEL_CLIENTE)>1;
GOSTEI 0
Felipe Souza
18/01/2018
Depois de ter o resultado desse Select, esta fazendo uma nova consulta para o delete ?
GOSTEI 0
Felipe Souza
18/01/2018
Esta usando um novo TQuery para fazer o delete desses telefones duplicados ?
GOSTEI 0
Lucas Domiciano
18/01/2018
nao uso o mesmo , estou usando o do select no onShow e depois criando outra sql no mesmo TQuery no evento do botao , mas eu nao estou sabendo fazer o script do delete , para excluir e deixar apenas um registro.
GOSTEI 0
Felipe Souza
18/01/2018
usando o mesmo nao vai rolar, porque inutiliza a consulta anterior que voce fez se ela nao estiver sendo salva em memoria. Consegue me mandar a estrutura dessa tabela em banco pra eu ver as colunas e as chaves dela ? Imagino que o algoritmo deva ser um pouco mais trabalhado pra nao excluir todos os telefones, ao invés de excluir somente os duplicados.
GOSTEI 0
Lucas Domiciano
18/01/2018
os campos do banco são
Table CONTATOS(
COD_CONTATO primary key
NOME_CLIENTE
TEL_CLIENTE
EMAIL
ENDERECO
TEL_CLIENTE
SITUACAO )
Table CONTATOS(
COD_CONTATO primary key
NOME_CLIENTE
TEL_CLIENTE
ENDERECO
TEL_CLIENTE
SITUACAO )
GOSTEI 0
Lucas Domiciano
18/01/2018
mas ele vai deixar um registro , e apagar os duplicados?? ou vai apagar todos os registros , que tenha esse telefone que sera passado ?
GOSTEI 0
Felipe Souza
18/01/2018
Fazendo o teste de mesa aqui, vai deixar sempre a primeira ocorrência de cada telefone na tabela. Mas por via das dúvidas faça o backup da mesma antes de fazer um teste.
GOSTEI 0
Felipe Souza
18/01/2018
Deu certo ?
GOSTEI 0
Lucas Domiciano
18/01/2018
DEU CERTO , OBRIGADO !
GOSTEI 0
Lucas Domiciano
18/01/2018
ESTOU COM UMA OUTRA DUVIDA , ELE TA DELETANDO TELEFONES EM BRANCO EU NAO QUERIA , COMO FARIA PARA ISSO NAO ACONTECER?
GOSTEI 0
Lucas Domiciano
18/01/2018
JA CONSEGUI RS !
GOSTEI 0