Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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
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
Poderia mostrar um exemplo de como posso fazer isso.
Sds,
Vagner Nunes
>
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
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.
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>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....
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
<%
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?
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
%>
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
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
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..
poste como esta seu código e caso gere algum erro, coloque o número do erro e linha
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...
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
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
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
%>Fiz o teste e agora está apresentano o seguinte erro:
Informações técnicas (para a equipe de suporte)
Tipo de erro:
Erro de tempo de execução do Microsoft VBScript (0x800A01A8)
Objeto necessário: '[string: "SELECT count(data) F"]'
/estudo/teste1/pos.asp, line 14
Tipo de navegador:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6.6; .NET CLR 2.0.50727)
Página:
POST 98 bytes to /estudo/teste1/pos.asp
POST Data:
titulo=Morena+Teste&video=Morena+Teste+1&audio=Morena+Teste+2&data=08%2F03%2F2011&button=CADASTRAR
Hora:
terça-feira, 8 de março de 2011, 16:18:34
Segue código:
<%
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
%>select count(titulo)
tente fazer assim select count(titulo) as Soma from videos
se num der certo eu devo estar fazendo alguma coisa errado.. ai ja nao vou poder ajudar mais.
abçs
Testei desta forma também e não deu certo....
Olha essa aqui.. Só copia e cola.. pra ver como fica..
Cara esse negócio ta me fazendo ler um monte de coisas.. kkk, pelo menos eu to olhando tudo o que já aprendi antes..
mais vamos lá que dessa vez eu acho que vai dar certo.
<%
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;"
conta = rs.open "SELECT COUNT(titulo) FROM videos",conexao
if conta >= 5 then
rs.open "INSERT INTO videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')",conexao
rs.movefirst ,conexao
rs.open "DELETE * FROM videos" , conexao
else
rs.open "INSERT INTO videos (titulo, video, audio, data) values ('"&titulo&"','"&video&"','"&audio&"','"&data&"')" , conexao
end if
Response.write("Vídeo cadastrado com sucesso")
rs.close
Conexao.close
%>Prezado,
Fiz conforme procedimento, porém está apresentando erro. Tente outras formas também de utilizar o SELECT COUNT, más, sem sucesso.
Tipo de erro:Erro de compilação do Microsoft VBScript (0x800A0401)
Fim da instrução esperado
/estudo/teste1/pos.asp, line 14, column 16
conta = rs.open "SELECT COUNT(titulo) FROM videos" , conexao
---------------^
Sds,
Vagner Nunes
conta = "select count titulo from videos"
set rs = conn.execute (conta)
você terá que verificar a data do registro e qual for o mais antigo você usa o DELETE, seu banco tem um campo data?