ADO: SQL LIMIT?
6 seguidores
Hola
otra pregunta de ADO: como carallo se limita una select (en una dns-less, por si tiene algo que ver)? Estoy usando:
<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 STOCKS", myCxn</code>Quiero limitar la select a 10 registros.
gandalias
Pues creo que el Motor Jet 4.0 para consultas a Access MDB no tiene contemplado LIMIT... canta error de sintaxis el la clausula SELECT.
Ahora me doy cuenta que en otro post vi lo del LIMIT y recuerdo que te comente algo sobre que tomaba nota... Tomo nota pero por lo que parece solo para MySQL... No se si SQL Server u Oracle tendrán contemplado el LIMIT...
QUI LO SA!!! A ver si alguno sabe algo más del tema...
salu!
sgiraldo
pues si gandalias, no deja acceder al Limit, cosa que el PHP + MySQL si que deja.
Para que lo necesitas hacer meddle??
Hay unos metodos del recordSet que te pueden ayudar:
- PageSize: Cada cuantos elementos quieres seleccionar, empezando desde arriba.
- AbsolutePage: Es la paginación de los recordset después de asignarles el PageSize.
Espero que te ayude en algo
gandalias
Pues si... leo...
"La Propiedad PageSize permite descomponer el RecordSet en páginas lógicas. Por ejemplo, si tuvieramos una pantalla que muestra 20 registros a la vez, podríamos establecer esta propiedad a 20. PageSize establece o devuelve el número de registros de una página lógica. El valor por defecto es 10. Esto permite sacar provecho de la propiedad AbsolutePage. Estableciendo esta propiedad, hacemos que el Recordset se desplace al primer registro de la página especificada. PageCount devuelve el número total de páginas del RecordSet... bla...bla...bla"
' Establecer tamaño de página
ars.PageSize = 20;
' Pasar a la página 3. Osea, al registro número 41
ars.AbsolutePage=3;
arf!!! Que bonita es la teoria caguenlaopaadfjbhkjhg :)
salu!
meddle
no, es porque tengo un script que usa muchas consultas, carga mucho de CPU y devuelve unas 26000 filas, y quiero probarlo con unas 10 o 20 para ver si funciona, antes de probar el grande. Por eso necesito LIMIT, lo demas no me vale.
Vaya mierda de SQL... no me lo puedo creer.
gandalias
Puf... ¿eso es el caso mejor? ;) Si vas a usar cantidades grandes de datos Access no es muy propicio para ello. De todas formas yo probaría con esos 26000 registros a ver como chuta eso. ¿es para una Intranet? ¿Todo en LAN?... Si es Intranet en LAN igual no es tan lento como crees... ¿No tienes otra opción SQL Server, Oracle...? Date cuenta de Access no es servidor de datos pero igual te hace el apaño... no se.
Por ahí estan tambien los ODBC de MySQL para que puedas crear un DSN y conectar por ahi... aunque tendrías que migrar tu base de datos previamente a MySQL. Yo no lo he probado...
http://www.mysql.com/products/myodbc/index.html
salu!
meddle
ni de coña, estamos hablando de mas de 70 tablas. la base de datos tiene que quedarse como esta: Access. Eso si, es local. Solo en mi PC, tengo instalado un IIS. La bbdd esta sin DSN, porque creo que es mas rapido.
El script que genera el excel con 26000 filas tarda unos 15 minutos en ejecutarse, de ahi que quiera probar el LIMIT con 10 o 20, para ver si genera todas las columnas correctamente :)
Gracias por todo, a ver si encontramos la solucion
txuma Plus
meddle
ni de coña, estamos hablando de mas de 70 tablas. la base de datos tiene que quedarse como esta: Access.
Hombre, las BBDD no son mi fuerte, y pregunto porque de camino a lo mejor hasta aprendo algo, pero ¿por qué no importas los datos del fichero de ACCESS en una base de datos MySQL? Hay muchos programas que te lo hacen automáticamente.
gandalias
meddle escribió:
ni de coña, estamos hablando de mas de 70 tablas. la base de datos tiene que quedarse como esta: Access.
Ya... pero es que querer hacer Formula 1 con un seiscientos... como que no...
meddle
muy sencillo, la bbdd es accesible tambien por otras personas que pueden editarla. Si lo paso a mysql debere tener siempre dos copias actualizadas y eso es casi peor que esperar a que tarde 18 minutos en generar 26000 filas y no poder usar LIMIT para las pruebas ;)
Sigo pensando que es muy raaaarooo raaaaro que SQL no tenga LIMIT :(
gandalias
...pero algo se pensará...
Si lo que quieres es ver si genera bien, capa la base de datos por ahi... Hazte una copia y quita datos... Mira a ver si puedes normalizar la base de datos. Me parecen muchas tablas 70 para estar abiertas todas en una consulta... Mira si hay tablas que tienen pocas filas y vulecalas en arrays si es posible... Puf...
[/i]
meddle
mira, lo de caparla es buena idea, me voy a generar una tabla que tenga solo 20 filas, para las prubas. fijate, lo facil que era y lo que me ha costao pensarlo a mi ;)
de hecho solo estan abiertas 9 en cada consulta, pero la bbdd completa son mas de 70, que no puedo borrar, etc. porque las puede usar otra gente. Por eso digo que me tengo que quedar con access.
orange
meddle
"muy sencillo, la bbdd es accesible tambien por otras personas que pueden editarla"
¿Y no será mejor exportar desde Access e importar desde MySQL? ... lo digo porque Access no creo que sea la mejor opción para hacer de servidor
De todas formas, y contra lo que la gente piensa, Access tiene un rendimiento más que decente en accesos de lectura ... pero para sitios mucho más grandes de lo que la gente se piensa. Donde peta pero biene s si vas a escribir
meddle
"Sigo pensando que es muy raaaarooo raaaaro que SQL no tenga LIMIT"
En esto estoy contigo, aunque ya sabes que el SQL es una cosa, y los motores de BBDD otra muy distinta .... ¿o a ver por qué no se podía hacer hasta hace poco subconsultas en MySQL?
pau
En SQLServer y MSAccess puedes utilizar :
select TOP 13 * from tuTabla
para recuperar los primeros 13 registros.
meddle
BINGO!!!!
gracies pau ;)
gandalias
Y Funciona OK para ADO
¡¡gracias por la info!!
pau
Por cierto, no se si lo soportará Access pero trabajando con SQL Server puedes especificar ...
select TOP 13 PERCENT from tutabla
Lo que implica que el motor limitará la consulta al 13% de los registros de la tabla y no a un número fijo.
meddle, igual te va mejor para tus pruebas.
meddle
tendre en cuenta, pero con 10 registros me va de lujo. un 10% serian 2600 :)
gracias de nuevo.