Página 1 de 1

Duda con Dataset en Xailer 2

Publicado: Mar Ene 04, 2011 5:40 pm
por Andres Hocevar
Feliz y prospero 2011 a todos
En la version 1.9 escribi la clase TDBnavigator
CLASS TDBNavigator FROM XDBNavigator
..
..
ENDCLASS
para usar tablas desde MySQL que son muy grandes y asi traerme lotes de
registros pequeños, por ejemplo, de 20 en 20 , modifique el "metodo
command" para que cuando llegaba al final o al inicio del dataset se
trajera la siguiente o la anterior pagina segun el caso, para lograrlo
cerraba el dataset cambiaba la instruccion select y lo volvia a abrir
para el evento ::OnClickNext() cuando llega al registro 20
mDesde := mDesde+20
::oDataSet:lOpen := .F.
::oDataSet:cSelect := "SELECT * FROM tabla LIMIT "+str(mDesde)", 20"
::oDataSet:lOpen := .T.
::oDataSet:GoTop()
Esto funciona perfecto con 1.9, ahora que cambie a la nueva version
parece que no le hace caso al cambio en el dataset y deja siempre el
primero (en el ejemplo siempre trae "SELECT * FROM tabla LIMIT 0,20").
Gracias

Duda con Dataset en Xailer 2

Publicado: Mar Ene 04, 2011 8:35 pm
por Andres Hocevar
Hola a Todos
Me parece que no hace caso al LIMIT en el Select, de alguna manera se
come el segundo parametro del LIMIT por ejemplo LIMIT 720, 20 en lugar
de traer 20 registros del 720 al 740 se trae los primero 720 como lo
haria con LIMIT 720.
Para ilustrar este fenomeno les adjunte un proyecto donde pueden ver lo
que pasa y si el problema es que yo estoy haciendo algo mal.
--

Duda con Dataset en Xailer 2

Publicado: Mar Ene 04, 2011 10:25 pm
por Andres Hocevar
Hola
Como hago para colocar algo como esto:
SELECT * FROM
(
SELECT a.codigo, grupo, descrip, pond, precio1 FROM sinv a
WHERE a.grupo IN (SELECT grupo b FROM grup WHERE MID(grupo,1,2)='00')
) mmmm LIMIT 0, 20
en el cSelect de un SQLQuery?
(supongamos que no quiero crear un view)
Gracias

Duda con Dataset en Xailer 2

Publicado: Mié Ene 05, 2011 12:42 am
por Carlos Ortiz
Andrés así lo usamos nosotros y va bien, que motor usas?.
SELECT IDPROFESION, DESCRIPCION, CODIGO
FROM PROFESIONES
ORDER BY DESCRIPCION
LIMIT 100 OFFSET 0
Atte. Carlos Ortiz,

Duda con Dataset en Xailer 2

Publicado: Mié Ene 05, 2011 1:30 am
por Andres Hocevar
Hola Carlos
Gracias por tu respuesta.
Si es cierto no funciona bien con la sintaxis MySQL LIMIT 0,100 la de
Postgres es la que usa OFFSET, de todos modos con sobrecargar la clase y
comentar las lineas siguientes en el metodo open() funciona de las 2 formas
/*
IF ( n := RAt( " OFFSET ", cSql ) ) > 0
::cOffset := LTrim( Substr( cName, n + 8 ) )
cSql := Left( cSql, n - 1 )
ENDIF
IF ( n := RAt( " LIMIT ", cSql ) ) > 0
::cLimit := LTrim( Substr( cName, n + 7, Len( cSql ) - n - 6 ) )
cSql := Left( cSql, n - 1 )
::oDataset:nMaxRecords := Val( ::cLimit )
ENDIF
*/
de todos modos creo que a esta clase falta trabajarla un poco mas para
funcionar con los ejemplos que coloque en los correos siguientes.
Gracias de nuevo