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

La operación no está permitida si el objeto está abierto

Estas en el tema de La operación no está permitida si el objeto está abierto en el foro de ASP Clásico en Foros del Web. Hola, estoy haciendo una actualizacion de datos a una tabla y me manda el error de La operación no está permitida si el objeto está ...
  #1 (permalink)  
Antiguo 01/08/2005, 11:06
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 19 años, 9 meses
Puntos: 0
Pregunta La operación no está permitida si el objeto está abierto

Hola, estoy haciendo una actualizacion de datos a una tabla y me manda el error de La operación no está permitida si el objeto está abierto, por lo que cierro el objeto antes de cerrar mi ciclo while, pero entonces me envia el error de "El valor de BOF o EOF es True, o el actual registro se eliminó; la operación solicitada requiere un registro actual."


<%
Dim rsFact, sqlFact
Dim rsFact_numRows
Set rsFact = Server.CreateObject("ADODB.Recordset")
rsFact.ActiveConnection = MM_ConFactura_STRING
rsFact.Source = "SELECT * FROM dbo.Factura WHERE Bandera='" & 0 & "'"
rsFact.CursorType = 0
rsFact.CursorLocation = 2
rsFact.LockType = 1
rsFact.Open()

rsFact_numRows = 0
%>
<%
Dim cmdUpDate, sqlUp
Set cmdUpDate = Server.CreateObject("ADODB.Command")

Dim rsCMKArt
Dim rsCMKArt_numRows
Set rsCMKArt = Server.CreateObject("ADODB.Recordset")

dim vardesc
While (NOT rsFact.EOF) %>
<%
vardesc= rsFact("Descripcion")
rsCMKArt.ActiveConnection = MM_ConD84_STRING
rsCMKArt.Source = "SELECT * FROM dbo.Articulos Where Descripcion = '" & vardesc & "'"
rsCMKArt.CursorType = 0
rsCMKArt.CursorLocation = 2
rsCMKArt.LockType = 1
rsCMKArt.Open()

rsCMKArt_numRows = 0
response.Write(rsCMKArt("Clave"))

sqlUp = "UPDATE Factura Set ClaveArtCMK= ' " & rsCMKArt("Clave") &" ' Where Articulo=' " & rsFact("Articulo") & " ' "
Set cmdUpDate = Server.CreateObject("ADODB.Command")
cmdUpDate.ActiveConnection = MM_ConFactura_STRING
cmdUpdate.CommandType = 1
cmdUpDate.CommandText = sqlUp
cmdUpDate.Execute
%>
<%
rsCMKArt.MoveNext()
' rsCMKArt.Close
rsFact.MoveNext()
Wend
%>
  #2 (permalink)  
Antiguo 01/08/2005, 11:55
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
¿Tienes el access abierto?
  #3 (permalink)  
Antiguo 01/08/2005, 12:58
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 19 años, 9 meses
Puntos: 0
te refieres al rs abierto? si, si lo tengo abierto, pero si lo cierro entonces me manda el mensaje de EOF, tienes idea de por que? o mas bien como puedo solucionarlo, lo que tengo que hacer es recorrer el rs para ir actualizando el campo de clave.
  #4 (permalink)  
Antiguo 01/08/2005, 13:06
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
El problema es que por cada vuelta de "rsFact", abrís el recordset "rsCMKArt". Y, como bien dice el error: "La operación no está permitida si el objeto está abierto" (osea que no podés abrir algo que ya está abierto).

Y... bueno, no entendí del todo tu código, pero la verdad que no me gusta nada... "me suena" a que lo mismo lo podés hacer de otra manera.. sin anidar esos recordsets.
__________________
...___...
  #5 (permalink)  
Antiguo 01/08/2005, 13:25
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 19 años, 9 meses
Puntos: 0
Gracias por tu respuesta, pero no se como poner el codigo de tal forma para no anidar los recordsets, o como podría poner el abrir el rsCMKArt fuera de mi ciclo While?
ya que mi intencion es comparar 2 datos iguales que estan guardados en diferentes BD, alguna sugerencia?
Gracias
  #6 (permalink)  
Antiguo 01/08/2005, 17:41
 
Fecha de Ingreso: julio-2005
Mensajes: 128
Antigüedad: 19 años, 9 meses
Puntos: 0
Listo ya quedo,
trate de arreglarlo un poco con tus comentarios pero no supe como mejorarlo :) pero con lo que hice me funciono, aunque si saben de como hacer el recorrido de rs de diferente forma se los agradecere, ya que por lo que veo voy a utilizar mucho esto.
gracias.
El codigo quedo asi:
<%
Dim rsFact, sqlFact
Dim rsFact_numRows
Set rsFact = Server.CreateObject("ADODB.Recordset")
rsFact.ActiveConnection = MM_ConFactura_STRING
rsFact.Source = "SELECT * FROM Factura WHERE Bandera='" & 0 & "'"
rsFact.CursorType = 0
rsFact.CursorLocation = 2
rsFact.LockType = 1
rsFact.Open()

rsFact_numRows = 0
%>
<%
Dim cmdUpDate, sqlUp
Set cmdUpDate = Server.CreateObject("ADODB.Command")

Dim rsCMKArt
Dim rsCMKArt_numRows

dim vardesc
While (NOT rsFact.EOF)

vardesc= rsFact("Descripcion")
response.Write(vardesc)
response.Write("<BR>")
Set rsCMKArt = Server.CreateObject("ADODB.Recordset")
rsCMKArt.ActiveConnection = MM_ConD84_STRING
rsCMKArt.Source = "SELECT * FROM Articulos Where Descripcion = '" & TRIM(rsFact("Descripcion")) & "'"
rsCMKArt.CursorType = 0
rsCMKArt.CursorLocation = 2
rsCMKArt.LockType = 1
rsCMKArt.Open()


if Not rsCMKArt.EOF then
sqlUp = "UPDATE Factura Set ClaveArtCMK= ' " & rsCMKArt("Clave") &" ' Where Descripcion='" & TRIM(rsFact("Descripcion")) & " ' "
cmdUpDate.ActiveConnection = MM_ConFactura_STRING
cmdUpdate.CommandType = 1
cmdUpDate.CommandText = sqlUp
cmdUpDate.Execute
else
response.Write("no encontro el articulo en la tabla articulos")
response.Write("<BR>")
sqlUp = "UPDATE Factura Set ClaveArtCMK= ' 00000 ' Where Descripcion='" & TRIM(rsFact("Descripcion")) & " ' "
cmdUpDate.ActiveConnection = MM_ConFactura_STRING
cmdUpdate.CommandType = 1
cmdUpDate.CommandText = sqlUp
cmdUpDate.Execute

end if

rsFact.MoveNext
Wend %>
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 08:19.