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

Execute

Estas en el tema de Execute en el foro de ASP Clásico en Foros del Web. Explico lo que quiero hacer, a continuación pongo lo que he escrito y finalmente os muestro el error para ver si alguien me puede echar ...
  #1 (permalink)  
Antiguo 29/12/2004, 03:20
 
Fecha de Ingreso: diciembre-2004
Mensajes: 68
Antigüedad: 20 años, 4 meses
Puntos: 0
Execute

Explico lo que quiero hacer, a continuación pongo lo que he escrito y finalmente os muestro el error para ver si alguien me puede echar un cablecillo.

Lo que quiero hacer es que a partir de una Base de Datos, acceder al último registro y tomar el valor autonumérico que se encuentra en "Id_book". Una vez que tengo eso, guardo en el registro siguiente los valores que sean y en el campo "nombre_nuevo" quiero guardar el valor autonumérico que recogí sumado uno.


CODIGO
----------------------------------------------------->
----------------------------------------------------->
set oConn= Server.CreateObject("ADODB.Connection")
set rs= Server.CreateObject("ADODB.Recordset")

oConn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("DATOS.mdb")

SQL="SELECT * FROM modelos"

'Se abre el Recordset: el 0 es el cursor adForwardOnly y el 2 es el cerrojo adLockPssimistic
rs.Open SQL, oConn, 0, 2


'--------------------------
set objRS=rs.Execute(SQL)
oConn.MoveLast
num=oConn("Id_book")
nombre_nuevo="modelo"&num+1&".jpg"


Response.Write("NOMBRE NUEVO: <b>" & nombre_nuevo & "</b>")
---------------------------

rs.Fields("nombre_nuevo")=nombre_nuevo

----------------------------------------------------->
----------------------------------------------------->


ERROR:

Me sale el siguiente error en esta línea: "set objRS=rs.Execute(SQL)"

Error de Microsoft VBScript en tiempo de ejecución error '800a01b6'

El objeto no acepta esta propiedad o método: 'Execute'



Gracias por adelantado
  #2 (permalink)  
Antiguo 29/12/2004, 03:39
 
Fecha de Ingreso: octubre-2004
Ubicación: Andorra!! Andorra!!!
Mensajes: 39
Antigüedad: 20 años, 6 meses
Puntos: 0
Eso creo que es por la manera en la que abres el recordset.
set rs= Server.CreateObject("ADODB.Recordset")
rs.Open SQL, oConn, 0, 2
set objRS=rs.Execute(SQL)


yo abro siempre de esta manera y no me da problemas, siempre y cuando no use los metodos de recordcount y demás :

set oConn=server.CreateObject("ADODB.connection")
oConn.open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("DATOS.mdb")
set rs=oConn.Execute(SQL)


Otra cosa, lo que me he fijado es que despues de crear el recordset, llamas al metodo movelast y demás pero del objeto oConn... creo que es al objeto rs (en el caso que lo hagas como te he descrito aqui arriba) al que tienes que llamar los metodos ;)
El codigo te quedaría asi :

set oConn= Server.CreateObject("ADODB.Connection")
oConn.open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("DATOS.mdb")

SQL="SELECT * FROM modelos"

set rs=oConn.Execute(SQL)

'--------------------------
rs.MoveLast
num=rs("Id_book")
nombre_nuevo="modelo"&num+1&".jpg"


Response.Write("NOMBRE NUEVO: <b>" & nombre_nuevo & "</b>")
'---------------------------

rs.("nombre_nuevo")=nombre_nuevo
rs.Update 'Esta linea no estaba... xD

set rs=nothing
set oConn=nothing

'-----------------------------------------------------
'-----------------------------------------------------


Un saludo!

Última edición por Ramondi; 29/12/2004 a las 03:45 Razón: Para diferenciar el codigo y hacerlo mas leible
  #3 (permalink)  
Antiguo 29/12/2004, 03:52
 
Fecha de Ingreso: diciembre-2004
Mensajes: 68
Antigüedad: 20 años, 4 meses
Puntos: 0
Si, me había equivocado al escribirlo, lo que quería poner era objRS.MoveLast en vez de oConn.MoveLast.

He comprabado tu modificación y me en esta línea:"rs.MoveLast" el siguiente error:

Microsoft OLE DB Provider for ODBC Drivers error '80040e24'
El conjunto de filas no admite recuperación hacia atrás.

Por eso había creado antes el objRS de esta manera
set objRS=rs.Execute(SQL)
objRS.MoveLast

Se te ocurre alguna solución??
  #4 (permalink)  
Antiguo 29/12/2004, 04:06
 
Fecha de Ingreso: octubre-2004
Ubicación: Andorra!! Andorra!!!
Mensajes: 39
Antigüedad: 20 años, 6 meses
Puntos: 0
Una posible solución sería hacer un
While not rs.eof do
rs.movenext
Wend

en vez de rs.movelast...
Y sino, volviendo al metodo que tu usaste para abrir el recordset, seria :

set oConn= Server.CreateObject("ADODB.Connection")
oConn.open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("DATOS.mdb")

SQL="SELECT * FROM modelos"

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, oConn, adOpenStatic, adLockPessimistic, adCmdTable
'Como le has pasado ya SQL, no te hace falta hacer un execute

if not rs.eof then 'Se me había olvidado comprovar si no tiene registros..
rs.MoveLast
num=rs.Fields("Id_book")
nombre_nuevo="modelo"&num+1&".jpg"


Response.Write("NOMBRE NUEVO: <b>" & nombre_nuevo & "</b>")
'---------------------------

rs.Fields("nombre_nuevo")=nombre_nuevo
rs.Update 'Esta linea no estaba... xD

end if
rs.close
set rs=nothing
set oConn=nothing
  #5 (permalink)  
Antiguo 29/12/2004, 05:19
Avatar de PMP
PMP
 
Fecha de Ingreso: febrero-2003
Ubicación: Chacabuco - Buenos Aires
Mensajes: 214
Antigüedad: 22 años, 2 meses
Puntos: 1
Perdón que me meta. Yo lo haría de la siguiente forma.

Código:
<%
Set oRs = Server.CreateObject("ADODB.Recordset")
oRs.ActiveConnection = "Driver={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("DATOS.mdb")
oRs.Source = "SELECT TOP 1 Id_book, modelo FROM modelos ORDER BY id_book DESC"
oRs.CursorType = 1
oRs.LockType = 3
oRs.Open

Dim nombre_nuevo
nombre_nuevo = "modelo1.jpg"

If NOT oRs.EOF AND NOT oRs.BOF then
	nombre_nuevo="modelo" & (oRs("Id_book") + 1) & ".jpg"
end if

oRs.AddNew
oRs("modelo") = nombre_nuevo
oRs.Update

Response.Write("NOMBRE NUEVO: <b>" & nombre_nuevo & "</b>")

oRs.Close(): Set oRs=Nothing
%>
  #6 (permalink)  
Antiguo 29/12/2004, 05:52
 
Fecha de Ingreso: diciembre-2004
Mensajes: 68
Antigüedad: 20 años, 4 meses
Puntos: 0
Al final, lo que he hecho para que me funcione es acceder 2 veces a la base de datos. La primera para averiguar el valor de Id_book y la segunda para insertar el valor del siguiente registro. La primera parte quedaría así:

set oConn=server.CreateObject("ADODB.connection")
oConn.open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("DATOS.mdb")
SQL="SELECT * FROM modelos"
set rs=oConn.Execute(SQL)

while NOT rs.EOF
num=rs("Id_book")
rs.movenext
wend

oConn.Close
set rs=nothing
set oConn=nothing
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 11:57.