Fazendo uma enquete
Olá pessoal, estou tendo um probleminha nesse scripit, talvez seja besteira para quem entende.
A situação é o seguinte tenho 4 arquivos: conexão.asp, enquete.asp, send_enquete.asp e resultado.asp.
O que deveria acontecer, o usuário entra na pág. enquete.asp, faz a sua escolha e é direcionada para a pág send_enquete, que esta direciona o usuário para a pág. resultado.asp.
O problema é que a pág sen_enquete.asp não direciona, quando o usuário confirma o voto dá o seguinte erro
Microsoft JET Database Engine error '80004005'
Operation must use an updateable query.
/enquete/send_enquete.asp, line 14
( A linha 14 da pág send_enquete.asp é conexao.execute(sql)
Estou enviando os códigos das páginas, para que possam tenter resolver o problema, após resolvido quem quiser posta aqui que eu mando todo o arquivo
Conexao.asp
<%
'------------------------------------------------------------------------------------------
' Este ASP cria a conexão com o banco de dados sem usar DSN
'------------------------------------------------------------------------------------------
' Construo o caminho do HD do servidor que contem o banco de dados para poder fazer uma conexao ao banco de dados sem DNS
caminho=left(Server.mappath(Request.ServerVariables("PATH_INFO")),InstrRev(Server.mappath(Request.ServerVariables("PATH_INFO")),"\"))'
Crio o objeto de conexao ADO
Set conexao = Server.CreateObject("ADODB.Connection")
conexao.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&caminho&"db\enquete.mdb"
' Abro a conexão
conexao.open
%>
enquete.asp
<!--Inclusão da string de conexao ao banco de dados -->
(<!--#include file="conn/conexao.asp"-->
<%
' Seleciono todas as perguntas por ordem decrescente de data
sql="SELECT * FROM enquete_pergunta ORDER BY data DESC"
set rs_enquete_pergunta=conexao.execute(sql)
' Seleciono todas as respostas da pergunta de data mais recente
sql="SELECT * FROM enquete_respostas WHERE ID_enquete="&rs_enquete_pergunta(0)&" ORDER BY id_resposta "
set rs_enquete_respostas=conexao.execute(sql)
%>
<BODY BGCOLOR="#FFFFFF">
<table width="300" border="0" class=enquete>
<tr>
<%
' Coluna que contem um link para poder ver os resultados desta enquete sem votar
%>
<td align=center bgcolor="#009999" class=nav><a href="resultados.asp?id=<%=rs_enquete_pergunta(0)%>" class=nav><font color="#FFFFFF">ENQUETE</font></a></td>
</tr>
<tr>
<td>
<%
' Formulário que vai enviar o ID da resposta para adicionar mais um hit
%>
<form name="enquete" method="post" action="send_enquete.asp">
<%
' Coluna que contem o texto da pergunta
%>
<%=rs_enquete_pergunta(1)%><br>
<%
' Enquanto houver respostas para esta pergunta....
%>
<%do while not rs_enquete_respostas.eof%>
<%
' Cria um conjunto de radio buttons com o valor do ID da resposta e o texto da resposta
%>
<input selected type="radio" name="resposta" value=
"<%=rs_enquete_respostas(0)%>"><%=rs_enquete_respostas(2)%>
<%rs_enquete_respostas.movenext%>
<%loop%>
</form>
</td>
</tr>
<tr>
<%
' Coluna que contem o butão que efetua o envio do formulário para o ASP que adiciona hits ás respostas%>
<td><input type="submit" name="Submit" value=" Enviar " OnClick="document.enquete.submit()" class="formu"></td>
</tr>
</table>
</BODY>
Send_enquete.asp
<!--#include file="conn/conexao.asp"-->
<%
'------------------------------------------------------------------------------------------
' Este ASP adiciona um hit á resposta da enquete
'------------------------------------------------------------------------------------------
' Obtenho o ID da resposta a que tenho de adicionar +1 id_resposta=request.form("resposta")
' Uso esse ID para saber quantos hits essa resposta já tem
sql="SELECT ID_enquete, hits FROM enquete_respostas WHERE ID_resposta="&id_resposta
set resposta=conexao.execute (sql)
*' Atualizo o banco de dados com o valor atual de hits + 1* sql="UPDATE enquete_respostas set hits="&resposta("hits")+1&" WHERE id_resposta="&id_resposta
conexao.execute(sql)
' Redireciono o browser do usuário para a página que exibe os resultados das enquetes
response.redirect "resultados.asp?id="&resposta(0)
%>
resultado.asp
<!--#include file="conn/conexao.asp"-->
' Obtenho o ID da pergunta da qual vou exibir os resultados
id=request.querystring("id")
' Se o ID estiver vazio então exibe a pergunta de data mais recente
if isempty(id) then
sqlend=" ORDER BY data"
else
' Senão exibe a pergunta do ID dado
sqlend=" WHERE ID_enquete="& id
end if
' Transformo esse ID num valor númerico
valor=cint(id)
' Selecciono todas a pergunta do ID
sql="SELECT * FROM enquete_pergunta "& sqlend
set enquete_pergunta=conexao.execute(sql)
%>
<%
' Se não existir pergunta do ID exibe mensagem de erro
if enquete_pergunta.eof then%>
<tr>
<td colspan=3 class=nav align=center>Pergunta inexistente</td>
</tr>
<%'Senão seleciona e exibe respostas
else
' Selecciono todas as respostas dessa pergunta
sql="SELECT * FROM enquete_respostas WHERE ID_enquete="& enquete_pergunta("ID_enquete") &" ORDER BY id_resposta "set enquete_respostas=conexao.execute(sql)
' Selecciono todas as perguntas ordenadas por data crescente
sql="SELECT * FROM enquete_pergunta ORDER BY data "
set perguntas=conexao.execute(sql)
%>
<tr bgcolor="#3366CC">
<%
' Linha com o texto da pergunta do ID
%>
<td colspan=3 align=center class=nav><%=enquete_pergunta(1)%></td>
</tr>
<%
' Se não tiver respostas exibe a mensagem seguinte
%>
<%if enquete_respostas.eof then%>
<tr>
<td colspan=3 class=enquete>Nenhumas respostas existentes</td>
</tr>
<%
' Se tiver respostas exibe-as
%>
<%else%>
<%total=0%>
<%
' Enquanto as respostas não chegarem ao fim....
%>
<%do while not enquete_respostas.eof
' Calculo o valor total dos Hits
total=total+enquete_respostas("hits")%>
<tr>
<%
' Coluna com o texto da resposta
%>
<td width="20%" nowrap class=enquete><%=enquete_respostas(2)%>
</td>
<%
' Coluna com as imagens que compoem o grafico de barra desta resposta
%>
<td width="78%" class=enquete>
<%
' Imagem do inicio da barra
%><img src="imgs/barraopen.gif">
<%
' Cilco for que colona o número de hits da resposta n, sendo n=5, para dar comprimento á bala, dependendo da grossura do gif, poderá ter mais ou menos valor o n*
' Imagem do meio da barra
n=1
for x=0 to enquete_respostas("hits")*n%>
<img src="imgs/barramidle.gif">
<%next
' Imagem do Fim da barra
%>
<img src="imgs/barraclose.gif"></td>
<%
' Valor real dos hits dessa resposta
%>
<td width="2%" nowrap class=enquete><%=enquete_respostas("hits")%>
</td>
</tr>
<%
' Passo á resposta seguinte
enquete_respostas.movenext%>
<%loop%>
<%
' Linha em que exibo o valor sumatório dos hits de todas as respostas
%>
<tr>
<td width="20%" nowrap class=enquete><font color="#009999">Total</font></td>
<%
' Coluna que exibe o grafico da barra, mesmo mecanismo das respostas descrito nas linhas anteriores
%>
<td width="78%" class=enquete><img src="imgs/barraopen.gif"><%for x=0 to Total*n%>
<img src="imgs/barramidle.gif"><%next%>
<img src="imgs/barraclose.gif"></td>
<td width="2%" nowrap class=enquete><%=total%></td>
</tr>
<%end if%>
</table>
<%
' Tabela que vai exibir outras enquetes que não a que estiver a ser exibida
%>
<table width="100%" align=center class=nav>
<tr>
<td colspan=2 align=center class=nav>Resultados de Enquetes anteriores</td>
</tr>
<tr class=grey1>
<td align=center width="29%">Data</td><td width="100%" align=center>Pergunta</td>
</tr>
<%
' Enquanto não chegar ao fim das perguntas....
%>
<%do while not perguntas.eof%>
<%
' Se o ID da pergunta for diferente da pergunta atual, então essa pergunta vai aparecer na lista
%>
<%if cint(perguntas("id_enquete"))<>cint(enquete_pergunta("ID_enquete")) then%>
<tr class=grey2>
<%
' Coluna com o texto da data com link para exibir as respostas dessa pergunta
%>
<td align=center><a href="resultados.asp?id=<%=perguntas("id_enquete")%>" class=enquete><%=perguntas("data")%></a></td>
<%
' Coluna com o texto da pergunta com link para exibir as respostas dessa pergunta
%>
<td align=center><a href="resultados.asp?id=<%=perguntas("id_enquete")%>" class=enquete><%=perguntas("pergunta")%></a>
</td>
</tr>
<%end if%>
<%
' Passo á pergunta seguinte
%>
<%perguntas.movenext%>
<%loop%>
<%end if%>
</table>
:lol: Após resolvido me peçam que eu mando a enquete completinha.
Obrigado a todos.
Discussão (2)
Carregando comentários...