Ir para conteúdo

POWERED BY:

Arquivado

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

Vagner Nunes

[Resolvido] Limitar registros de uma tabela!

Recommended Posts

Prezados,

 

Boa tarde. Gostaria de saber como posso fazer para limitar um cadastro em banco, e quanto atingir a quantidade estabelecida, o próximo registro, excluir o mais antigo.

 

Ex.: Tenho no banco e uma tabela que possui 5 registros, e quando alguém fazer o cadastro do 6º registro, automaticamente, excluir o registro mais antigo, por exemplo o 1º.

 

Como posso fazer isso?

 

Obrigado pessoal....

 

Sds,

 

Vagner Nunes

Compartilhar este post


Link para o post
Compartilhar em outros sites

você terá que verificar a data do registro e qual for o mais antigo você usa o DELETE, seu banco tem um campo data?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem um campo chamado data, mas posso para fazer isso? Poderia me dar um exemplo...

 

Quando clicar em Cadastrar, fazer um INSERT e EXCLUIR o mais antigo.

 

Sds,

 

Vagner Nunes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom a lógica a ser seguida acho que deva ser essa:

 

 

 

voce deve ler o banco para verificar a quantidade de registros e guardar numa variável chamada qtd_registros;

 

apois isso crie um if assim

 

if qtd_registros > 5 then

salve o novo registro e apague o primeiro

else

 

apenas salve o novo registro

 

 

Fallows

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia mostrar um exemplo de como posso fazer isso.

 

Sds,

 

Vagner Nunes

 

Não entendi? você quer um exemplo usando sintaxe? bom quanto a isso não vou poder ajudar. pois já fazem alguns anos que não programo, então e esqueci..agora eu sei que voce pode seguir a lógica proposta que vai dar certo.

 

Se alguém estiver ativo na programação e puder passar a sintaxe para ele. seria bom

Compartilhar este post


Link para o post
Compartilhar em outros sites

para contar os registros use record.count, jogue o valor vindo dai numa variavel e compare, se for menor que o que você deseja, executa o insert, se for igual ou maior, executa o delete e depois o insert.

Usando os comandos first e last, você posiciona o ponteiro no registo que deseja e poderá manipular da forma que achar melhor.

Se tiver um campo com autonumeração (id por exemplo) também ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

neste exemplo eu verifico o último registro, somar + 1 e inserir no bd

<%@ Language=VBScript %>
<% Option Explicit %>
<%
'conexao teste com  mdb
Dim localbd, bd

Set bd = Server.CreateObject("ADODB.Connection")
localbd = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Server.MapPath("banco.mdb") 
bd.Open localbd 

Dim sql, rs
Dim cd_pedido

Set rs = Server.CreateObject("ADODB.RecordSet")

if Request.Form("btenvia") = "Gerar Numero" then
       'Novo numero
       SQL = "SELECT MAX(N_PEDIDO)+1 AS ULITMO_PEDIDO FROM PEDIDO"
       Set rs = bd.Execute (sql)
       cd_pedido = rs.Fields("ULITMO_PEDIDO").Value 

       'inserindo novo numero
       bd.Execute ("INSERT INTO PEDIDO (N_PEDIDO) VALUES (" & cd_pedido & ")")
       rs.Close

end if

'verificando numero
SQL = "SELECT MAX(N_PEDIDO) AS ULITMO_PEDIDO FROM PEDIDO"
Set rs = bd.Execute (sql)
cd_pedido = rs.Fields("ULITMO_PEDIDO").Value 


rs.Close
Set rs = Nothing

bd.Close
Set bd = Nothing
%>
<html>
<head>
<title>Numero Sequencial</title>
</head>
<body>
<center>
<form  id="frm" action="Numero_Sequencial.asp" method="post">
Numero do ultimo pedido:<%=cd_pedido%><br>
<input type="submit" id="btenvia" name="btenvia" value="Gerar Numero" />
</form>
</center>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezados,

 

Segue abaixo, o meu código que faz a inserção, gostaria que quando ao clicar Cadastrar no form, faça o INSERT, porém exclua o registro mais antigo.

<%
Dim conexao, titulo, video, audio, data

titulo = Request.form("titulo")
video = Request.form("video")
audio = Request.form("audio")
data = Request.form("data")

Set Conexao= Server.CreateObject("ADODB.Connection")
Conexao.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\teste1\banco.mdb;"
Conexao.execute "INSERT INTO videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')"

Response.write("Vídeo cadastrado com sucesso")
Conexao.close
%>

 

Queria fazer este procedimento.... Obrigado pessoal....

Compartilhar este post


Link para o post
Compartilhar em outros sites

depois do insert faça o delete ou antes

 


sql = "delete top 1 from tabela order by data asc"
conexao.execute(sql)

ou se não der assim tente com uma subquery

sql = "delete * from tabela where data in (select top 1 from tabela order by data asc)"

não tentei mas se não der procure por delete top

ou então faça de outra maneira, obtenha primeiro o registo mais antigo e depois apague

sql = "select top 1 id from tabela order by data asc"
id_delete = rs("id")

sql = "delete * from tabela where id="&id_delete

Compartilhar este post


Link para o post
Compartilhar em outros sites

<%
Dim conexao, titulo, video, audio, data

titulo = Request.form("titulo")
video = Request.form("video")
audio = Request.form("audio")
data = Request.form("data")

Set Conexao= Server.CreateObject("ADODB.Connection")
Conexao.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\teste1\banco.mdb;"
Conexao.execute "INSERT INTO videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')"

Response.write("Vídeo cadastrado com sucesso")
Conexao.close
%>

 

dim conta
conta = Select count(titulo) from videos

  if conta >= 5 then
      Coloca o seu insert
      rs.movefirst(irá mover o ponteiro para o primeiro registro da tabela e rs e a variavel que armazena o recordset)
      delete * from videos
 else
       coloca o insert aqui
 end if





 

 

Curiosidade, vocÊ tah coseguindo fazer inserts sem um recordset?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezados, não consegui fazer...

 

Tente aqui de várias formas, mas nada...

 

<%
Dim conexao, titulo, video, audio, data

titulo = Request.form("titulo")
video = Request.form("video")
audio = Request.form("audio")
data = Request.form("data")

Set Conexao= Server.CreateObject("ADODB.Connection")
Conexao.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\teste1\banco.mdb;"
Conexao.execute "INSERT INTO videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')"

Response.write("Vídeo cadastrado com sucesso")
Conexao.close
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

pegue o campo data no bd, verifique o campo com a data mais atinga e exclua ele, depois faz o insert normalmente, ou tendo um campo ID, veja qual o último inserido e exclua ele, você pode usar aquele exemplo que postei

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado Xanburzum,

 

Desculpe-me a minha inabilidade neste sentido, mas tentei implementar o código, pelo senhor fornecido, porém, não consegui mais uma vez.

 

<% 
Dim conexao, titulo, video, audio, data 

titulo = Request.form("titulo") 
video = Request.form("video") 
audio = Request.form("audio") 
data = Request.form("data") 

Set Conexao= Server.CreateObject("ADODB.Connection") 
Conexao.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\teste1\banco.mdb;" 
Conexao.execute "INSERT INTO videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')" 

Response.write("Vídeo cadastrado com sucesso") 
Conexao.close 
%>

 

Valeu,

 

Sds,

 

Vagner Nunes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vagner o problema é que você não esta postando pra gnt o código que você tentou implementar, esse código com o insert a gnt já viu. Pois ai a sua tentativa com o modelo que eu te passei.. lembre-se que aquela sintaxe talvez não seja a mais adequada ao asp, porém é a unica que me recordo no momento..

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste como esta seu código e caso gere algum erro, coloque o número do erro e linha

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezados,

 

Segue abaixo o código modificado... Não sei estar correto.

<%
Dim conta, conexao, titulo, video, audio, data 

titulo = Request.form("titulo")
video = Request.form("video")
audio = Request.form("audio")
data = Request.form("data")

Set Conexao= Server.CreateObject("ADODB.Connection")
Conexao.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\estudo\teste1\banco.mdb;"

conta = SELECT count(titulo) FROM videos 

  if conta >= 5 then 
      Conexao.execute "INSERT INTO videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')" 
      Conexao.movefirst 
      DELETE * FROM videos 
 else 
       Conexao.execute "INSERT INTO videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')"
 end if 
Response.write("Vídeo cadastrado com sucesso")
Conexao.close  
 %>

 

E abaixo o erro ocorrido:

Informações técnicas (para a equipe de suporte)

 

Tipo de erro:

Erro de compilação do Microsoft VBScript (0x800A03EA)

Erro de sintaxe

/estudo/teste1/pos.asp, line 15, column 8

conta = SELECT count(titulo) FROM videos

-------^

 

Valeu pela ajuda pessoal...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Vagner eu tinha feito essa pergunta anteriormente e você não respondeu e agora vendo o seu código volto a perguntar:

 

Como você consegue fazer insert´s na tabela sem o recorset?

 

Então crie uma variavel chamada rs e de a ela o seguinte conteúdo Server.CreateObject ("ADODB.Recordset"), então fica assim oh

 

<%
Dim conta, conexao, rs, titulo, video, audio, data 

titulo = Request.form("titulo")
video = Request.form("video")
audio = Request.form("audio")
data = Request.form("data")

Set Conexao= Server.CreateObject("ADODB.Connection")
Set rs= Server.CreateObject ("ADODB.Recordset")
Conexao.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\estudo\teste1\banco.mdb;"
rs.open "Tá abrindo o recordset

conta = rs.execute "SELECT count(titulo) FROM videos" 

  if conta >= 5 then 
      rs.execute "insert into videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')" 
      Conexao.movefirst 
      rs.exectue "DELETE * FROM videos" 
 else 
       rs.execute "INSERT INTO videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')"
 end if 
Response.write("Vídeo cadastrado com sucesso")
rs.close
Conexao.close  
 %>

 

Testa assim, caso não dê certo eu não sei não.. pelo que me recordo você abre a conexão com o banco somente uma vez, não precisa abrir a cada string sql, e para usar select,insert,delete,etc. você deve usar o recordset.

 

abçx,s

 

LCS

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado,

 

Tentei aqui, mas não consegui novamente. Continua a dar erro.

 

<% 
Dim conta, conexao, rs, titulo, video, audio, data  

titulo = Request.form("titulo") 
video = Request.form("video") 
audio = Request.form("audio") 
data = Request.form("data") 

Set Conexao= Server.CreateObject("ADODB.Connection") 
Set rs= Server.CreateObject ("ADODB.Recordset") 
Conexao.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\estudo\teste1\banco.mdb;" 
rs.open  

conta = rs.execute "SELECT COUNT(titulo) FROM videos WHERE data ORDER BY ASC"  

  if conta >= 5 then  
      rs.execute "INSERT INTO videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')"  
      Conexao.movefirst  
      rs.execute "DELETE * FROM videos"  
 else  
       rs.execute "INSERT INTO videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')" 
 end if  
Response.write("Vídeo cadastrado com sucesso") 
rs.close 
Conexao.close   
 %>

 

Erro apresentado:

Informações técnicas (para a equipe de suporte)

 

Tipo de erro:

Erro de compilação do Microsoft VBScript (0x800A0401)

Fim da instrução esperado

/estudo/teste1/pos.asp, line 17, column 21

Conexao = rs.execute "SELECT COUNT(titulo) FROM videos WHERE data ORDER BY ASC"

--------------------^

 

 

Sds,

 

Vagner Nunes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiquei meio encascucado com isso e dei uma pesquisada para relembrar alguma coisa.. imagino que seja isso. Realmente eu cometi um engano, não é necessário você declarar um recordset.

 

Tenta ai e diz o que deu.

 

Abçx.

 

 

 

<%
Dim conta, conexao, titulo, video, audio, data 

titulo = Request.form("titulo")
video = Request.form("video")
audio = Request.form("audio")
data = Request.form("data")

Set Conexao= Server.CreateObject("ADODB.Connection")
Conexao.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\estudo\teste1\banco.mdb;"



SEt Consulta =  "SELECT count(titulo) FROM videos"  'Aqui salva a string do select
Set conta = conexao.execute(Consulta) 'Aqui ela pega aquela string do select e usa o comando execute, apos feito o select ele salva na variavel conta.

  if conta >= 5 then 
      Inserir= "insert into videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')" 'Aqui salva a string de insert.
      conexao.execute(Inserir) 'Aqui usa o execute.
      conta.movefirst ' Aqui ele tah jogando o ponteiro do select para o 1º registro
   Deletar = "delete * from videos" ' Aqui ele vai deletar
 else 
       Inserir= "insert into videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')" 'Aqui salva a string de insert.
      conexao.execute(Inserir) 'Aqui usa o execute.
 end if 
Response.write("Vídeo cadastrado com sucesso")
conexao.close  
 %>

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.