>< SNIP >
>>>
>>>Ok, you got me :)
>>
>>:) On the serious note, if we need to delete all dups but one, I think, Ron's solution is the perfect one and it's a standard for this kind of situation.
>
>I have to disagree with you.
>First, the code he provided is incorrect and will leave only duplicates in the table. Second, if implemented properly, it has some limitations:
>- The table cannot have deleted records before this operation
>- It requires to delete all records in the table that could be slow on the big table
>- It requires creating a new index and on the big table it could take a long time
>- It requires to recall almost all records in the table that could be time consuming on the big table also.
Ok, you're right. Scanning big table is also time consuming, though :) Let's find out the optimum algorithm.
How about:
1) Create cursor curDupes as I described
scan
lnKeyID = KeyID
select MainTable
locate for KeyID= lnKeyID
scan while KeyID = lnKeyID
delete
endscan
if !bof()
skip - 1
recall
endif
endscan
If it's not broken, fix it until it is.
My Blog