> Manuales > Taller de ASP

Mostramos un ejemplo de una aplicación de foros sencilla utilizando ASP y base de datos ACCESS.

Antes de liarte con el ejemplo, puedes darte una vuelta por Los foros de la cueva para que te hagas una idea del funcionamiento de la aplicación.

Este ejercicio, sin ser complicado, si requiere de una base minima de formación en HTML y ASP-ADO, asi que no te lies con él antes de haber echado un vistazo a TODOS los ejemplos anteriores.

La base de datos sobre la que esta elaborado es ACCESS y utiliza la alocación directa del Driver sin usar DSN (esta es la forma de declaración a la que te obligan la mayoria de los servidores gratuitos al no dejarte definir DSN's de sistema)

Definición de la base de datos

Nombre de la Base de Datos: PyR.mdb

Consta de 3 tablas:

Tabla FOROS


Tabla PREGUNTAS


Tabla RESPUESTAS


Relaciones entre las tablas:


Modulos y paginas estaticas de la aplicación

La aplicación consta de 8 paginas asp y 1 html estatico. Se podria reducir el numero de modulos reutilizando parte del codigo de estos, pero por claridad he preferido plantearlo de esta forma.

addforo.aspModulo de inclusión de un nuevo foro en la tabla Foros
addpregunta.aspModulo de inclusión de una nueva pregunta en la tabla Preguntas
addrespuesta.aspModulo de inclusión de una nueva respuesta en la tabla Respuestas
foros.asp Modulo de presentación, listado de todos los foros
insertarforo.htmFormulario de inserción de un nuevo foro
insertarpregunta.aspFormulario para insertar una nueva pregunta
pyr.aspModulo de visualización de todas las preguntas de un determinado foro
responder.aspFormulario para insertar una respuesta a una pregunta
vr.aspModulo de visualización de todas las respuestas a una determinada pregunta.


addforo.asp

<%
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4%>
<%foro=request.form("foro")
if foro="" then %>
<html>

<head>
<title>Error al insertar pregunta</title>
</head>

<body bgcolor="#CCFFCC">

<p align="center"><img border="0" src="images/titulo.jpg"></p>

<p align="center">Ningun campo puede estar en blanco,
<a href="insertarforo.htm">
inténtalo otra vez</a></p>
</body>

</html>

<%else
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb"))

set rs=createobject("ADODB.Recordset")
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic

rs.open "foros",conn
rs.addnew
rs("foro")=foro
rs.update
rs.close
response.redirect "foros.asp"
end if
%>


addpregunta.asp

<%
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4%>
<%autor=request.form("autor")
nforo=request.form("nforo")
pregunta=request.form("pregunta")
if autor="" or pregunta="" or nforo="" then %>
<html>

<head>

<title>Error al insertar pregunta</title>
</head>

<body bgcolor="#CCFFCC">

<p align="center"><img border="0" src="images/titulo.jpg"></p>

<p align="center">Ningun campo puede estar en blanco,
<a href="insertarpregunta.asp?nforo=<%=nforo%>">
inténtalo otra vez</a></p>
</body>

</html>

<%else
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb"))

set rs=createobject("ADODB.Recordset")
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic

rs.open "preguntas",conn
rs.addnew
rs("foro")=nforo
rs("autor")=autor
rs("fecha")=now()
rs("pregunta")=pregunta
rs.update
rs.close
donde="pyr.asp?nforo="&nforo
response.redirect donde
end if%>

addrespuesta.asp

<%

Const adOpenForwardOnly = 0
Const adOpenKeyset = 1

Const adOpenDynamic = 2
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4%>
<%nombre=request.form("nombre")
nforo=request.form("nforo")
respuesta=request.form("respuesta")
numero=request.form("numero")
if nombre="" or respuesta="" or numero="" or nforo="" then %>
<html>

<head>

<title>Error al insertar pregunta</title>
</head>

<body bgcolor="#CCFFCC">

<p align="center"><img border="0" src="images/titulo.jpg"></p>

<p align="center">Ningun campo puede estar en blanco,
<a href="responder.asp?numero=<%=numero%>&nforo=<%=nforo%>">
inténtalo otra vez</a></p>
</body>

</html>

<%else
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb"))

set rs=createobject("ADODB.Recordset")
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic

rs.open "respuestas",conn
rs.addnew
rs("numero")=numero
rs("autor")=nombre
rs("fecha")=now()
rs("respuesta")=respuesta
rs.update
rs.close
donde="vr.asp?numero="&numero&"&nforo="&nforo
response.redirect donde
end if%>


foros.asp

<html>
<%sqltxt="select * from foros order by foro"
Set Conn = Server.CreateObject("ADODB.Connection")

Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb"))

set rs=createobject("ADODB.Recordset")
set rsr=createobject("ADODB.Recordset")
rs.open sqltxt,conn%>

<head>
<title>La Cueva de Smaug Foros</title>
</head>

<body bgcolor="#CCFFCC">

<p align="center"><img border="0" src="images/titulo.jpg"></p>

<p align="center">&nbsp;</p>
<div align="center">
<center>
<table border="0" width="575">
<tr>
<td colspan="2" align="center" bordercolor="#008000" bgcolor="#008000" width="565"><font face="Verdana" color="#FFFFFF" size="2">Los

Foros de la Cueva TEMAS LIBRES</font></td>

</tr>
<%if rs.eof then%>
<tr><td colspan="2" width="565" bgcolor="#FFCCCC">No hay foros disponibles</td></tr>
<%else
do while not rs.eof%>
<tr>
<td width="470" bgcolor="#FFCCCC"><font face="Verdana" size="1"><%=rs("foro")%></font></td>
<td width="89" bgcolor="#FFCCCC">
<p align="center"><font face="Verdana" size="1"><a href="pyr.asp?nforo=<%=rs("codigof")%>"><img border="0" src="images/ir.gif" WIDTH="13" HEIGHT="13"></a></font></p>
</td>

<%rs.movenext
    loop
rs.close
end if%>

</table>
</center>
</div>
<br>
<div align="center">
<center>
<table border="0" width="50%" bgcolor="#FFFFFF">
<tr>
<td width="30%" align="center"><font face="Verdana" size="1"><a href="insertarforo.htm">Crear
un nuevo Foro</a></font></td>
</tr>
</table>
</center>
</div>

</body>

</html>


Insertarforo.htm

<html>

<head>

<title>Crear un Nuevo Foro</title>
</head>

<body bgcolor="#CCFFCC">

<p align="center"><img border="0" src="images/titulo.jpg" width="450" height="75"></p>

<p align="center"><font face="Verdana">Crear un nuevo Foro</font></p>

<form method="POST" action="addforo.asp">
<table border="1" width="100%">
<tr>
<td width="100%" bgcolor="#008000"><font color="#FFFFFF">Nombre del Foro</font></td>
</tr>
<tr>
<td width="100%">
<p align="center"><input type="text" name="foro" size="50">
</p>
</td>
</tr>

</table>
<p align="center"><input type="hidden" name="nforo" value="<%=nforo%>">
<input type="submit" value="Enviar" name="B1"><input type="reset" value="Restablecer" name="B2"></p>
</form>

</body>

</html>


Insertarpregunta.asp

<%nforo=request.querystring("nforo")%>
<html>

<head>

<title>Insertar una pregunta</title>
</head>

<body bgcolor="#CCFFCC">

<p align="center"><img border="0" src="images/titulo.jpg"></p>

<p align="center"><font face="Verdana">Insertar una pregunta</font></p>

<form method="POST" action="addpregunta.asp">
<table border="1" width="100%">
<tr>
<td width="100%" bgcolor="#008000"><font face="Verdana" size="2" color="#FFFFFF">Pregunta</font></td>
</tr>
<tr>
<td width="100%">Pregunta insertada por: <input type="text" name="autor" size="20">
</td>
</tr>
<tr>
<td width="100%">
<p align="center"><textarea rows="5" name="pregunta" cols="50"></textarea></td>
</tr>
</table>
<p align="center"><input type="hidden" name="nforo" value="<%=nforo%>">
<input type="submit" value="Enviar" name="B1"><input type="reset" value="Restablecer" name="B2"></p>
</form>

</body>

</html>

pyr.asp

<%nforo=request.querystring("nforo")
if nforo="" then
response.redirect "foros.asp"
end if
sqltxt="select * from foros where codigof="&nforo
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb"))
set rs=createobject("ADODB.Recordset")
set rsr=createobject("ADODB.Recordset")
rs.open sqltxt,conn
if rs.eof then
response.redirect "foros.asp" 'evitamos el error de foro borrado
end if
nombredelforo=rs("foro")
rs.close

sqltxt="select * from preguntas where foro="&nforo
rs.open sqltxt,conn%>
<html>

<head>
<title>La Cueva de Smaug&nbsp; (Foros)</title>
</head>

<body bgcolor="#CCFFCC">

<p align="center"><img border="0" src="images/titulo.jpg"></p>

<p align="center"><font face="Verdana"><font size="4">Foro: </font>&nbsp;<%=nombredelforo%>
<div align="center">
<center>
<table border="0" width="575">
<tr>
<td width="62" align="center" bordercolor="#008000" bgcolor="#008000"><font face="Verdana" size="1" color="#FFFFFF">Fecha</font></td>
<td width="254" align="center" bordercolor="#008000" bgcolor="#008000"><font face="Verdana" size="1" color="#FFFFFF">Pregunta</font></td>
<td align="center" bordercolor="#008000" bgcolor="#008000" width="82"><font face="Verdana" size="1" color="#FFFFFF">Numero
de Respuestas</font></td>
<td width="94" align="center" bordercolor="#008000" bgcolor="#008000">
<p align="center"><font face="Verdana" size="1" color="#FFFFFF">Ver
Respuestas</font></td>
<td width="49" align="center" bordercolor="#008000" bgcolor="#008000">
<p align="center"><font face="Verdana" size="1" color="#FFFFFF">Responder</font></p>
</td>
</tr>
<%if rs.eof then%>
<tr><td colspan=5 width="565" bgcolor="#FFCCCC">No hay preguntas</td></tr>
<%else
do while not rs.eof%>
<tr>
<td width="62" bgcolor="#FFCCCC"><font face="Verdana" size="1"><%=formatdatetime(rs("fecha"),2)%></font></td>
<td width="254" bgcolor="#FFCCCC" valign="middle">
<font face="Verdana" size="1"><%=rs("pregunta")%></font></td>
<%sqltxt2="select count(*) from respuestas where numero ="&rs("numero")
rsr.open sqltxt2,conn %>

<td width="82" bgcolor="#FFCCCC">
<p align="center"><font face="Verdana" size="1"><%=rsr(0)%></font></td>

<td width="94" valign="middle" align="center" bgcolor="#FFCCCC">
<%if rsr(0)<> 0 then%>
<a href="vr.asp?numero=<%=rs("numero")%>&nforo=<%=nforo%>"><font face="Verdana" size="1"><img border="0" src="images/ir.gif" width="13" height="13"></font></a>
<font face="Verdana" size="1">
<%else%>
&nbsp; <%end if
rsr.close%>
</font>
</td>
<td width="49" align="center" bgcolor="#FFCCCC">
<p align="center"><font face="Verdana" size="1"><a href="responder.asp?numero=<%=rs("numero")%>&nforo=<%=nforo%>"><img border="0" src="images/ir.gif" width="13" height="13"></a></font></p>
</td>
</tr>
<%rs.movenext
loop
rs.close
end if%>
</table>
</center>
</div>
<p align="center">&nbsp;</p>
<div align="center">
<center>
<table border="0" width="50%" bgcolor="#FFFFFF">
<tr>
<td width="30%" align="center"><font face="Verdana" size="1"><a href="insertarpregunta.asp?nforo=<%=nforo%>">Insertar
una pregunta</a></font></td>
</tr>
</table>
</center>
</div>
<br>
<div align="center">
<center>
<table border="0" width="50%" bgcolor="#FFFFFF">
<tr>
<td width="30%" align="center"><font face="Verdana" size="1"><a href="foros.asp">Volver a Foros</a></font></td>
</tr>
</table>
</center>
</div>
</body></html>


responder.asp

<%numero=request.querystring("numero")
nforo=request.querystring("nforo")
if numero="" or nforo="" then
response.redirect "pyr.asp"
end if
sqltxt="select * from preguntas where numero="&numero
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb"))

set rs=createobject("ADODB.Recordset")
rs.open sqltxt,conn%>

<html>

<head>
<title>Responder a una pregunta</title>
</head>

<body bgcolor="#CCFFCC">

<p align="center"><img border="0" src="images/titulo.jpg"></p>

<p align="center"><font face="Verdana">Responder
a una pregunta</font></p>
<table border="0" width="100%">
<tr>
<td width="100%" bgcolor="#008000"><font face="Verdana" color="#FFFFFF" size="2">Pregunta
realizada por <%=rs("autor")%> el dia <%=formatdatetime(rs("fecha"),2)%></font></td>
</tr>
<tr>
<td width="100%" bgcolor="#FFFFFF"><%=rs("pregunta")%></td>
<%rs.close%>
</tr>
</table>

<p>&nbsp;</p>
<form method="POST" action="addrespuesta.asp?nforo=<%=nforo%>">
<table border="1" width="100%">
<tr>
<td width="100%" bgcolor="#008000"><font face="Verdana" size="2" color="#FFFFFF">Respuesta</font></td>
</tr>
<tr>
<td width="100%">Respuesta elaborada por: <input type="text" name="nombre" size="20">
</td>
</tr>
<tr>
<td width="100%">
<p align="center"><textarea rows="5" name="respuesta" cols="50"></textarea></td>
</tr>
</table>
<p align="center"><input type="hidden" name="numero" value="<%=numero%>">
<input type="hidden" name="nforo" value="<%=nforo%>">
<input type="submit" value="Enviar" name="B1"><input type="reset" value="Restablecer" name="B2"></p>
</form>

</body>

</html>


vr.asp

<%numero=request.querystring("numero")
nforo=request.querystring("nforo")
if numero="" then
response.redirect "pyr.asp"
end if
sqltxt="select * from preguntas where numero="&numero
sqltxt2="select * from respuestas where numero="&numero
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb"))

set rs=createobject("ADODB.Recordset")
rs.open sqltxt,conn%>

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Respuestas a una pregunta</title>
</head>

<body bgcolor="#CCFFCC">

<p align="center"><img border="0" src="images/titulo.jpg"></p>
<%if rs.eof then
response.write "no hay respuestas para esta pregunta"
else%>

<table border="1" width="100%">
<tr>
<td width="100%" bgcolor="#008000"><font face="Verdana" color="#FFFFFF" size="2">Pregunta
realizada por</font><font face="Verdana" color="#00FFFF" size="2"> <%=rs("autor")%>
</font><font face="Verdana" color="#FFFFFF" size="2">el dia</font><font face="Verdana" color="#00FFFF" size="2"> <%=formatdatetime(rs("fecha"),2)%></font></td>
</tr>
<tr>
<td width="100%" bgcolor="#FFFFFF"><%=rs("pregunta")%></td>
<%rs.close%>
</tr>
</table>
<%rs.open sqltxt2,conn%>
<%if not rs.EOF then
nrespu=0%>
<p>&nbsp;</p>
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<%do while not rs.EOF
nrespu=nrespu+1%>
<tr>
<td width="25%" bgcolor="#008000"><font face="Verdana" size="2"><font color="#FFFFFF">Respuesta nº </font><font color="#FFFF00"><%=nrespu%></font></font></td>
<td width="42%" bgcolor="#008000"><font face="Verdana" size="2"><font color="#FFFFFF">autor&nbsp; </font><font color="#FFFF00"><%=rs("autor")%></font></font></td>
<td width="33%" bgcolor="#008000"><font face="Verdana" size="2"><font color="#FFFFFF">el dia </font><font color="#FFFF00"><%=formatdatetime(rs("fecha"),2)%></font></font></td>
</tr>
<tr>
<td width="100%" bgcolor="#FFFFFF" colspan="3"><%=rs("respuesta")%>
</td>
</tr>
<%rs.movenext
loop
end if%>
</table>

<p> </p>

<div align="center">
<center>
<table border="0" width="61%">
<tr>
<td width="50%" bgcolor="#FFFFFF">
<p align="center"><a href="responder.asp?numero=<%=numero%>&nforo=<%=nforo%>"><font face="Verdana" size="1">Insertar
Respuesta</font></a></td>
<td width="50%" bgcolor="#FFFFFF">
<p align="center"><font face="Verdana" size="1"><a href="pyr.asp?nforo=<%=nforo%>">Volver
al Foro</a></font></td>
</tr>
</table>
</center>
</div>
<%end if%>

</body></html>

Pedro Rufo Martín

Webmaster de www.asptutor.com

Manual