In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

MySQLQuery

Foro público de Xailer en español
Responder
Andres Hocevar
Mensajes: 141
Registrado: Mar Sep 18, 2007 3:30 pm

MySQLQuery

Mensaje por Andres Hocevar »

Hola Foro
Tengo la version 2.4.4, y cuando compile una aplicacion que funcionaba en versiones anteriores (2.0) ya no lo hace, el problema es el siguiente:
ESTE CODIGO NO FUNCIONA
mSQL := "SELECT * FROM tabla LIMIT 0,20"
WITH OBJECT ::oSQLQuery1
:Close()
:oDataSource := AppData:oCon
:Cargo := oSQL
:cSelect := mSQL
:Open()
IF !:lOpen
CMNJ("Error No Abrio el Query")
ENDIF
IF :RecCount() = 0
MsgInfo("0 Registros ENCONTRADOS")
// ESTA CONECTADO Y NO HAY REGISTROS????
ENDIF
END
ESTE CODIGO SI FUNCIONA
//mSQL := "SELECT * FROM tabla LIMIT 0,20"
//EN EL IDE SE ASIGNO LA PROPIEDAD cSELECT
WITH OBJECT ::oSQLQuery1
:Close()
:oDataSource := AppData:oCon
:Cargo := oSQL
//:cSelect := mSQL
:Open()
IF !:lOpen
CMNJ("Error No Abrio el Query")
ENDIF
IF :RecCount() = 0
MsgInfo("0 Registros ENCONTRADOS")
// ESTA CONECTADO Y NO HAY REGISTROS????
ENDIF
END
En resumen si en tiempo de ejecucion cambio el valor de la propiedad "cSelect" el query abre (Open=.t.) pero siempre devuelve 0 registros!!!
Gracias a Todos y feliz comienzo de semana.
Andres Hocevar
Mensajes: 141
Registrado: Mar Sep 18, 2007 3:30 pm

MySQLQuery

Mensaje por Andres Hocevar »

Bueno nadie se anima a responder
Haciendo pruebas tambien ocurre este comportamiento en el IDE si colocamos por decir
cSelect := "select * from tabla"
y abrimos el query lOpen:=.T.
funciona bien
luego cambiamos
cSelect := "select * from tabla limit 0,20"
y no me trae mas registros..
pareciera que tiene que ver con el "limit"
hay alguien que le pase lo mismo???
Gracias
Martin Del Angel
Mensajes: 360
Registrado: Mié Dic 03, 2008 5:05 am

MySQLQuery

Mensaje por Martin Del Angel »

On 2/28/2012 3:54 PM, Andres Hocevar wrote:
> Bueno nadie se anima a responder
> Haciendo pruebas tambien ocurre este comportamiento en el
> IDE si colocamos por decir
>
> cSelect := "select * from tabla"
>
> y abrimos el query lOpen:=.T.
>
> funciona bien
>
> luego cambiamos cSelect := "select * from tabla limit 0,20"
>
> y no me trae mas registros..
>
>
> pareciera que tiene que ver con el "limit"
>
> hay alguien que le pase lo mismo???
>
> Gracias
>
>
Hola Andres:
Jamas nos ha pasado eso que mencionas.
Mandame un pequeño ejemplo donde se reproduzca ese error.
Saludos....
Andres Hocevar
Mensajes: 141
Registrado: Mar Sep 18, 2007 3:30 pm

MySQLQuery

Mensaje por Andres Hocevar »

Gracias por tu respuesta
Aqui tienes un ejemplo con un grid y 2 botones,
el primero cambia cSelect con limite
el segundo lo restaura,
en mi caso cuando uso el boton de limite no devuelve ningun registro, el segundo devuelve todo,
te mande la tabla tambien (demo.sql), funciona mal tanto con mysql como con mariadb.
la version compilada la puedes bajar de http://dremanva2.hocevar.info/bbb.rar
Espero que podamos establecer cual es el problema,
Muchas Gracias

Attached files bbb.rar (3.9 KB)Â
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

MySQLQuery

Mensaje por jfgimenez »

Andrés,
la sintaxis de LIMIT para MySQL no es esta:
LIMIT <from>, <nrecords>
como pareces querer utilizar, sino esta otra:
LIMIT <nrecords> OFFSET <from>
Cambiándolo así­ sí­ que funciona. Eso sí­, tienes que tener en cuenta que
cuando usas la cláusula LIMIT, Xailer actualiza la propiedad nMaxRecords
del dataset, por lo que si vuelves a abrir el dataset sin LIMIT, seguirá
leyendo sólo unos registros. Para que vuelva a leer todo, tienes que
poner nMaxRecords := 0 antes del :Open()
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Andres Hocevar
Mensajes: 141
Registrado: Mar Sep 18, 2007 3:30 pm

MySQLQuery

Mensaje por Andres Hocevar »

Gracias por tu respuesta
Efectivamente funciona como tu dices, sin embargo en un post mio anterior habia indicado este detalle y lo corrigieron, sin embargo en las nuevas versiones veo que quitaron el arreglo.
Si revisamos la documentacion de MySQL la sintaxis correcta es:
SELECT ...... LIMIT 0, row_count
que es lo que uso en mis aplicaciones, adicionalmente el manual de MySQL, por compatibilidad, dice lo siguiente:
"For compatibility with PostgreSQL, MySQL also supports the LIMIT row_count OFFSET offset syntax."
En mi humilde opinion considero que si xailer soporta nativamente MySQL, es de esperarse que soporte nativamente su sintaxis primero y luego opcionalmente las variantes de las sintaxis de cualquier otro manejador de BD.
Muchas Gracias por su respuesta y espero que el equipo xailer tome en cuenta mi sugerencia como lo hizo en algunas de las versiones anteriores.
Andres Hocevar
Mensajes: 141
Registrado: Mar Sep 18, 2007 3:30 pm

MySQLQuery

Mensaje por Andres Hocevar »

Este es el Post Inicial
http://www.xailer.com/forum/index.php?t ... to=45377&a mp;#msg_45377
y este el manual de MySQL si alguien quiere revisarlo
http://dev.mysql.com/doc/refman/5.1/en/select.html
Responder