Foros del Web » Programando para Internet » ASP Clásico »

Problema objeto abierto

Estas en el tema de Problema objeto abierto en el foro de ASP Clásico en Foros del Web. Hola estoy intentando hacer dos accesos a una base de datos pero tengo problemas por que me dice que la operacion no es valida si ...
  #1 (permalink)  
Antiguo 05/08/2008, 05:28
 
Fecha de Ingreso: diciembre-2007
Mensajes: 179
Antigüedad: 16 años, 5 meses
Puntos: 0
Problema objeto abierto

Hola estoy intentando hacer dos accesos a una base de datos pero tengo problemas por que me dice que la operacion no es valida si el objeto esta abierto, he intentado cerrar la conexion donde pensaba que podia ser pero nada y la verdad no tengo mucha idea xk he tratado siempre con conexiones muy basicas y ahora me veo obligada a tener dos sentencias sql. Os pongo el codigo haber si me echais una manilla

Código:
	var cadenaConexion = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" +Server.MapPath("basedatos/bd.mdb");
			var sql,result= Server.CreateObject("ADODB.Recordset");
			

			try{
			conexion= Server.CreateObject("ADODB.Connection");//inicializamos la variable de conexion
			conexion.open(cadenaConexion);//establecemos la comunicacion con la BD
			}
			catch(e){//tratamiento de posible errores
			Response.Write ("<h2>Error1:</h2>");
			Response.Write ("<b>" + e.description + "</b>");
			Response.End();
			}
	
			try{
			var nick = Session("nick");
			
			var sql = "SELECT codigo FROM pedido WHERE nick='"+nick+"'";
					
                            conexion.BeginTrans();
							result.Open(sql, conexion);
							
					
		if(result.eof)
		{		
			
			Response.Write("Usted no ha seleccionado ningun producto en Animalandia.com")
			Response.Write("<h4 align=center ><button onclick='history.back()'>Volver</button></h4>");
			Response.End();
		}
		else
		{
		while (result.eof == false)
		{
		var codigo = result("codigo");
		
		var sql ="SELECT * FROM articulos WHERE codigo="+codigo+"";
		
				conexion.BeginTrans();
				result.Open(sql, conexion);
				
		var seccion = result("seccion");
		%>
		<input type="text" name="txtense" id="txtense" size="25%" readonly value="<%Response.write(seccion)%>">
		
			<%	result.movenext();
			}		
			}
	%>
	
			
		
		
				
					<center>
					<input type="button" value="Ver Cesta" onclick="pedido.asp"/>
					<button onclick='history.back()' style="margin-left:20%">Seguir Comprando</button></center>
					<%
							
							
							
							
							}
							
					catch(e){//posible fallo en la BD
				Response.Write ("<h2 align=center >Error2:</h2>");
				Response.Write ("<b>" +e.description+ "</b>");
				Response.Write("<h4 align=center ><button onclick='history.back()'>Volver</button></h4>");
				Response.End();
			}				
		
								
			
			
			
		%>
Gracias
  #2 (permalink)  
Antiguo 05/08/2008, 05:59
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Respuesta: Problema objeto abierto

Hola,

Estas intentando cargar el mismo recordset, el cual ya esta abierto:

Código:
    while (result.eof == false)
        {
        var codigo = result("codigo");
        
        var sql ="SELECT * FROM articulos WHERE codigo="+codigo+"";
        
                conexion.BeginTrans();
                result.Open(sql, conexion);
                
        var seccion = result("seccion");
        %>
        <input type="text" name="txtense" id="txtense" size="25%" readonly value="<%Response.write(seccion)%>">
        
            <%    result.movenext();
            }        
            }
Instancia un nuevo recordset (result2, por ejemplo) y asignale la sentencia SQL

Código:
        
    var result2= Server.CreateObject("ADODB.Recordset");
        while (result.eof == false)
        {
        var codigo = result("codigo");
        
        var sql ="SELECT * FROM articulos WHERE codigo="+codigo+"";
        
                conexion.BeginTrans();
                result2.Open(sql, conexion);
                
        var seccion = result2("seccion");
        %>
        <input type="text" name="txtense" id="txtense" size="25%" readonly value="<%Response.write(seccion)%>">
        
            <%  
                    result2.close();  
                    result.movenext();
            }        
            
            }


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #3 (permalink)  
Antiguo 05/08/2008, 06:06
 
Fecha de Ingreso: diciembre-2007
Mensajes: 179
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problema objeto abierto

Resuelto el problema. Gracias

Otra cosilla, veras ahora al hacerlo me dice que no se pueden realizar mas transacciones y solo me muestra 4, eso es normal???
Tengo que cambiar alguna opcion o algo.
  #4 (permalink)  
Antiguo 05/08/2008, 06:16
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Respuesta: Problema objeto abierto

Elimina las lineas que abren las transacciones (las "conexion.BeginTrans();") Access solo deja abrir hasta 5 y como no las cierras con "conexion.CommitTrans()" te salta el warning. A fin de cuentas, no requieres transacciones: Las transacciones son interesantes cuando estan implicadas varias tablas para modificar/borrar/insertar (consultas de actualización) y solo haces consultas de seleccion (los SELECT).


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #5 (permalink)  
Antiguo 05/08/2008, 06:24
 
Fecha de Ingreso: diciembre-2007
Mensajes: 179
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problema objeto abierto

Listo. Muchas Gracias
  #6 (permalink)  
Antiguo 05/08/2008, 18:55
 
Fecha de Ingreso: diciembre-2007
Mensajes: 179
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problema objeto abierto

Bueno de nuevo vuelvo a tener problemas del estilo al anterior intento solucionar como el anterior pero sera que cada vez manejo mas sentencias y me desbordan, haber si alguien puede decirme xk me da el dichoso error de "no se puede hacer la operacion xk el objeto esta abierto"

Os pongo el codigo:

Código:
			var cadenaConexion = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" +Server.MapPath("basedatos/bd.mdb");
					var sql,result,sql1= Server.CreateObject("ADODB.Recordset");
					var result2 = Server.CreateObject("ADODB.Recordset");
		try{
				 var conexion= Server.CreateObject ("ADODB.Connection");
                	 conexion.Open ("Provider=Microsoft.Jet.OLEDB.4.0;"+" Data Source = "+Server.MapPath ("basedatos/bd.mdb"));
                	 }
                	 catch (e){
                	 Response.Write ("Error1:");
                	 Response.Write ("<b>" + e.description + "</b>");
                	 Response.End();}
			
				try{
				
					var nick = Session("nick");
			
					var sql = "SELECT codigo FROM pedido WHERE nick='"+nick+"'";
					
                            result.Open(sql, conexion);
							
		while (result.eof == false)
		{
		
		var codigo = result("codigo");
		
		 var sql ="SELECT * FROM articulos WHERE codigo="+codigo+"";
        
                
                result2.Open(sql, conexion);
				
        			var articulo = result2("articulo");
					var titulo = result2("titulo");
					var descripcion = result2("descripcion");
					var precio = result2("precio");
					
					var sql1 = "INSERT INTO historial(nick,articulo,titulo,descripcion,precio,fecha_pedido) VALUES ('"+nick+"','"+articulo+"','"+titulo+"','"+descripcion+"','"+precio+"', Date())";
						    							
							conexion.Execute(sql1);
							conexion.commitTrans();
							result2.close();
							result.movenext();
							}
							
							Response.write("Su pedido ha sido tramitado, en breve lo recibira en su domicilio a contrareembolso");
							
					var sql = "DELETE * FROM pedido WHERE nick = '"+nick+"'";
					
							conexion.Execute(sql);
								
								}
							
					catch(e){//posible fallo en la BD
				Response.Write ("<h2 align=center >Error2:</h2>");
				Response.Write ("<b>" +e.description+ "</b>");
				Response.Write("<h4 align=center ><button onclick='history.back()'>Volver</button></h4>");
				Response.End();
			}				
		
		
		
		%>
Imagino que sera una chorrada pero llevo una hora cambiando cositas haber si sale y nada. Mil Gracias
  #7 (permalink)  
Antiguo 06/08/2008, 09:23
 
Fecha de Ingreso: diciembre-2007
Mensajes: 179
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problema objeto abierto

Ya consegui arreglarlo, en realidad creo kel codigo esta bien pero el IIS coge a veces muchas perlas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:36.