SQL - DUVIDA PARA DELETAR REGISTROS
Olá Pessoal, tudo belezinha?
acredito que seja uma dúvida simples...
gostaria de saber como posso deletar todos os registros de uma tabela, mantendo apenas os ULTIMOS 100 registros cadastrados no banco utilizando access.
Delete * from Tabela where ??
acredito que seja uma dúvida simples...
gostaria de saber como posso deletar todos os registros de uma tabela, mantendo apenas os ULTIMOS 100 registros cadastrados no banco utilizando access.
Delete * from Tabela where ??
MAICONJG,
Você tem alguma chave de cadastramento da tabela tipo uma data de cadastramento ou um Autonumber?
Sabe como acessar algum ID interno (contador) da tabela de uso do Access?
Se não tiver:
Você pode tentar descobrir o número de registros da tabela e rodar uma rotina de deleção em alguma liguagem de programação com um looping deste número - 100. Mas sugiro que faça um backup antes de tentar.
[][ô]s,
Tunusat.
Você tem alguma chave de cadastramento da tabela tipo uma data de cadastramento ou um Autonumber?
Sabe como acessar algum ID interno (contador) da tabela de uso do Access?
Se não tiver:
Você pode tentar descobrir o número de registros da tabela e rodar uma rotina de deleção em alguma liguagem de programação com um looping deste número - 100. Mas sugiro que faça um backup antes de tentar.
[][ô]s,
Tunusat.
Citação::
MAICONJG,
Você tem alguma chave de cadastramento da tabela tipo uma data de cadastramento ou um Autonumber?
Sabe como acessar algum ID interno (contador) da tabela de uso do Access?
Se não tiver:
Você pode tentar descobrir o número de registros da tabela e rodar uma rotina de deleção em alguma liguagem de programação com um looping deste número - 100. Mas sugiro que faça um backup antes de tentar.
[][ô]s,
Tunusat.
Olá Tunusat,
tenho um autonumber chamado ID...
No access o contador seria assim: select count(*) from Tabela
seria assim que voce queria saber?
MAICONJG,
Legal!
Se você tem este AutoNumber fica fácil.
Basta pegar o número total de registros na tabela e subtrair de [Ô]100[Ô]. O valor que ficar é o número de vezes que precisa fazer um looping.
Você pega seus registros na tabela usando um Order By este Autonumber. Sacou?
Você pode fazer assim também: Select Top X * Where ... O [Ô]X[Ô] é o número total de registros menos 100. Não esqueça de colocar o Order by. Dai os números mais altos (últimas entradas de registro) ficarão fora do Select.
Consegue montar a query de disparo?
[][ô]s,
Tunusat.
Legal!
Se você tem este AutoNumber fica fácil.
Basta pegar o número total de registros na tabela e subtrair de [Ô]100[Ô]. O valor que ficar é o número de vezes que precisa fazer um looping.
Você pega seus registros na tabela usando um Order By este Autonumber. Sacou?
Você pode fazer assim também: Select Top X * Where ... O [Ô]X[Ô] é o número total de registros menos 100. Não esqueça de colocar o Order by. Dai os números mais altos (últimas entradas de registro) ficarão fora do Select.
Consegue montar a query de disparo?
[][ô]s,
Tunusat.
mas nesse caso teria que fazer um select primeiro, para saber o total de registro da tabela..
e depois um delete certo?
achei que haveria alguma maneira rapida em um sql apenas de excluir esses registros.
e depois um delete certo?
achei que haveria alguma maneira rapida em um sql apenas de excluir esses registros.
MAICONJG
Não existe tecnologia em programação para tal.
Para isto tinha que ter troca de informação entre
o SER que se diz humano e máquina.
Não existe tecnologia em programação para tal.
Para isto tinha que ter troca de informação entre
o SER que se diz humano e máquina.
MAICONJG,
Calma! Não é tão difÃcil assim!
Veja este exemplo:
Criei uma tabela tblTeste dentro de um banco de dados Access.
Cadastrei 15 registros com dois campos:
- [Ô]Codigo[Ô] que é um campo Autonumber e Chave Primária;
- [Ô]Nome[Ô] que é um campo Texto;
======================
DELETE FROM tblTeste
WHERE Codigo IN
(SELECT TOP 5 Codigo
FROM tblTeste
ORDER BY Codigo ASC);
======================
O DELETE olha todos os códigos dentro da tabela que foram [Ô]separados[Ô] pelo SELECT em TOP [Ô]5[Ô] e devolve os código que devem ser deletados.
Próximo passo:
======================
SELECT Count(*)-5 AS Expr1 FROM tblTeste;
======================
A query acima devolve em [Ô]Expr1[Ô] a quantidade de registros da tabela - 5 (menos 5).
Agora não sei como juntar as duas querys... Mas deve ter um jeito! Se não tiver como você pode fazer a operação em dois passos:
1º) Colete a quantidade de registros usando a segunda query;
2º) Alimente a quantidade de registro manualmente na primeira query;
Se quiser testar no seu banco de dados TIRE UMA CÓPIA! Ou monte o exemplo que eu montei.
[][ô]s,
Tunusat.
[][ô]s,
Tunusat.
Calma! Não é tão difÃcil assim!
Veja este exemplo:
Criei uma tabela tblTeste dentro de um banco de dados Access.
Cadastrei 15 registros com dois campos:
- [Ô]Codigo[Ô] que é um campo Autonumber e Chave Primária;
- [Ô]Nome[Ô] que é um campo Texto;
======================
DELETE FROM tblTeste
WHERE Codigo IN
(SELECT TOP 5 Codigo
FROM tblTeste
ORDER BY Codigo ASC);
======================
O DELETE olha todos os códigos dentro da tabela que foram [Ô]separados[Ô] pelo SELECT em TOP [Ô]5[Ô] e devolve os código que devem ser deletados.
Próximo passo:
======================
SELECT Count(*)-5 AS Expr1 FROM tblTeste;
======================
A query acima devolve em [Ô]Expr1[Ô] a quantidade de registros da tabela - 5 (menos 5).
Agora não sei como juntar as duas querys... Mas deve ter um jeito! Se não tiver como você pode fazer a operação em dois passos:
1º) Colete a quantidade de registros usando a segunda query;
2º) Alimente a quantidade de registro manualmente na primeira query;
Se quiser testar no seu banco de dados TIRE UMA CÓPIA! Ou monte o exemplo que eu montei.
[][ô]s,
Tunusat.
[][ô]s,
Tunusat.
essa que seria a dúvida..
quero usar essa query para deletar os registro de uma tabela de HISTORICO de eventos do sistema.
quero manter no máximo os ultimos 100 eventos por exemplo.
mas preciso deletar todos mantendo os ultimos 100.
quero usar essa query para deletar os registro de uma tabela de HISTORICO de eventos do sistema.
quero manter no máximo os ultimos 100 eventos por exemplo.
mas preciso deletar todos mantendo os ultimos 100.
consegui fazer assim..
Set TBHistoricos = BancoDeDados.OpenRecordset([Ô]Select top 5000 H.* from Historicos H order by codigo_historico DESC[Ô])
TBHistoricos.MoveLast
If (Not TBHistoricos.EOF) Then
DB.Execute ([Ô]Delete from Historicos where codigo_historico < [Ô] & TBHistoricos!codigo_historico)
End If
porém, achei que haveria uma maneira mais simples e fácil.. em uma linha de fazer isso.
Set TBHistoricos = BancoDeDados.OpenRecordset([Ô]Select top 5000 H.* from Historicos H order by codigo_historico DESC[Ô])
TBHistoricos.MoveLast
If (Not TBHistoricos.EOF) Then
DB.Execute ([Ô]Delete from Historicos where codigo_historico < [Ô] & TBHistoricos!codigo_historico)
End If
porém, achei que haveria uma maneira mais simples e fácil.. em uma linha de fazer isso.
acredito que achei uma forma, usando uma subconsulta...
DELETE *
FROM Historicos
WHERE codigo_historico < (SELECT max(codigo_historico) - 100 FROM Historicos) as limite
DELETE *
FROM Historicos
WHERE codigo_historico < (SELECT max(codigo_historico) - 100 FROM Historicos) as limite
Imaginei o seguinte:
Capture o último ID criado, por exemplo: 5000.
Delete * From TabelaHistorico WHERE ID < 4900
Capture o último ID criado, por exemplo: 5000.
Delete * From TabelaHistorico WHERE ID < 4900
Tópico encerrado , respostas não são mais permitidas