Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite,
Tenho o seguinte código que grava um arquivo e para posterior consulta grava os dados no bd. Até aí beleza. Só que como está dentro de um FOR/NEXT está duplicando os registros.
Agora pra não duplicar estou tentando apagar o que estiver repetindo, mas não to achando uma solução pra isso...
Segue a parte do código que apagaria os duplicados e que não tá funcionando...
SQLD1 = "select distinct iddig FROM fechados where protocolo = '"&protocolo&"' and gerado = '"&gerado&"' and ativo = '"&ativo&"'"
set rsd1 = Conn.Execute(SQLD1)
WHILE NOT rsd1.EOF
nEmail = rsd1("iddig")
SQLDEL1 = ("Select COUNT(iddig) AS TOTAL FROM fechados where iddig = '" & nEmail & "'" )
SET RSDEL1 = Conn.Execute(SQLDEL1)
if not RSDEL1.eof then
total = RSDEL1("TOTAL")
if total > "1" then
SQLDEL = ("delete from fechados where iddig = '"&nEmail&"'")
Conn.Execute(SQLDEL)
End if
rsd1.MOVENEXT
End if
WEND
Ele apaga todos os registros, depois tentei assim e aí não apaga os duplicados:
SQLD1 = "select distinct iddig FROM fechados where protocolo = '"&protocolo&"' and gerado = '"&gerado&"' and ativo = '"&ativo&"'"
set rsd1 = Conn.Execute(SQLD1)
WHILE NOT rsd1.EOF
nEmail = rsd1("iddig")
SQLDEL1 = ("Select COUNT(iddig) AS TOTAL FROM fechados where iddig = '" & nEmail & "'" )
SET RSDEL1 = Conn.Execute(SQLDEL1)
if not RSDEL1.eof then
total = RSDEL1("TOTAL")
if total > "1" then
SQLDEL = ("delete from fechados WHERE iddig NOT IN (SELECT max(iddig) FROM digisalva WHERE iddig = '" & nEmail & "')" )
Conn.Execute(SQLDEL)
End if
rsd1.MOVENEXT
End if
WEND
Se alguém puder dar uma forcinha... já fucei o forum mas não achei nada que desse certo.
Bjs
>
ja tentou assim:
Select para localizar duplicados
select campo,campo1,count(*)
from tabela having count(*) > 1
group by campo,campo1
deletar duplicados
delete from tab p1
where rowid < (select max(rowid)
from tab1 p2
where p1.primary_key = p2.primary_key)
Mas me explica uma coisa...
No Select estou usando apenas um campo para diferenciar, no caso você descreve campo, campo1 como 2 diferentes certo?
No Delete também um outro problema, estou usando apenas uma tabela e você cescreve tab p1 e tab1 p2, mas não dá pra eu fazer a comparação dessa forma se uso apenas uma tabela, né...
Vlw mesmo assim
Select para localizar duplicados
select iddig
from fechados having count(*) > 1
deletar duplicados
delete from fechados where rowid < (select max(rowid)
from fechados where iddig = '" & nEmail & "'>
Select para localizar duplicados
select iddig
from fechados having count(*) > 1
deletar duplicados
delete from fechados where rowid < (select max(rowid)
from fechados where iddig = '" & nEmail & "'
nãos sei se é a versão de MySql que estou usando, mas diz que não posso usar a tabela fechados no select que esta dentro do delete...
estou usando a seguinte função para apagar registros duplicados e parece que deu certo até agora :.)
SQLD1 = "select distinct iddig FROM fechados where protocolo = '"&protocolo&"' and gerado = '"&gerado&"' and ativo = '"&ativo&"'"
set rsd1 = Conn.Execute(SQLD1)
if NOT rsd1.EOF then
nEmail = rsd1("iddig")
SQLDEL1 = ("Select COUNT(iddig) AS TOTAL FROM fechados where iddig = '" & nEmail & "' " )
SET RSDEL1 = Conn.Execute(SQLDEL1)
if not RSDEL1.eof then
total = RSDEL1("TOTAL")
if total > "1" then
SQLDEL = ("delete from fechados WHERE ativo = '"&ativo&"' and iddig not in (Select id from digisalva where reincidente = '"&pasta&"') " )
Set RSDEL = Conn.Execute(SQLDEL)
rsd1.movenext
End if
End if
End if
Agradeço pela ajuda
ja tentou assim:
deletar duplicados