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

ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed.

Estas en el tema de ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed. en el foro de ASP Clásico en Foros del Web. hola amigos, estoy modificando una antigua aplicación y me he obcecado: ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed. lo he ...
  #1 (permalink)  
Antiguo 26/06/2014, 12:43
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed.

hola amigos,

estoy modificando una antigua aplicación y me he obcecado:
ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed.

lo he repasado mil veces y la conexión no está cerrada antes de utilizar rs

Código ASP:
Ver original
  1. abrirCON();                     //  Abrimos la CONEXIÓN.                                                    //
  2.  
  3.         var a = 1;
  4.         var b = 9;
  5.         var codigoa = '';
  6.  
  7.         for ( i=0;i<6;i++)
  8.         {
  9.             numeroa  = Math.floor ( Math.random() * ( b - a ) + a );
  10.             codigoa += String(numeroa);
  11.         }
  12.        
  13.         var tabla  = "solicita";
  14.         var fecha  = fechaHOY();
  15.         var activo = "0";
  16.        
  17.         var ncolu = "clave";
  18.         var nufila;         // Número de filas (registros devueltos por la consulta).                       //
  19.         var nucolu;         // Número de columnas (campos de la tabla devueltos).                           //
  20.         var dato;               // Array donde las filas son los registros y las columnas los campos.       //
  21.  
  22.         sqlINPREASI();                      // Insertamos.                                                      //
  23.        
  24.         solicitud = dato[0][0];
  25.         dato      = '';
  26.            
  27.         closeCONN();

Código ASP:
Ver original
  1. <%
  2.     function sqlINPREASI()
  3.     {
  4.         sqlins  = "insert into " + tabla + "(";
  5.    
  6.         for (i=1;i<=Request.Form.Count;i++)
  7.             {
  8.                 campo = String(Request.Form.Key(i));
  9.  
  10.                 if (campo.search(/^envio$|^atras$|^sia$|^undefined$/)<0)
  11.                     {
  12.                         sqlins += campo + ",";
  13.                     }
  14.             }
  15.         sqlins += "fecha,activo,codigoa";
  16.         sqlins += ") values (";
  17.  
  18.         for (i=1;i<=Request.Form.Count;i++)
  19.             {
  20.                 campo = String(Request.Form.Key(i));
  21.                 valor = String(Request.Form.Item(campo));
  22.  
  23.                 if (campo.search(/^envio$|^atras$|^sia$|^undefined$/)<0)
  24.                     {
  25.                         sqlins += "\'" + valor + "\',";
  26.                     }
  27.             }
  28.  
  29.         sqlins += "\'" + fecha + "\',\'" + activo + "\',\'" + codigoa + "\'";
  30.         sqlins += ")";
  31.        
  32.         var sqlsel = "select * from " + tabla + " where (" + ncolu + "= SCOPE_IDENTITY())";
  33.  
  34.         sql = sqlins + ";" + sqlsel;
  35.        
  36.         rs = CONN.execute(sql);
  37.        
  38.     //  Aplicamos el método getRows() a nuestro recordSet para guardarlo en un array.                   //
  39.    
  40.             if (!rs.EOF)
  41.             {
  42.    
  43.                 var consulVB  = (new VBArray(rs.getRows()));
  44.                 nufila = consulVB.ubound(2) + 1;
  45.                 nucolu = consulVB.ubound(1) + 1;
  46.            
  47.     //  Convertimos el array Visual Basic a javaScript mediante toArray().                              //
  48.            
  49.                 consulta = consulVB.toArray();
  50.  
  51.     //  Construimos un array donde el número de filas es el número de registros recuperados de      //
  52.     //  de la consulta, y el número de columnas es el número de campos de la tabla que nos trae     //
  53.     //  la consulta.                                                                                                //
  54.            
  55.                 dato = new Array(nufila);
  56.            
  57.                 for (i=0;i<nufila;i++)
  58.                     {
  59.                         var colu = new Array(nucolu);
  60.                         for (j=0;j<nucolu;j++)
  61.                         {
  62.                             colu[j] = consulta[(i*nucolu)+j];
  63.                         }
  64.                         dato[i] = colu;
  65.                     }
  66.             }
  67.             else{Response.Write("No hemos recuperado el último registro insertado");}          
  68.     // Cerramos el recorSet y lo vaciamos.                                                                  //
  69.            
  70.             rs.close();
  71.             rs=null;       
  72.     }
  73. %>
  #2 (permalink)  
Antiguo 27/06/2014, 10:09
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 20 años, 6 meses
Puntos: 27
Respuesta: ADODB.Recordset error '800a0e78' Operation is not allowed when the object

rs = CONN.execute(sql);

o es

rs = CONN.execute(sqlins);

cambiemos eos y veamos si trae otro resultado

saludos
__________________
JuanRa Pérez
San Salvador, El Salvador
  #3 (permalink)  
Antiguo 27/06/2014, 10:58
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: ADODB.Recordset error '800a0e78' Operation is not allowed when the object

hecho con sqlins realiza la inserción del registro en la tabla,
y como he comentado el resto de líneas hasta rs.close();

tengo este error:
ADODB.Recordset error '800a0e78'
Operation is not allowed when the object is closed.
/includes/sqlINPREASI.asp, line 72 : rs.close()

¿cómo es posible?

un saludo,
josé carlos.
  #4 (permalink)  
Antiguo 27/06/2014, 11:22
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: ADODB.Recordset error '800a0e78' Operation is not allowed when the object

hecho creando un recordSet el error es el mismo,

ADODB.Recordset error '800a0e78'
Operation is not allowed when the object is closed.
/includes/sqlINPREASI.asp, line 43: if (!rs.EOF)

es la siguiente línea, es imposible que esté cerrado!!

(vaya problema que tengo por que es una web que he tenido que migrar a nuevo servidor)

un saludo,
josé carlos.


Código ASP:
Ver original
  1. <%
  2.     function sqlINPREASI()
  3.     {
  4.         sqlins  = "insert into " + tabla + "(";
  5.    
  6.         for (i=1;i<=Request.Form.Count;i++)
  7.         {
  8.             campo = String(Request.Form.Key(i));
  9.  
  10.             if (campo.search(/^envio$|^atras$|^sia$|^undefined$/)<0)
  11.             {
  12.                 sqlins += campo + ",";
  13.             }
  14.         }
  15.         sqlins += "fecha,activo,codigoa";
  16.         sqlins += ") values (";
  17.  
  18.         for (i=1;i<=Request.Form.Count;i++)
  19.         {
  20.             campo = String(Request.Form.Key(i));
  21.             valor = String(Request.Form.Item(campo));
  22.  
  23.             if (campo.search(/^envio$|^atras$|^sia$|^undefined$/)<0)
  24.             {
  25.                 sqlins += "\'" + valor + "\',";
  26.             }
  27.         }
  28.  
  29.         sqlins += "\'" + fecha + "\',\'" + activo + "\',\'" + codigoa + "\'";
  30.         sqlins += ")";
  31.        
  32.         sqlsel = "select * from " + tabla + " where (" + ncolu + "= SCOPE_IDENTITY())";
  33.  
  34.         sql = sqlins + ";" + sqlsel;
  35.  
  36.         rs = Server.CreateObject("ADODB.RecordSet");
  37.         var adOpenKeySet = 1;
  38.         rs.Open(sql,CONN,adOpenKeySet);
  39.         // rs = CONN.execute(sqlins);
  40.        
  41.     //  Aplicamos el método getRows() a nuestro recordSet para guardarlo en un array.                   //
  42.    
  43.         if (!rs.EOF)
  44.         {
  45.             var consulVB  = (new VBArray(rs.getRows()));
  46.             nufila = consulVB.ubound(2) + 1;
  47.             nucolu = consulVB.ubound(1) + 1;
  48.            
  49.     //  Convertimos el array Visual Basic a javaScript mediante toArray().                              //
  50.            
  51.             consulta = consulVB.toArray();
  52.  
  53.     //  Construimos un array donde el número de filas es el número de registros recuperados de      //
  54.     //  de la consulta, y el número de columnas es el número de campos de la tabla que nos trae     //
  55.     //  la consulta.                                                                                                //
  56.            
  57.             dato = new Array(nufila);
  58.            
  59.             for (i=0;i<nufila;i++)
  60.             {
  61.                 var colu = new Array(nucolu);
  62.                 for (j=0;j<nucolu;j++)
  63.                 {
  64.                     colu[j] = consulta[(i*nucolu)+j];
  65.                 }
  66.                 dato[i] = colu;
  67.             }
  68.         }
  69.         else
  70.         {
  71.             Response.Write("No hemos recuperado el último registro insertado");
  72.         }          
  73.  
  74.     // Cerramos el recorSet y lo vaciamos.                                                                  //
  75.            
  76.         rs.close();
  77.         rs=null;       
  78.     }
  79. %>

Etiquetas: allowed, columna, object, sql, valor
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 17:56.