ASP: contar filas (resultado de select)?
3 seguidores
Hola,
me estoy peleando con el ASP (no ASP.NET). ¿Como coño se hace para contar cuantas filas devuelve una select? No quiero hacer un bucle porque se que son unas 25000 y paso de gastar recursos.
Gracias.
gandalias
Si has creado un ADODB.RecordSet la propiedad RecordCount te devuelve el número de registros.
numreg=tabla.RecordCount;
salú!
meddle
no te sigo, soy bastante novato en ASP, me lio bastante con la documentacion, ya sabes, entre VB y ASP en si. Bueno, al grano, no te he entendido bien. Tengo lo siguiente:
<code>Set myCxn = Server.CreateObject("ADODB.Connection")
myCxn.ConnectionString = " Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("bbdd/FBapp.mdb") & ";"
myCxn.Open
set rs=Server.CreateObject("ADODB.recordset")
rs.Open "Select * from SPECIES", myCxn
//response.write(rs.RecordCount) 'devuelve -1
//response.write(rs.length) 'devuelve error: El objeto no acepta esta propiedad o método: 'rs.length'</code>
Gracias por cualquier ayuda
black
... lo miro cuando termine mi puta entrega, te debo unas cuantas... :)
gandalias
No se... A mi tampoco me chuta con el RecordCount. Como no sea que RecordCount devuelve nuemero de filas al aplicar un Filter...
Se me ocurre que los cuentes con SQL (a mi si que me ha funcionado)
rs.Open "SELECT COUNT(*) FROM SPECIES;",myCxn
Response.Write(rs(0))
salu2!
meddle
ya, pero es que luego tengo que usar la consulta, o sea que asi deberia usar dos consultas y lo veo inutil. veo que es chunguillo, eh? con lo fcil que deberia ser. puto MS ;)
gandalias
Bueno...
Creo que el tema esta en la forma de abrir el RecordSet.
Echa un vistazo
http://www.desarrolloweb.com/faq/172.php
salu!
meddle
pues luego lo pruebo, gracias. si eso no funciona me parecerá raro que no haya nada como el mysql_num_rows de php :)
veremos
gandalias
Bueno... Lo hay... RecordCount. Lo que ocurre es que al abrir el RecordSet puedes hacerlo de muchas formas.
Los ADO.RecordSet tienen una propiedad llamada CursorLocation que puede tomar los valores 1 (asUseServer) o 2 (asUseClient). Además se tiene otra porpiedad llamada CursorType que puede tomar valores de 1 a 4 (adOpenForwardOnly, adOpenKeySet, adOpenDynamic, adOpenStatic)
Dependiendo de estos dos parametros en el Recordset, la propiedad RecordCount estará disponible o no. Ve jugando con estos parametros
Yo de todas formas tiro de Dreamweaver para realizar las conexiones. Mas o menos así...
Set tabla = Server.CreateObject("ADODB.Recordset")
tabla.ActiveConnection = "dsn=mdp;"
tabla.Source = "SELECT * FROM operaciones"
tabla.CursorType = 3
tabla.CursorLocation = 2
tabla.LockType = 1
tabla.Open()
... y tirando de dsn... Después ir jugando con las propiedades... Como te digo tal y como esta ahora en ese ejemplo a mi si que me funciona RecordCount.
Pero, bueno, un poco rollo si que es y la verdad es que creo que donde este PHP... ;)
meddle
ya pero no me interesa hacerlo con dns, lo quiero dns.less, es para un servidor exclusivamente local. como voy a ir reemplazando la bbdd cada X tiempo por una de actual, no me interesa tener que ir haciendo la dns cada vez. Quiero borrar y meter la nueva, y que todo siga rulando igual.
joer, vaya lio. me quedo con el loop.
gandalias
Prueba con
Set tabla = Server.CreateObject("ADODB.Recordset")
tabla.ActiveConnection = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=D:\WEBASP\MDP.MDB"
tabla.Source = "SELECT * FROM operaciones"
tabla.CursorType = 3
tabla.CursorLocation = 2
tabla.LockType = 1
tabla.Open()
Como ves he cambiado el parametro ActiveConnection...
Puedes ver mas en
http://www.aspfacil.com/articulos/278009.asp
salu2!
meddle
bingo, prueba superada ;)
gracias
meddle
una pregunta mas: usando esa conexion, ¿como lo hago para usar varias tablas en distintas queries? parece poco reusable, no? por l oque intuyo (puedo estar equivocado) para cada tabla/query voy a necesitar un ActiveConnection distinto... ???????
gandalias
Bueno. ActiveConnection en este caso lo hemos declarado como propiedad del RecordSet por lo que no hay una instancia de ADODB.Connection así definida...
Pero tambien podemos declarar una conexión y abrir RecordSets con esa conexión...
<%
Dim oconn,tabla1,tabla2
Set oconn = Server.CreateObject("ADODB.Connection")
Set tabla1 = Server.CreateObject("ADODB.Recordset")
Set tabla2 = Server.CreateObject("ADODB.Recordset")
'Abrimos la conexion
oconn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=D:\WEBASP\MDP.MDB"
' RecordSet 1
tabla1.CursorType = 3
tabla1.CursorLocation = 2
tabla1.LockType = 1
tabla1.Open "SELECT * FROM operaciones",oconn
' RecordSet 2
tabla2.CursorType = 3
tabla2.CursorLocation = 2
tabla2.LockType = 1
tabla2.Open "SELECT * FROM tenedores",oconn
%>
salu!
meddle
GRACIAS GRACIAS GRACIAS
A TUS PIES ;)
gandalias
na hombre... Además, no me tientes... Que estoy muy verde de CSS y XHTML... :)
meddle
bueno hoy va a ser el dia que mas preguntas por hora haga y menos respuestas por hora de, pero cualquier otro dia me tientas :)