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

Como se usa EOF - BOF con Getrows?

Estas en el tema de Como se usa EOF - BOF con Getrows? en el foro de ASP Clásico en Foros del Web. Hola Gente, Ayuda, help , F1: Estoy usando Getrows para hacer una cansulta de una BD Access y al hacer una consulta por un campo ...
  #1 (permalink)  
Antiguo 05/05/2003, 15:18
 
Fecha de Ingreso: marzo-2003
Ubicación: Av. Grau 1190
Mensajes: 122
Antigüedad: 21 años, 3 meses
Puntos: 3
Como se usa EOF - BOF con Getrows?

Hola Gente, Ayuda, help , F1:

Estoy usando Getrows para hacer una cansulta de una BD Access y al hacer una consulta por un campo especifico (id_cat), mi problema es que cuando no encuentra un registro que cumpla la consulta me devuelve una pagina donde me da error, lo que no sucede usando recordst (BOF - EOF).

Como hacer para que al no encontrar registro alguno que cumpla una consulta salga el siguiente texto "No hay registros para esta Consulta" o entodo caso que se redireccione al index

Quiza existe otra forma de hacer lo mismo, igual se los agradezco

Para mas referencia aqui el error:

=======
The page cannot be displayed
There is a problem with the page you are trying to reach and it cannot be displayed.

--------------------------------------------------------------------------------

Please try the following:

Open the www.infouni.net home page, and then look for links to the information you want.
Click the Refresh button, or try again later.

Click Search to look for information on the Internet.
You can also see a list of related sites.




HTTP 500 - Internal server error
Internet Explorer
==========
  #2 (permalink)  
Antiguo 05/05/2003, 15:20
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 22 años, 7 meses
Puntos: 0
y como usas el .eof y el .bof?

lo normal deberia ser.

if recordset.eof and recordset.bof then
response.redirect "pagina_control.asp"
else
'lo que quieras
...
....
end if
  #3 (permalink)  
Antiguo 05/05/2003, 15:40
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
ampliando un poco más la sugerencia de bakan, sería algo así incluyendo el getrows:


if recordset.eof and recordset.bof then
response.write "No hay registros para esta Consulta"
else
recordset.getrows
'acá laburás el GertRows
end if
__________________
...___...
  #4 (permalink)  
Antiguo 05/05/2003, 16:08
 
Fecha de Ingreso: marzo-2003
Ubicación: Av. Grau 1190
Mensajes: 122
Antigüedad: 21 años, 3 meses
Puntos: 3
Si les entiendo, aqui les mando el codigo fuente:
<%
Dim CAT
CAT = "1"
if (Request("shk") <> "") then CAT = Request("shk")
' shk = id_ricura : es el identificador para consultas
%>
<%
Dim oConn_ricura, rs_ricura, SQL_ricura, ricura
Dim id_ricura, nom_ricura, smoll_ricura, large_ricura, fecha
id_ricura = 0
nom_ricura = 1
smoll_ricura = 2
large_ricura =3
fecha = 4

SQL_ricura="SELECT * FROM ricuras"
SQL_ricura = "SELECT * FROM ricuras WHERE id_ricura = " + Replace(CAT, "'", "''")
set oConn_ricura = Server.CreateObject("ADODB.Connection")
oConn_ricura.Open MM_pcte_STRING
set rs_ricura = oConn_ricura.Execute(SQL_ricura)
ricura = rs_ricura.GetRows
'Liberamos los objetos ya!!
rs_ricura.Close
set rs_ricura = nothing
oConn_ricura.Close
set oConn_ricura = nothing
%>
Para ver el resultado coloco lo siguiente:
<% if ricura.eof and ricura.bof then %>

No hay registros para esta consulta

<% else%>

<img src="<%=ricura(large_ricura, 0)%>" border="0">

<%end if %>

Estaria bien asi?

Ahora donde va el .EOF, en este caso seria ricura.eof ?

Como se puede ver necesito el valor de shk que pude ser 1,2, etc que obviamente esta en la BD y lo obtengo con un Request ahora bien el problema es cuando ese valor no este en la BD, y se genera un error el la pagina

Segun el codigo q me dieron donde va ?
========
if recordset .eof and recordset.bof then
response.write "No hay registros para esta Consulta"
else
recordset.getrows
'acá laburás el GertRows
end if
=====
Nota: Para este caso recordset = ricura ?
  #5 (permalink)  
Antiguo 05/05/2003, 17:13
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 22 años, 7 meses
Puntos: 0
HAZLE CASO A DAZ. USA EL GETROWS DESPUES DE CONSULTAR SI VIENE O NO CON DATOS EL RECORDSET..AH Y CIERRA TUS OBJETOS Y RECORDSET DESPUES DE USARLOS..

Código:
SQL_ricura = "SELECT * FROM ricuras WHERE id_ricura = " + Replace(CAT, "'", "''")
set oConn_ricura = Server.CreateObject("ADODB.Connection")
oConn_ricura.Open MM_pcte_STRING
set rs_ricura = oConn_ricura.Execute(SQL_ricura)
'Liberamos los objetos ya!!
%>
Para ver el resultado coloco lo siguiente:
<% if rs_ricura.eof and rs_ricura.bof then %>

No hay registros para esta consulta

<% else

ricura = rs_ricura.GetRows


'no se que mas le agregaras
%>

<img src="<%=ricura(large_ricura, 0)%>" border="0">

<%end if %>

rs_ricura.Close
set rs_ricura = nothing
oConn_ricura.Close
set oConn_ricura = nothing
 
  #6 (permalink)  
Antiguo 05/05/2003, 17:21
 
Fecha de Ingreso: marzo-2003
Ubicación: Av. Grau 1190
Mensajes: 122
Antigüedad: 21 años, 3 meses
Puntos: 3
Gracias por la respuesta, pero practicamente es usar recordset , no veo mucho la utilidad del Getrows.

Lo que me interesa es que la BD este libre el mayor tiempo posible.

No conocen otra forma de hacer lo mismo ?

Si la hay

Gracias
  #7 (permalink)  
Antiguo 05/05/2003, 17:52
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 22 años, 7 meses
Puntos: 0
ya entiendo tu problema...

se cae tu sentencia cuando no trae registros

ricura = rs_ricura.GetRows

probaste asi?

ricura = rs_ricura.GetRows()

obviamente sin usar recordset y pasando todo a un arreglo bidimensional ahorrarias harto tiempo por peticion...yo nunca lo he usado pero si al usar la propiedad .GetRows() cuando no vienen registros se cae...no veo para ke sirve entonces...solo sirve cuando vienen registro?...raro no.... averigua mas sobre esta propiedad...
  #8 (permalink)  
Antiguo 05/05/2003, 18:31
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Me parece que hay una confusión... Al usar GetRows SIEMPRE se hace uso de un objeto recordset. La gracia del GetRows es liberar la BD lo antes posible. Por lo tanto, debés cerrar los objetos recordset y conection lo antes posible y no al final del código.
Tu código, sin probar si funciona (eso te lo dejo a vos), debería quedar más o menos así:


<%
Dim CAT
CAT = "1"
if (Request("shk") <> "") then CAT = Request("shk")
' shk = id_ricura : es el identificador para consultas
%>
<%
Dim oConn_ricura, rs_ricura, SQL_ricura, ricura
Dim id_ricura, nom_ricura, smoll_ricura, large_ricura, fecha
id_ricura = 0
nom_ricura = 1
smoll_ricura = 2
large_ricura =3
fecha = 4

'''''''SQL_ricura="SELECT * FROM ricuras" ' ESTÁ DE MÁS
SQL_ricura = "SELECT * FROM ricuras WHERE id_ricura = " + Replace(CAT, "'", "''")
set oConn_ricura = Server.CreateObject("ADODB.Connection")
oConn_ricura.Open MM_pcte_STRING
set rs_ricura = oConn_ricura.Execute(SQL_ricura)

if ricura.eof and ricura.bof then
Response.Write "NO HAY REGISTROS"
Else

ricura = rs_ricura.GetRows

'Liberamos los objetos ya!! (porque el objeto recordset no viene vacío y, además, ya lo asignamos a un array con GetRows)
rs_ricura.Close
set rs_ricura = nothing
oConn_ricura.Close
set oConn_ricura = nothing
%>

<img src="<%=ricura(large_ricura, 0)%>" border="0">

<%end if %>




Ahora te digo que es medio absurdo usar GetRows para sólo un registro... Generalmente se utiliza para recordsets de varios o muchos registros. Para ello no te compliques la vida y directamente manipulá el recordset normalmente
  #9 (permalink)  
Antiguo 05/05/2003, 21:22
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 22 años, 7 meses
Puntos: 0
wa...yo lo decia por este articulo...
usa el getrows sin necesidad de recorrer el recordset..pero weno...haganle caso al maestro

http://www.webexperto.com/articulos/...lo.php?cod=100
  #10 (permalink)  
Antiguo 05/05/2003, 22:06
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Bakanzipp, me parece que estamos hablando de lo mismo... aunque no entiendo tu tono en lo referente a “maestro” (que no lo soy y nunca lo seré... ya te consultaré en privado a qué te referías)

Si te fijás, en una parte del enlace que nos pasaste, dice:

set rs = oConn.Execute(SQL)
miTabla = rs.GetRows
'Liberamos los objetos ya!!
rs.Close
set rs = nothing
oConn.Close
set oConn = nothing


O sea que si... indefectiblemente está creando un objeto RECORDSET (set rs...) para poder acceder al GetRows

En ese mismo artículo, hace un bucle FOR para recorrer el array (el resultado del GetRows). En el código de nuestro compañero, jamás aparece un “do...loop” o un “for ...next” al momento de desplegar los registros. Por lo tanto está accediendo a sólo un registro: el primero (aunque el RS, y por consiguiente el GetRows, tenga más de uno). Por ello me parece “casi al pedo” intentar minimizar los tiempos de acceso a la BD usando getrows sabiendo que sólo se va a mostrar un registro.

salud
__________________
...___...
  #11 (permalink)  
Antiguo 06/05/2003, 08:08
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 22 años, 7 meses
Puntos: 0
por esa parte entiendo tu aseveracion...
lo que no me cuadra es que si verdaramente se usa el getrows para no tener que recorrer el recordset y liberar inmediatamente la conexion con la b de datos...no va al caso de que falle cuando no existan registros de retorno...

es ilogico usarlo para rescatar un registro...en eso te encuentro la razon.

y nuestro amigo con el problema ke opina?
  #12 (permalink)  
Antiguo 06/05/2003, 10:14
 
Fecha de Ingreso: marzo-2003
Ubicación: Av. Grau 1190
Mensajes: 122
Antigüedad: 21 años, 3 meses
Puntos: 3
Hola Gente, les agradezco a todos por su interes.

Una de las utilizades de Getrows y precisamente liberar la BD en el menor tiempo posible.

En cuanto al problema voya probar lo que dice dazuaga.

Cuando hablo de Getrows no es para q me devuelva un registro, solo lo indique para que sea mas comprensible.

Voya probar este codigo:

'-------------------
<%
Dim CAT
CAT = "1"
if (Request("shk") <> "") then CAT = Request("shk")
' shk = id_ricura : es el identificador para consultas
%>
<%
Dim oConn_ricura, rs_ricura, SQL_ricura, ricura
Dim id_ricura, nom_ricura, smoll_ricura, large_ricura, fecha
id_ricura = 0
nom_ricura = 1
smoll_ricura = 2
large_ricura =3
fecha = 4

SQL_ricura="SELECT * FROM ricuras"

SQL_ricura = "SELECT * FROM ricuras WHERE id_ricura = " + Replace(CAT, "'", "''")
set oConn_ricura = Server.CreateObject("ADODB.Connection")
oConn_ricura.Open MM_pcte_STRING
set rs_ricura = oConn_ricura.Execute(SQL_ricura)

if ricura.eof and ricura.bof then
Response.Write "NO HAY REGISTROS"


' que opinan los expertos eh

Else

ricura = rs_ricura.GetRows

'Liberamos los objetos ya!! (porque el objeto recordset no viene vacío y, además, ya lo asignamos a un array con GetRows)
rs_ricura.Close
set rs_ricura = nothing
oConn_ricura.Close
set oConn_ricura = nothing

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

for I = 0 to UBound(ricura,2)
'Abrimos una nueva fila
Response.Write("<TR>")
Response.Write("<TD>" & ricura(large_ricura, I) & "</TD>")
Response.Write("<TD>" & ricura(nom_ricura, I) & "</TD>")
Response.Write("<TD>" & ricura(id_ricura, I) & "</TD>")
Response.Write("</TR>")
next

end if
%>

  #13 (permalink)  
Antiguo 06/05/2003, 10:24
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 22 años, 7 meses
Puntos: 0
se ve bien
  #14 (permalink)  
Antiguo 06/05/2003, 11:30
 
Fecha de Ingreso: marzo-2003
Ubicación: Av. Grau 1190
Mensajes: 122
Antigüedad: 21 años, 3 meses
Puntos: 3
Hola a todos, acabo de probar el codigo, solo un detalle:

if ricura.eof and ricura.bof then
cambiar por :
if rs_ricura.eof and rs_ricura.bof then

cuando hago la consulta mediante:

.../index.asp?shk=1 (puede ser 1,2,3,4,5,6. los q estan en la BD)
no hay problema devuelve los registros.

Para shk=1500 (q no esta en la BD) devuelve el mensaje de "no hay registros".

Hasta aqui todo bien, pero fui un poco mas alla, probe con ../index.asp?shk =1a
(q obviamente no esta en la BD pero es un dato alfanumerico) , y cuan sopresa
hace explicito el campo de consulta (id_ricura), como sigue:


=====
Microsoft JET Database Engine error '80040e14'

Error de sintaxis (falta operador) en la expresión de consulta 'id_ricura = 1a'.

/formi/ricuras/index.asp, line 21

=====

En este caso deveria devolver que "no hay registros" pero como ven no es asi.

Alguien sabe cual es problema?

Última edición por elsabio; 06/05/2003 a las 11:33
  #15 (permalink)  
Antiguo 06/05/2003, 13:16
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 22 años, 7 meses
Puntos: 0
las validaciones tienes que hacerlas via javascript...para no permitir ingresar datos que no correspondan con el tipo de tu base de datos...
  #16 (permalink)  
Antiguo 06/05/2003, 14:48
 
Fecha de Ingreso: marzo-2003
Ubicación: Av. Grau 1190
Mensajes: 122
Antigüedad: 21 años, 3 meses
Puntos: 3
Muy bien y gracias.

Tambien se me orcurre que al recuperar el dato con Request(shk=1a) podria separ a los numeros y a las letras. de forma que ingresara a la consulta, el dato que se necesite.

Gracias a todos.
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 22:34.