Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fla-maiden

Como deletar registros antigos de um BD?

Recommended Posts

Olá a todos.Meu problema é bem simples. Eu criei um banco de dados para armazenar mensagens no meu site, e eu gostaria de deixar no banco APENAS as 25 mensagens mais recentes.Para isto eu criei os campos nome, mensagem e data. Além de outros que funcionam como campos para meu controle interno.O banco está funcionando bem, mas eu gostaria de limpar minha base de dados, já que eu não preciso das mensagens mais antigas.Eu fiz isto com um outro banco que criei (de notícias), mas no caso dele era fácil pois eu deletava as notícias que tivessem data maior do que "X" por exemplo.No atual eu fiz da seguinte forma, mas ocorre um erro quando a página é chamada:

<% 'mapeando o arquivo do banco:strPath = Server.MapPath("bdmportal03.mdb") 'query: strSQL = "SELECT * FROM tabmens Order by Data Desc;" 'abrindo conexão c/ o Access indicando o nome do meu arq.:Set objConexaoBD = Server.CreateObject("ADODB.Connection")objConexaoBD.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)};" & "DBQ=" & strPathobjConexaoBD.Open 'abrindo a tabela atravéz da query:Set objTabBD = Server.CreateObject("ADODB.Recordset")objTabBD.Open strSQL, objConexaoBD i = 0 'testando se o registro é antigo (maior que 25):Do While Not objTabBD.EOF i = i + 1 If (i > 25) Then objTabBD.Delete End If objTabBD.MoveNextLoop 'fechando tudo:objTabBD.CloseSet objTabBD = NothingobjConexaoBD.CloseSet objConexaoBD = Nothing%>

O que reparei é que apenas substitui o comando "objTabBD.Open strSQL, objConexaoBD" por este: "objTabBD.Open "tabmens", objConexaoBD, , adLockOptimistic, adCmdTable" e funcionou.O problema é que assim eu não tenho garantia de que vão ficar apenas as mais recentes.O que devo fazer?Agradeço quem puder me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem algum campo que seja tipo um id ou código?

Faz assim:

ASP

[*]sql_procura = "select top 25 * from tabela order by id desc" 'você pegaria os 25 mais novos

[*]'executa a sql na variavel rsProcura

[*]x=1

[*]while not rsProcura.eof

[*] if x=1 then

[*] msg_id = rsProcura("id")

[*] x = 2

[*] end if

[*] if rsProcura("id") < msg_id then

[*] msg_id = rsProcura("id")

[*] end if

[*] rsProcura.movenext

[*]wend ' fazendo isso você pegaria o id mais nova que seria a 25ª msg, pois pode ter havido alguma msg apagada e os códigos podem ñ estar na ordem.

[*]sql_apaga = "delete * from tabela where id<" & msg_id

[*]'executa sql_apaga

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode fazer uma seleção dos 25 primeiros registros e dentro de um loop concatena os ids e depois deleta os que não tiverem nesta lista

 

vou fazer parecido com o codigo acima

 

ASP

    [*]sql_procura = "select top 25 * from tabela order by id desc" 'você pegaria os 25 mais novos

    [*]'executa a sql na variavel rsProcura

    [*]while not rsProcura.eof

    [*]ids = rsProcura("id") & ","

    [*]rsProcura.movenext

    [*]wend

    [*]'até aqui você concatenou todos os 25 registros mais novos agora é so deletar a ultima virgula que ta sobrando, eheheh

    [*]ids = LEFT(ids,LEN(ids)-1)

    [*]'ai deleta os que não tão na lista

    [*]sql_apaga = "delete * from tabela where id NOT IN (" & ids & ")"

    [*]'executa sql_apaga

 

bem acho que é isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.