Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas con clientdataset y limit (https://www.clubdelphi.com/foros/showthread.php?t=56846)

Edgtho 29-05-2008 08:01:25

Problemas con clientdataset y limit
 
Buenas,

Primero no se si esta opcion tendria que ir aqui o en provider, si esta mal que el moderador lo cambie.

Segundo, me ha surgido un problema con los clientdataset del que todavia no salgo de mi asombro, en la SQL que lo alimenta se pone la clausula LIMIT para poder traer menos registros y mostrar como si fueran paginas. He comprobado que en determinadas ocasiones el CLIENT me devuelve menos registros de los que esta establecido en el limit.

Imaginaros lo siguiente, tengo una tabla con 500 registros y la siguiente SQL

select * from clientes limit 20,10

Esto en teoria mostraria 10 clientes concretamente del 21 al 30, pues bien en el client a veces en vez de retornarme 10 registros me devuelve 3 ó 5 ó 6 ó los que le da la gana.


Me hundo en un mar de confusiones. ¿A que puede ser debido?

Un saludoy gracias por la respuesta

Al González 29-05-2008 15:10:58

¡Hola!

De entrada debes mencionar qué base de datos utilizas y considera que la tabla puede tener realmente menos de 30 registros.

Desconocía eso de "Limit" ya que no es del estándar SQL (que yo sepa).

También te faltó mencionar qué componentes utilizas para conectarte a la base de datos y ejecutar la consulta.

Esperamos retroalimentación.

Al González. :)

poliburro 29-05-2008 15:39:55

Cita:

Empezado por Al González (Mensaje 289874)
¡Hola!

De entrada debes mencionar qué base de datos utilizas y considera que la tabla puede tener realmente menos de 30 registros.

Desconocía eso de "Limit" ya que no es del estándar SQL (que yo sepa).

También te faltó mencionar qué componentes utilizas para conectarte a la base de datos y ejecutar la consulta.

Esperamos retroalimentación.

Al González. :)


Es Mysql,

Limit mysql, Top Sql Server y otros, RowNum Oracle, Fetch N Rows Forward Only Db2, Y así.

Al González 29-05-2008 19:07:33

Ese MySQL siempre tan rebelde. Mira que usar el "limit" al final y no al comienzo de la sentencia....:p

Por cierto, te faltó el de Firebird, Edgar: First.

Saludos.

Al.

poliburro 29-05-2008 19:11:36

Cita:

Empezado por Al González (Mensaje 289973)

Por cierto, te faltó el de Firebird, Edgar: First.


Al.



jajaj, buen complemento amigo AL, pero firebird no es un motor que me guste. (No digo que sea malo o bueno, solo no cumple con mis necesidades)

Saludos.

Al González 29-05-2008 22:57:54

Cita:

Empezado por poliburro (Mensaje 289974)
jajaj, buen complemento amigo AL, pero firebird no es un motor que me guste. (No digo que sea malo o bueno, solo no cumple con mis necesidades)

Saludos.

oout, perdone usted. :p :D

Andreano 30-05-2008 04:01:19

InterBase 7.x y 2007 :)

ROWS value
[TO upper_value]
[BY step_value]
[PERCENT][WITH TIES]

Ejemplos

SELECT SALESMAN, SALES_DOLLARS, SALES_REGION
FROM SALESPEOPLE
ORDER BY SALES_DOLLARS DESC
ROWS 1 TO 50;

SELECT SALESMAN, SALES_DOLLARS, SALES_REGION
FROM SALESPEOPLE
ORDER BY SALES_DOLLARS DESC
ROWS 50 TO 100 WITH TIES;

Si puede utilizar en Updates y Deletes

Saludos,
Andreano

Edgtho 30-05-2008 09:29:42

Buenas, el problema no es con la base de datos por eso no la especifique. Ahora que os confirmo que es MYSQL 5.

Continuo haciendo pruebas y he descubierto algo bastante extraño, he creado una aplicacion nueva que contiene un client y un dbgrid completamente nuevecitos (para probar de forma aislada) y parece no fallar nunca.:confused:

Es posible que me toque eliminar el form y volverlo a crear de nuevo porque se haya jodido el componente. (cosa plausible ya que es una migracion de Delphi7 a Delphi2007)

Al González 31-05-2008 16:06:39

Cita:

Empezado por Andreano (Mensaje 290082)
InterBase 7.x y 2007 :)

ROWS value
[TO upper_value]
[BY step_value]
[PERCENT][WITH TIES]

Ejemplos

SELECT SALESMAN, SALES_DOLLARS, SALES_REGION
FROM SALESPEOPLE
ORDER BY SALES_DOLLARS DESC
ROWS 1 TO 50;

SELECT SALESMAN, SALES_DOLLARS, SALES_REGION
FROM SALESPEOPLE
ORDER BY SALES_DOLLARS DESC
ROWS 50 TO 100 WITH TIES;

Si puede utilizar en Updates y Deletes

Saludos,
Andreano

Muy interesante Andreano, desconocía esa característica de InterBase.

Saludos.

Al. :)

jhonny 31-05-2008 16:26:01

Cita:

Empezado por Edgtho (Mensaje 290109)
Buenas, el problema no es con la base de datos por eso no la especifique. Ahora que os confirmo que es MYSQL 5.

Continuo haciendo pruebas y he descubierto algo bastante extraño, he creado una aplicacion nueva que contiene un client y un dbgrid completamente nuevecitos (para probar de forma aislada) y parece no fallar nunca.:confused:

Es posible que me toque eliminar el form y volverlo a crear de nuevo porque se haya jodido el componente. (cosa plausible ya que es una migracion de Delphi7 a Delphi2007)

Revisa la propiedad PacketRecords del ClientDataSet, probablemente lo que necesitas es que su valor sea igual a -1, ya que estas definiendo la cantidad de registros a mostrar desde la BD.

Edgtho 02-06-2008 07:38:34

Lo he revisado y ya estaba en "-1", hoy os contare si consigo algo ya que voy a eliminar los componentes y volverlos a crear.

Edgtho 02-06-2008 08:32:58

Es la cosa mas rara que me he podido encontrar pero... se ha solucionado eliminando los componentes y volviendolos a poner ¡¡con las mismas opciones puestas!!


La franja horaria es GMT +2. Ahora son las 04:16:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi