¿Como limitar registros en una consulta?

385 views
Skip to first unread message

Alejandro Garcia G.

unread,
Dec 2, 2016, 4:28:56 PM12/2/16
to Comunidad de Visual Foxpro en Español
Señores, tengo un cursor con el que vengo trabajando (VFP) y necesito hacer una consulta en bloque, es decir, extraer por ejemplo, los primeros 100 registros, luego desde el 101 hasta el 200 y así hasta el maximo de registros de la tabla cursora. Los limites ya los tengo pero no he podido hacer la consulta para que me los traiga, tengo lo siguiente:

SELECT * FROM tabla LIMIT inicio, fin INTO CURSOR prueba

Acá me sale error, ¿como puedo hacer?

ZeRoberto

unread,
Dec 2, 2016, 4:36:27 PM12/2/16
to publicesvfoxpro
MySQL o Tablas Nativas

Tienes que ir contando las paginas

lnBloque = 100
lnPagina = 1

lnEmpieza = (lnBloque * lnPagina) + 1

SELECT * FROM tabla LIMIT ?lnEmpieza, ?lnBloque

Saludos

ZeRoberto

unread,
Dec 2, 2016, 4:37:20 PM12/2/16
to publicesvfoxpro
Me equivoque, es asi

MySQL o Tablas Nativas

Tienes que ir contando las paginas

lnBloque = 100
lnPagina = 1

lnEmpieza = ((lnBloque * lnPagina) - lnBloque) + 1

SELECT * FROM tabla LIMIT ?lnEmpieza, ?lnBloque

Saludos

Alejandro Garcia G.

unread,
Dec 2, 2016, 4:44:03 PM12/2/16
to Comunidad de Visual Foxpro en Español
Tengo esto:

lnAlias = ALIAS()
SELECT * FROM &lnAlias LIMIT 1, 30

Y me da un error: Command contains unrecognized phrase/keyword. Si lo hago sin el LIMIT... me muestra bien la consulta.

ZeRoberto

unread,
Dec 2, 2016, 4:44:44 PM12/2/16
to publicesvfoxpro
Son tablas nativas? osea DBF?

ZeRoberto

unread,
Dec 2, 2016, 4:46:30 PM12/2/16
to publicesvfoxpro
En las tablas nativas no existe el LIMIT solo el TOP pero no te mermite poner desde que posicion quieres que lo haga

ZeRoberto

unread,
Dec 2, 2016, 4:49:36 PM12/2/16
to publicesvfoxpro
Lo que tendrias que hacer es

SELECT * FROM Tabla TOP lnBloque WHERE RECNO() > lnEmpieza INTO CURSOR dbResultado

Saludos


Alejandro Garcia G.

unread,
Dec 2, 2016, 5:02:01 PM12/2/16
to Comunidad de Visual Foxpro en Español
Gracias por las respuestas, Sí, son tablas nativas DBF, he tratado de usar las instrucciones dadas por ti pero me sigue saliendo el mismo error. Es mas, mirando la ayuda para usar TOP debo colocar un orden, y así lo hice pero nada.

ZeRoberto

unread,
Dec 2, 2016, 5:05:59 PM12/2/16
to publicesvfoxpro
Prueba cambiando esto SET ENGINEBEHAVIOR 80

ZeRoberto

unread,
Dec 2, 2016, 5:06:59 PM12/2/16
to publicesvfoxpro
Pero porque quieres usar esto si el VFP uses o no SQL - SELECT te va a traer toda la base de datos, entonces esto casi no tiene sentido

Alejandro Garcia G.

unread,
Dec 2, 2016, 5:31:36 PM12/2/16
to Comunidad de Visual Foxpro en Español
Bien gracias, ya creo que me ha dado estoy haciendo una prueba. El detalle es el sigueinte, debo exportar a Excel una consulta que me trae mas de 3 millones de registros, como sabes Excel (2007 y superior) acpecta hasta 1048536 filas. Por eso debo hacer/buscar la manera de partir mi consulta para ir grabando archivo por archivo hasta el maximo de regsitros de mi consulta.

Creo que ya logre hacer algo, termino y les comento.


Víctor Hugo Espínola Domínguez

unread,
Dec 2, 2016, 5:42:41 PM12/2/16
to publice...@googlegroups.com
Close Databases All
Open Database (_Samples + "Northwind\Northwind")

= Paginar("Customers", "CustomerId", "Country, City", 16, 1, "curPaginado")

Function Paginar(                    ;
        tcTabla  As String    ;
      , tcClave  As String            ;
      , tcOrden  As String            ;
      , tnFilPag As Integer            ;
      , tnNroPag As Integer         ;
      , tcCursor As String )

Local lnExcluir As Integer, lcSqlSelect, lcWhere As String

lnExcluir = (m.tnNroPag - 1) * m.tnFilPag

Text To m.lcWhere  Textmerge Noshow Pretext 15
<<m.tcClave>> Not In (
                      Select  Top <<Transform(lnExcluir)>> <<m.tcClave>>
                          From <<m.tcTabla>>
                          Order By <<m.tcOrden>>)
Endtext

Text To m.lcSqlSelect Textmerge Noshow Pretext 15
        Select  Top <<Transform(m.tnFilPag)>> *
            From <<m.tcTabla>>
            Where <<Iif(m.tnNroPag = 1, "1=1", m.lcWhere)>>
            Order By <<m.tcOrden>>
            Into Cursor <<m.tcCursor>>
Endtext

Execscript(m.lcSqlSelect)


Saludos,
Víctor.
Lambaré - Paraguay.

ZeRoberto

unread,
Dec 2, 2016, 11:54:55 PM12/2/16
to publicesvfoxpro
Buen trabajo Sr. Victor excelente como siempre


Saludos
Reply all
Reply to author
Forward
0 new messages