PROCESSO PARA DELETAR REGISTROS IGUAIS

ANDREW 04/01/2005 00:00:39
#58398
Por favor, quero saber como faço para deletar registros de mesmas chaves primárias com uma busca em DAO. Como no exemplo: Fazendo uma busca com o comando FindLast, eu acho o registro e deleto todos aqueles que tiver a mesma chave primária do registro achado. Achei o registro 5 e se tiver mais de um registro com o código 5 ele vai dar um loop e deletar todos com código 5. Me ajudem...agradeço pela atenção
USUARIO.EXCLUIDOS 04/01/2005 00:33:15
#58405
Hummmm...

Chave primária DUPLICADA??? Ou não se trata de uma chave efetiva, ou não é primária, não faz sentido.

Veja, o método para excluir registros duplicados não é difícil, desde que você tenha um indentificador unívoco por registro, tal como um autonumerador. Aliás, trata-se do mesmo método (Execute), tanto em DAO quanto em ADO, onde com uma única string de instrução SQL com, no máximo, 2 consultas aninhadas, o trabalho é executado.

Mas eliminar registros duplicados em dois processos distintos, como você parece estar tentando, vai acabar por gerar erros em RunTime, tanto com a mensagem de que "...o registro atual foi deletado...", "...BOF ou EOF são verdadeiros..." ou algo no gênero, quanto na possibilidade (enorme) de acabar eliminando registros não-duplicados.

Explico, para que você entenda o cnceito. Veja a tabela como algo físico: Você abre a consulta e varre a tabela registro á registro. Ao mesmo tempo, vai eliminando registros da mesma tabela com outro processo. Invariavelmente o ponteiro do primeiro processo vai tentar se mover para algum registro já eliminado, ou marcado para eliminação. Entendeu o motivo do primeiro erro? Já o segundo, veja, uma vez que você se move para o último registro com a chave indicada, caso não haja um segundo registro (não é um duplicado), o último será o único, e ainda assim será eliminado. Novamente, a lógica foi quebrada.

Para a sua stuação, seria interessante mais detalhes, tais como a estrutura da tabela em questão e a estrutura dos índices.
O engine que você deve estar utilizando é o MS-Access, não deduzo pelo DAO, mas pelo FindLast. Desta forma, a versão do engine E da biblioteca DAO utilizada também são informações interessantes para você expà'r.

E após realizar essa tarefa, dê uma boa examinada nas estruturas de suas tabelas, pois elas estão permitindo entradas que não deveriam acontecer. Isto é indício de que outros problemas, ligados á estrutura, índices e relacionamentos, podem estar ocorrendo ou em vias de se mostrar.

Valew?
Tópico encerrado , respostas não são mais permitidas