Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASP Clásico (http://www.forosdelweb.com/f15/)
-   -   RecordSet RecordCount vs SQL Count (http://www.forosdelweb.com/f15/recordset-recordcount-vs-sql-count-575463/)

i_e_s27 13/04/2008 03:36

RecordSet RecordCount vs SQL Count
 
Bien... la pregunta es mas bien sencilla... queria saber si es lo mismo

Código:


Set RecordSet = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT nombre FROM tabla WHERE id = " & Request.QueryString("id")
RecordSet.Open strSQL, adoCon, adOpenStatic, adLockOptimistic

Cantidad = cInt(RecordSet.RecordCount)

If Cantidad > 0 Then
Response.Write(RecordSet("nombre"))
Else
Response.Write("Sin resultados")
End If

...que...

Código:


Set RecordSet = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT COUNT(nombre) AS sql_cantidad, nombre FROM tabla WHERE id = " & Request.QueryString("id")
RecordSet.Open strSQL, adoCon, adOpenStatic, adLockOptimistic

Cantidad = cInt(RecordSet("sql_cantidad"))

If Cantidad > 0 Then
Response.Write(RecordSet("nombre "))
Else
Response.Write("Sin resultados")
End If


Cual es mas eficiente? Son lo mismo? Alguna recomendacion?

Gracias!

u_goldman 13/04/2008 08:38

Re: RecordSet RecordCount vs SQL Count
 
Hola i_e_s27, el primer bloque de código abre un recordset con ciertos campos, y utilizas una de las propiedades del rs para contar sus registros, en tanto que el segundo, realmente solo devuelves el contador, por lo tanto los demás campos no están disponibles.

Bajo ciertos tipos de cerrojo, la propiedad recordcount del recordset no funciona, aunque no soy de la idea de inventar el agua tibia, yo te recomendaría que si te funciona el recordcount, ve por ese camino, de lo contrario, yo trataría de crear un arreglo a partir del recordser mediante getRows y contar su número de índices, esto equivaldría a un recordcount, y tendrías disponibles, los campos y el contador.

Saludos

i_e_s27 13/04/2008 16:32

Re: RecordSet RecordCount vs SQL Count
 
Cita:

Iniciado por u_goldman (Mensaje 2361820)
Hola i_e_s27, el primer bloque de código abre un recordset con ciertos campos, y utilizas una de las propiedades del rs para contar sus registros, en tanto que el segundo, realmente solo devuelves el contador, por lo tanto los demás campos no están disponibles.

De hecho abro el campo "nombre" en ambos ejemplos, porque independientemente de la cantidad de registros, necesito saber el valor del nombre.
El tema de cuantos registros tengo es para para saber si mi consulta entrego uno o mas resultados; porque si no entrego ningun resultado y yo pongo Response.Write(RecordSet("nombre")) me va a tirar error.


Cita:

Iniciado por u_goldman (Mensaje 2361820)
Bajo ciertos tipos de cerrojo, la propiedad recordcount del recordset no funciona, aunque no soy de la idea de inventar el agua tibia, yo te recomendaría que si te funciona el recordcount, ve por ese camino, de lo contrario, yo trataría de crear un arreglo a partir del recordser mediante getRows y contar su número de índices, esto equivaldría a un recordcount, y tendrías disponibles, los campos y el contador.

Lo de los cerrojos ya lo sabia, lo de getRows no; ahora me pongo a averiguar sobre ello.

Pero en realidad mi pregunta venia a las cuestiones de Cual es la mejor practica? o Cual es mas eficiente?

Gracias por responder u_g! :-)

u_goldman 13/04/2008 22:24

Re: RecordSet RecordCount vs SQL Count
 
Cita:

Iniciado por i_e_s27 (Mensaje 2362263)
De hecho abro el campo "nombre" en ambos ejemplos, porque independientemente de la cantidad de registros, necesito saber el valor del nombre.
El tema de cuantos registros tengo es para para saber si mi consulta entrego uno o mas resultados; porque si no entrego ningun resultado y yo pongo Response.Write(RecordSet("nombre")) me va a tirar error.


Lo de los cerrojos ya lo sabia, lo de getRows no; ahora me pongo a averiguar sobre ello.

Pero en realidad mi pregunta venia a las cuestiones de Cual es la mejor practica? o Cual es mas eficiente?

Gracias por responder u_g! :-)

Es cierto disculpa, es que estaba en estado inconveniente :borracho: en realidad no te sabría decir cuál es más eficiente, me quiero imaginar que la opción donde obtienes de base de datos el número de registros, pues no necesitas la capa intermedia que calcula este número, aunque aún así tiene el inconveniente de que el producto cartesiano resultante de esta consulta es grande, pero recuerda que con pocos datos y poca concurrencia cualquier cosa funcionará, así que si es una aplicación chica-mediana, cualquier opción te debe venir bien.

De lo contrario podrías probar con algún "stress tool" y no te olvides de contarnos las conclusiones.

:adios:

i_e_s27 13/04/2008 23:53

Re: RecordSet RecordCount vs SQL Count
 
Pues en realidad si es una aplicacion chica, pero uno siempre trata de hacer las cosas lo mejor posible, no? Ademas de querer aprender un poco mas y aplicar los conocimientos... Es una cuestion cuasi perfeccionista mia jajajaja :borracho:

Tan solo pregunte por si alguno tenia la repuesta en mente, o a mano. Tampoco es cosa de que se pongan a averiguar ni a hacer tests de stress comparativos. :patada:

Gracias por tus respuestas u_g siempre tan atento! :si:

Myakire 14/04/2008 07:21

Re: RecordSet RecordCount vs SQL Count
 
Bueno, supongo es válido para ASP también, peeeeero, utilizar el método RecordCount (por que por lo menos en Delphi es un método no una propiedad), hace que el cliente (el IIS en este caso) solicite todos los registros del query (fetchall) al servidor de base de datos. Si vas a hacer algo con ellos, pues a lo mejor se justifica, pero si no y solo quieres saber el número de filas que cumplen cierta condición, pues regresar el COUNT a mi parecer es lo correcto.

Mis $0.02 como dirían algunos

JuanRAPerez 14/04/2008 07:50

Re: RecordSet RecordCount vs SQL Count
 
interesante post :)

Cita:

Iniciado por i_e_s27 (Mensaje 2362263)
... El tema de cuantos registros tengo es para para saber si mi consulta entrego uno o mas resultados; porque si no entrego ningun resultado y yo pongo Response.Write(RecordSet("nombre")) me va a tirar error...

para evitar el error manejalo antes

si es eof o bof entonces

response.write "no hay registros que mostrar..."
response.end

(y evitas que la pagina se siga cargando o saltas esta consulta)

suerte

i_e_s27 14/04/2008 12:19

Re: RecordSet RecordCount vs SQL Count
 
Gracias Myakire por tu leccion de teoria, muy interesante :) Que mas puedo decir? Me gusta aprender jijiji

Cita:

Iniciado por JuanRAPerez (Mensaje 2362889)
interesante post :)

Lo mismo opino!! :)

Cita:

Iniciado por JuanRAPerez (Mensaje 2362889)
para evitar el error manejalo antes

si es eof o bof entonces

response.write "no hay registros que mostrar..."
response.end

(y evitas que la pagina se siga cargando o saltas esta consulta)

Mmmm me habia olvidado del BOF y EOF, esa es buena tambien. Yo me malacostumbre a si RecordCount > 0

Bueno, de a poco voy limando mis asperezas :borracho:

JuanRAPerez 14/04/2008 12:21

Re: RecordSet RecordCount vs SQL Count
 
igual podrias probar

Cita:

if RecordCount > 0 then
'trae datos
else
'no trae datos
end if
suerte


La zona horaria es GMT -6. Ahora son las 00:57.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.