Contar registros en una tabla...otra vez yo =)

Me ayudaste muchísimo con la pregunta anterior... Necesito otra aclaración...
Necesito contar la cantidad de registros que tengo en una tabla, de modo de poder entregar un reporte.
La idea básica es ver la cantidad de reclamos que existen por área de trabajo, entonces, estoy creando un listado que me muestra los nombres de las distintas áreas, y al lado, quiero mostrar la cantidad de reclamos correspondientes.
He buscado tutoriales SQL y hablan de usar Count(*), pero no me resulta... Ocupe también un RS. RecordCount pero no me esta entregando el valor correcto (me muestra -1), ademas no se si le pueden asociar ciertos requisitos como a Count(*)...
No se cómo poder hacer esto...
¿Me entendiste?

1 respuesta

Respuesta
1
Lo que pasa es que tenés que cambiar el tipo de cursor del recordset para que éste se mueva libremente, por defecto es de solo avance.
Antes de abrir el recordset colocá:
RS.CursorType = 1
Suerte
Hola, esto es lo que tengo escrito, pero no me resulta, me dice que se esperaba un objeto...
¿Le falta algo al código?
<%
SQL = "SELECT * FROM reclamos"
set DbConn = Server.CreateObject("ADODB.Connection")
DbConn.Open("reclamos")
RS.CursorType = 1
set RS = DbConn.execute(SQL)
RS.MoveLast
total=RS.RecordCount
RS.MoveFirst
%>
Queda así:
<%
SQL = "SELECT * FROM reclamos"
set DbConn = Server.CreateObject("ADODB.Connection")
set RS = Server.CreateObject("ADODB.Recordset")
DbConn.Open("reclamos")
RS.CursorType = 1
set RS = DbConn.execute(SQL)
RS.MoveLast
total=RS.RecordCount
RS.MoveFirst
%>
Éxitos
=((
hoola....lamente seguir molestando pero sabes, use tu codigo, pero me da este error:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E24)
El conjunto de filas no admite recuperación hacia atrás.
/asp/staff/reportegeneral.asp, line 51
Probé usando los cursores tipo 1,2 y 3, pero el error iempre fue el mismo...
¿Alguna idea?
¿Te sirve si te doy la dirección para que veas el código fuente completo?
Gracias...
No me mandes la dirección, pues no puedo ver desde aquí al código ASP, éste se ejecuta en el servidor y allí queda.
Veamos diferentes puntos:
1.- No hace falta que mandes el puntero al final para que cuente los registros, una vez abierto el recordset ya puedes contar los registros que muestra el filtro.
2.- Probá con el siguiente código:
-> SQL = "SELECT * FROM reclamos"
-> set DbConn = Server.CreateObject("ADODB.Connection")
-> set RS = Server.CreateObject("ADODB.Recordset")
-> DbConn.Open DSN_de_la_base_de_datos
-> RS.CursorType = 1
-> RS.Open SQL, DbConn
-> total=RS.RecordCount
Sacale los "->", los puse para que quede claro cuales son las líneas
3.- Cuando abres la conexión (DbConn. Open) tenés que usar el DSN (data source name) que definiste en la tabla ODBC del sistema, no sé si "reclamos" lo es.
4.- He probado con el código que te mando y una base de datos mía, llevando el puntero del principio y al final y no generó ningún error. Fíjate si con el utilitario que creaste la base de datos no hay algún parámetro que te impida volver hacia atrás en los registros. De todas maneras este movimiento normalmente no es necesario.
Cualquier cosa, a tu disposición.
Cientos de miles de millones de gracias!
Al fin funcionó!
Una última duda antes de finalizar la pregunta (lastima que la nota solo llegue hasta 5...)
Para contar registros que cumplan con ciertos parámetros, por ejemplo, contar solo los registros cuya columna "estado" tenga el parámetro que yo defina (nuevo, finalizado, activo)
¿Basta con definir eso en el SELECT o tengo que hacer otra cosa?
Gracias nuevamente...
G R A C I A S ! ! ! ! !
Si, basta con definir en el SELECT, luego de WHERE, lo que quieras precisar. Para eso son los filtros, o sea, que te muestro "algo" de "esta tabla" que cumpla con "esta condición":
SELECT ... FROM ... WHERE ...
La "condición" puede ser múltiple usando los conectores lógicos "and", "or", etc.
Un abrazo
ultimo ultimo ultimo.... =D
¿Puedo evitar abrir un montón de veces la BD para hacer los conteos?
(Por ahora tengo una tabla en que cada fila me va a entregar el conteo de las distintas areas; y a cada fila le aplico una nueva conexión con el SELECT respectivo...)
¿Hay alguna manera más eficiente para hacerlo? Osea, ¿abrir una sola vez la BD y definir después los distintos tipos de conteo?
Bueno, me quede a la espera de la ultima aclaración, pero de todas formas me ayudaste muchísimo, Muchas Gracias por tu ayuda y paciencia. GRACIAS!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas