Hay tres pasos siempre que se usa un objeto:
- La construccion de la instancia:
var rstcomics= Server.CreateObject("ADODB.RecordSet");
- La asignacion de valores a la instancia y su manipulacion:
rstcomics.Open(comic,cone,adOpenStatic,adCmdTable) ;
rstcomics.close();
- La destruccion de la instancia:
rstcomics = null;
Como puedes ver el metodo
close() no destruye la instancia. Simplemente cierra la conexion con la instancia del objeto Connection (tampoco cierra la BD, solo cierra esa solicitud a la BD)
Para cerrar la conexion con la BD tenemos que usar el metodo
close() de la instancia del objeto Connection (
cone.close()) ¿Qué significa esto? que no hay que volver a construir la instancia del recordset, simplemente volver a abrirla (fijate como lo hago con
rstBusqueda) Si vuelves otra vez (RECUERDA EL LOOP DEL WHILE) e intentas redeclarar rstComics te dirá que el objeto ya existe pero si encima no lo cierras te dirá que está abierto.
Por eso:
- no declares nada dentro de un bucle. Hazlo antes.
- Cierra los objetos ADO que esten dentro de un bucle pues si no seguirán abiertos y dará error.
- TEN CUIDADO CON LOS TIPOS DE DATOS
Esto:
var rstcomics= Server.CreateObject("ADODB.RecordSet");
Con el resto. Es, ademas, bueno tener juntitos todas las variables que vas a usar ya que de un vistazo puedes saber si existen o no.
Código:
switch(rstBusqueda.Fields(0).value) {
case "comic":
var comic="Select comic_titulo,comic_imagen from comics where id_comic="+ rstIntranet.Fields(0).value;
rstcomics.Open(comic,cone,adOpenStatic,adCmdTable);
Response.Write("Destacado ID: " + rstIntranet.Fields(0).value + " es comics");
Response.Write("<a href='desarrollo_comics.asp?Id="+rstcomics.Fields(0).value+"' class='desarrollo' target='_parent'>"+rstcomics.Fields(0).value+"</a>")
rstcomics.close();
break;
Y destruyelo al final:
rstcomics = null;
Un saludo