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

Error en codigo

Estas en el tema de Error en codigo en el foro de ASP Clásico en Foros del Web. Por favor, soy un poco novato en ASP y me da este error: ADODB.Field error '80020009' Either BOF or EOF, or the current record has ...
  #1 (permalink)  
Antiguo 27/05/2005, 12:31
 
Fecha de Ingreso: mayo-2005
Mensajes: 17
Antigüedad: 19 años
Puntos: 0
Error en codigo

Por favor, soy un poco novato en ASP y me da este error:
ADODB.Field error '80020009' Either BOF or EOF, or the current record has been deleted, Requested operation requires a current record.
micheliyo/carrito.asp, line 0

podria ayudarme alguien a terminarlo, es el tipico carro de la compra, pero no encuentro donde puede estar el error, gracias de antemano.
Un saludo!



<html>
<head><title>Carrito de la compra</title>
<script language="JavaScript">
function modificar(sel,codigo){
open("mod_carrito.asp?codigo=" + codigo + "&unidades=" + sel.value,"_parent")
}
function borrar(codigo){
open("borrar_carro.asp?codigo="+codigo,"_parent")
}
</script>
</head>
<body>
<%

vector1=session("carro").keys
vector2=session("carro").items

set conexion = Server.Createobject("adodb.connection")
strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("datos/recambios.mdb")
conexion.open strconn

response.write("<table width=100% border=0>")
for i=0 to session("carro").count-1
sql="select * from Productos where Referencia='" & vector1(i) & "'"
set rs=conexion.execute(sql)
%>
<tr><td rowspan=2><a href=producto.asp?codigo=<%=rs("Referencia")%>><im g src=fotos/<%= rs("Foto")%> height=70 border=0></a></td><td colspan=3><%=rs("Nombre")%></td></tr>
<tr><td>Precio : <%=formatnumber(rs("Precio"),2,-1,0,-1)%> € </td><td><%=rs("Plazo_entrega")%> días</td>
<td><select onchange=modificar(this,"<%=rs("Referencia")%>")>
<%
for x=1 to 30
if x=vector2(i) then
response.write("<option value=" & x & " selected>" & x)
else
response.write("<option value=" & x & ">" & x)
end if
next
%>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="" onclick="borrar('<%=rs("Referencia")%>');return false"><img src=fotos/borrar.gif border=0></a></td></tr>
<tr><td colspan=4 background=fotos/barra.gif height=10></td></tr>
<%
next
%>
</table>
</body>
</html>
  #2 (permalink)  
Antiguo 27/05/2005, 12:48
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
A golpe de vista.
Lo más seguro es que el resultado de tu consulta ( sql="select * from Productos where Referencia='" & vector1(i) & "'") no te regrese registros y como no haces ningún tipo de validación, igual trabajas con los campos pese a que estos no existen. Por eso te marca el error.
  #3 (permalink)  
Antiguo 27/05/2005, 13:17
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Asi es

Despues de esta linea tendrias que agregar la condicion si no es fin de archivo (EOF) propiedad del recordset.

set rs=conexion.execute(sql)

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #4 (permalink)  
Antiguo 27/05/2005, 13:19
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Como funciona tu pagina?, es decir, supongamos que el usuario agrega un producto al carro, ¿lo redirecciona hacia el carro para ver como quedo el carrito y modificar las cantidades o se queda en la pagina en la que compro el producto?. Por que ese error que te da es como dice Myakire, pero si el usuario agrego un producto al carro y te sigue dando ese error, no tendría que ser así, porque ya tienes al menos un registro que mostrar. A mi me daba ese error con el Explorer, por más que el carro tenía 10 productos, por lo tanto había diez registros que mostrar, me seguía dando ese error. Lo pude solucionar dandole el tipo de datos adecuado a cada variable, asi a la hora de comparar en la sentencia SQL, se comparan los mismos tipos de datos.
Osea si "vector(i)" es una cadena, puedes convertirlo a string para que compare con el tipo adecuado de datos. Si no es una cadena, lo primero que debes sacar son las comillas.
Bueno espero que te sirva de algo, yo sufri mucho con eso porque veia que estaba todo bien y no le encontraba el error, asi espero que te sirva de algo.
Saludos!
  #5 (permalink)  
Antiguo 27/05/2005, 15:18
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Bien...

Lo que menciona mario_donati tiene mucha razon, siempre que usas una comparacion o simplemente un asignacion a una variable contra el valor de un recordset debes primero convertirlo a un tipo de dato reconocido por ASP, cosas como:

x = rs("valor") 'Puede dar error
if x > rs("valor") 'Puede dar error

Entonces debes siempre convertir a su tipo de dato real como:

x = Cstr(rs("valor")) 'Es una cadena
if x > Cint(rs("valor")) 'Es un entero

Asi sucesivametne, y en cuestion de cadenas si sabes que la base de datos acepta valores NULL entonces debes tener cuidado, porque si haces:

Cstr(rs("valor")) y es un NULL, entonces te traera error, una forma rapida aunque sucia de solucionar eso es algo como: Cstr(rs("valor") & ""), pero no la recomiendo, debes validar como:

if not isNull(rs("valor")) then
x = Cstr(rs("valor"))
end if

Algo asi, es un detalle que muchas veces arroja errores que parecen inexplicables como bien apuntaba mario donati.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #6 (permalink)  
Antiguo 29/05/2005, 13:18
 
Fecha de Ingreso: julio-2004
Mensajes: 76
Antigüedad: 19 años, 11 meses
Puntos: 0
Claro, me parece que MYAKIRE tiene razon.
Debes verificar que tu consulta arroje records.... pues si no hay... te sale ese error

sql="select * from Productos where Referencia='" & vector1(i) & "'"
set rs=conexion.execute(sql)
' si esta vacìa
if rs.eof then
'aqui lo debe hacer si no hay coincidencias...
response.end
else
' aqui lo que debe hacer si hay records en la consulta
end if
__________________
Ama Martire
________________________
Hospedaje Windows & Unix Multidominio

"Si no puedes resolverlo.....evitalo"
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 15:24.