APAGAR REGISTROS EM BD ACCESS
Tenho duas tabelas:
TAB1 com 100 registros
TAB2 com 80.000 registros
Em TAB1 eu tenho os codigos dos clientes, por exemplo:
001
002
003
004...
Em TAB2, além de outros campos, também tenho os codigos dos clientes
001
002
003...
O que preciso é apagar de forma Rà ÂPIDA todos os registros de TAB2 que não constar em TAB1.
Eu faço isso dessa forma, mas está levando cerca de 7min e essa rotina eu preciso realizá-la várias vezes.
DT_control_TAB2.Recordset.MoveFirst
TB_TAB1.Index = "CLI_COD"
BD_DADOS.Execute "delete from TAB2 where cli_cod not in (select cli_cod from TAB1)"
O que está acima funciona perfeitamente, não há erros, o único problema é a demora.
Se alguém puder me dar uma luz.
Obrigado!
TAB1 com 100 registros
TAB2 com 80.000 registros
Em TAB1 eu tenho os codigos dos clientes, por exemplo:
001
002
003
004...
Em TAB2, além de outros campos, também tenho os codigos dos clientes
001
002
003...
O que preciso é apagar de forma Rà ÂPIDA todos os registros de TAB2 que não constar em TAB1.
Eu faço isso dessa forma, mas está levando cerca de 7min e essa rotina eu preciso realizá-la várias vezes.
DT_control_TAB2.Recordset.MoveFirst
TB_TAB1.Index = "CLI_COD"
BD_DADOS.Execute "delete from TAB2 where cli_cod not in (select cli_cod from TAB1)"
O que está acima funciona perfeitamente, não há erros, o único problema é a demora.
Se alguém puder me dar uma luz.
Obrigado!
um o problema é q vc estausando um objeto data control para fazer a conexao, apesar que a consulta sql q vc esta usando ao meu ver esta de bom tamanho.
aqui vc faz ref ao um controle data
mas aqui me parece que vc esta usando uma conexao direta com o banco de dados
Ao meu ver me parece q esta tudo certo pois vc esta usando o metodo mais rapido para fazer uma exclusao, que seria conexao.execute e ainda usando uma sql delete, eu acho q a velocidade mais demorada pode ser fruto da clausula de validação q vc usa
DT_control_TAB2.Recordset.MoveFirst
aqui vc faz ref ao um controle data
BD_DADOS.Execute "delete from TAB2 where cli_cod not in (select cli_cod from TAB1)"
mas aqui me parece que vc esta usando uma conexao direta com o banco de dados
Ao meu ver me parece q esta tudo certo pois vc esta usando o metodo mais rapido para fazer uma exclusao, que seria conexao.execute e ainda usando uma sql delete, eu acho q a velocidade mais demorada pode ser fruto da clausula de validação q vc usa
where cli_cod not in (select cli_cod from TAB1)"
e ainda por cima faz uma sselect de uma select oq tb perde desempenho, a não ser q vc esteja usando um banco de dados q permita ums store procedure (como sql e firebird) acho q nao tem muito oq vc fazer nao ...
Tópico encerrado , respostas não são mais permitidas