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

Contar Registros

Estas en el tema de Contar Registros en el foro de ASP Clásico en Foros del Web. Hola a todos !!!! Existe alguna función para contar los registros que devuelve una consulta????? Gracias de antemano!!!!...
  #1 (permalink)  
Antiguo 14/04/2003, 04:47
 
Fecha de Ingreso: noviembre-2002
Mensajes: 223
Antigüedad: 21 años, 6 meses
Puntos: 1
Contar Registros

Hola a todos !!!!
Existe alguna función para contar los registros que devuelve una consulta?????
Gracias de antemano!!!!
  #2 (permalink)  
Antiguo 14/04/2003, 05:22
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años, 2 meses
Puntos: 0
Puedes probar a hacer un SELECT Count FROM (Tu consulta) AS Consulta1

Suponiendo que quieras hacerlo sobre SQL Server
  #3 (permalink)  
Antiguo 14/04/2003, 05:34
 
Fecha de Ingreso: noviembre-2002
Mensajes: 223
Antigüedad: 21 años, 6 meses
Puntos: 1
Sí, Teri, muchas gracias. Quiero hacerlo en SQL Server.

Consulta1 sería una variable??

Lo pregunto porque me interesa almacenar el reultado para escribir el número de registros.

Gracias por la ayuda !!!!!
  #4 (permalink)  
Antiguo 14/04/2003, 08:30
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Hola Liz26:

Para contar los registros que tienes en una fila puedes utilizar 2 métodos:

- Count():
Ésta cuenta los registros de una fila ya sean datos o numeros, sólo el número de registros que hay, uno a uno.
Sería su estructura así

<%
Dim Conn, RS, SQL
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "......"
SQL = "Select Count(CAMPO) AS numero FROM tabla "
Set RS = Conn.Execute(SQL)
%>
NOTA: AS numero significa que guarda el total de registros contados en la variable que defines, este caso numero.
Para despúes llamar y ver el numero de registros sería:
<% response.write numero %>

Y con el Max():

Actúa de forma parecida, se dirige al número más elevado de los registros únicamante númericos de una fila. (si hay otra cosa que no son numéricos no vale).
Éste vale también si en tu tabla tienes una fila de clave autonumerica... (tipica de acces).

Estructura:

<%
Dim Conn, RS, SQL
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "......"
SQL = "Select Max(CAMPO) AS numero FROM tabla "
Set RS = Conn.Execute(SQL)
%>
NOTA: AS numero significa que guarda el total de registros contados en la variable que defines, este caso numero.
Para despúes llamar y ver el numero de registros sería:
<% response.write numero %>

Espero haberte ayudado.

Saludos.
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #5 (permalink)  
Antiguo 14/04/2003, 08:33
Avatar de Juansan  
Fecha de Ingreso: abril-2001
Mensajes: 203
Antigüedad: 23 años, 1 mes
Puntos: 0
creoq eu ahy algo mas facil.
Despues de ejecutar la consulta, usar la propiedad recordcount del recordset y listo.

rs.recordcount.

Saludos
  #6 (permalink)  
Antiguo 14/04/2003, 08:36
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Sí, tienes razón, si en la consulta que realiza trabaja con RecordSet también es una posiblildad que se me olvidó mencionar.

Si la consulta sólo es para saber el numero de registros unicamente (contador visitas...etc) lo mejor es una de las otras 2.

Salu2!
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #7 (permalink)  
Antiguo 16/04/2003, 00:59
 
Fecha de Ingreso: noviembre-2002
Mensajes: 223
Antigüedad: 21 años, 6 meses
Puntos: 1
Muchísimas gracias a los dos por vuestras respuestas !!!!!!!!!!!!!!!!!!!

Con recordcount no me funciona.
Tengo una consulta que guardo en un registro:

SQLQuery = "SELECT Autor, Titulo, ISBN FROM Biblioteca "& SQLQuery & " ORDER BY Autor, Titulo"

Set oRs = oConn.Execute(SQLQuery)

y al escribir <%response.write oRs.recordcount%>

el resultado es siempre -1.

¿Sabéis por qué puede ser?


Última edición por Liz26; 16/04/2003 a las 02:20
  #8 (permalink)  
Antiguo 16/04/2003, 11:30
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
A ver:

http://www.aspfacil.com/vertruco.asp?id=3

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #9 (permalink)  
Antiguo 16/04/2003, 17:51
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Bueno Lizz...

Para utilizar éste último comando "RecordCount" debes utilizar el tipo de conexión a la base de datos RECORDSET.
Es un poco diferente al que utilizas, es diferente.

Léete este link y comprenderás:

http://www.aspfacil.com/articulos/040401.asp

Si utilizas el tipo de conexión que mostras en el post, sin recordset y por lo tanto:
set rs = conn.execute(SQL)...
no podrás utilizar RecordCount

Si utilizas una conexión con recordset declarandola:
Set Conn=Server.Createobject("ADODB.Connection")
RS.Open SQL, Conn
Si podrías utilizarlo...

Suerte, leiendo el link unas veces se entiende
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...

Última edición por Fr@Nc3$c0; 16/04/2003 a las 18:13
  #10 (permalink)  
Antiguo 16/04/2003, 17:54
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 22 años, 4 meses
Puntos: 1
Tienes la solucion del recordcount aqui :http://www.aspfacil.com/vertruco.asp?id=3 como ya habia comentado u_goldman

El problema es que un cursor de tipo adCursorForwardOnly (valor 0) solo permite moverse hacia adelante. Y RecordCount lo que hace es ir al final del recordset y volver al principio. Si no puede volver devolverá un -1.

Así que lo que hay que hacer es poner un CursorType que permita moverse adelante y atrás por el Recordset.
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #11 (permalink)  
Antiguo 16/04/2003, 17:57
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Maestro, pero si no utiliza RecordSet... eso no sería valido no?
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #12 (permalink)  
Antiguo 16/04/2003, 18:01
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 22 años, 4 meses
Puntos: 1
No entiendo la pregunta
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #13 (permalink)  
Antiguo 16/04/2003, 18:15
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Me refiero a que si el no utiliza RECORDSET para su conexión no podrá utilizar ese comando que está destinado a dicho comando, ¿no?

Según he entendido de sus posts, no utiliza RECORDSET

Set Conn=Server.Createobject("ADODB.Connection")
RS.Open.......

Abre la conexion de otra manera, sin recordset.

Saludos.
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #14 (permalink)  
Antiguo 16/04/2003, 18:35
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 22 años, 4 meses
Puntos: 1
RS.Open, para poder hacerlo ha declarado en alguna parte el objeto recordset.
Ademas no hay forma de recorrer una tabla si no es con el.
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #15 (permalink)  
Antiguo 17/04/2003, 08:16
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Hay alternativas para una conexión RecordSet, éstas son simples y por ejemplo no se puede hacer tantas cosas como con ellas o tan fáciles. Ejemplo de paginar y etc.

Saludos.
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #16 (permalink)  
Antiguo 17/04/2003, 12:09
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 22 años, 4 meses
Puntos: 1
Perdona Fr@Nc3$c0, pero ¿que alternativas son esas?
Que yo sepa la unica forma de recorrer las filas de una tabla (los registros) es usando el objeto recorset aunque despues almacenes las variables usando GETROWS u otro tipo de matriz y cierres la conexion para liberar recursos.
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #17 (permalink)  
Antiguo 17/04/2003, 17:09
Avatar de Henry Zapata  
Fecha de Ingreso: abril-2001
Mensajes: 125
Antigüedad: 23 años, 2 meses
Puntos: 0
Hola:

Creo que luego de esta discusión el uso del recordcount quedará clarisimo para todos.

Aqui hay un articulo mas a fondo sobre eso:

http://www.vb-faq.com/Articles/Greener/reccount.asp

Lo que francisco dice es que podemos obtener una instancia de un RECORDSET de varias formas:

- a traves de un connection.execute
- command.open
- instanciandolo uno mismo con el set rs = server.createobject("adodb.recordset")

Para poder usar el recordcount tenemos que instarcialo y definir su comportamiento a través de sus atributos (Esta forma tambien es válida, porque un cursor cliente usa por defecto el tipo static).

set cn = server.CreateObject("Adodb.Connection")
set rs = server.CreateObject("Adodb.Recordset")
cn.open
rs.CursorLocation = 1 ' Cursor de cliente
rs.Open "select * from tabla",cn
Response.Write "Numero de registros" & rs.RecordCount

saludos
  #18 (permalink)  
Antiguo 17/04/2003, 18:33
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Maestro, sencillas conexiones a las bases de datos que me han permitido mostrar cantidad de valores sin crear un objeto recordset.

he hecho listados sin él simplemente utilizando...

Set Conn = ....
Open Conn ....
Set RS = Conn.EXECUTE( " Select * FROM tabla ")

y aquí utilizando...

if RS.EOF... o propiedades así.

Yo antes de que me lo dijeras tu utilizaba este tipo de conexiones. Son sencillas, se puede lograr también las cosas pero con más tiempo de carga puesto que supone más codigo.
Para contar los registros realizaba otra consulta...

RS2 = Conn.Execute (" Select Max(XXX) ...")

Comprendes?

Saludos.
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #19 (permalink)  
Antiguo 21/04/2003, 01:50
 
Fecha de Ingreso: noviembre-2002
Mensajes: 223
Antigüedad: 21 años, 6 meses
Puntos: 1
Muchísimas gracias a todos por vuestra ayuda, me ha quedado clarísimo.

Ahora defino el recorset de la siguiente forma:

oRs.CursorType = 1
oRs.Open SQLQuery, oConn (en vez de execute)

Y funciona perfectamente.

He leído que para más de 5000 registros, es preferible no utilizar recordcount. Mi BBDD tiene más de 5000 registros, ¿creéis que es conveniente que lo utilize?

MIL GRACIAS A TODOS POR VUESTRAS APORTACIONES !!
  #20 (permalink)  
Antiguo 21/04/2003, 03:23
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 22 años, 4 meses
Puntos: 1
Fr@Nc3$c0

Set RS = Conn.EXECUTE( " Select * FROM tabla ")
RS=recordset

Da lo mismo como lo instancies no hay forma de leer una tabla sin recordset.
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #21 (permalink)  
Antiguo 21/04/2003, 03:38
 
Fecha de Ingreso: noviembre-2002
Mensajes: 223
Antigüedad: 21 años, 6 meses
Puntos: 1
entendido
Muchas gracias!
Un saludo a todos y buen día

Última edición por Liz26; 21/04/2003 a las 03:41
  #22 (permalink)  
Antiguo 21/04/2003, 06:05
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 22 años, 4 meses
Puntos: 1
si tienes mas de 5000 registros te conviene paginar los resultados por disminuir el tiempo de carga:

http://aspfacil.com/articulos/verarticulo.asp?id=41
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #23 (permalink)  
Antiguo 21/04/2003, 06:12
 
Fecha de Ingreso: noviembre-2002
Mensajes: 223
Antigüedad: 21 años, 6 meses
Puntos: 1
ok maestro, estoy en ello. Primero quería comprobar que funcionara.
Ahora voy con la páginación, a ver que tal se me da ...
  #24 (permalink)  
Antiguo 21/04/2003, 13:14
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
maestro, no lo veo como tú dices...

No declaras el object recorset por lo cual no lo utilizas, lo que me posteas en el ultimo mensaje sería la conexion sencilla.

Esto es el recordset :
Set RS = Server.CreateObject("ADODB.Recordset")

Esto no es Recorset:

Set RS = Conn.EXECUTE( " Select * FROM tabla ")'aqui esta abierta y realizada la conexión, has leido datos o mostrados...etc.
RS=recordset ---->>>> ??¿¿ yo no puse eso en el mensaje.
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #25 (permalink)  
Antiguo 21/04/2003, 13:32
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98

Que yo sepa solo es una forma de instanciar un recordset, finalmente un recordset no es mas que un objeto que contiene una colección de datos, sin importar como lo instancies...estás trabajando con un rs

Bueno, eso digo yo...
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 21:10.