![]() |
Filtros en Clientdataset
Hola, tengo una aplicación creada en D6, utilizando dbexpress , y utilizo para acceder a los datos SQLDATASET+DATASETPROVIDER+CLIENTDATASET, el problema viene ya que cuando en el cliente necesito hacer una consulta utilizo un filtro pero este trabaja muy lento (al trabajador con unos 500 registros).
¿A que puede deberse esto?, los filtros yo sabía que eran lentos en BDE ¿pero tb lo son utilizando los clientdatasets?. ¿Que puedo hacer para acelerar las consultas en los clientes? un saludo |
Lo mas eficiente para realizar un filtro, es no hacerlo del lado del cliente, sino del lado del servidor. En otras palabras, en lugar de tener un dataset que haga un
Select * from tabla; y luego filtrar los que tengan una fecha mayor a la del '1/ene/2003', es mucho mas eficiente tener un dataset que haga: Select * from tabla where fecha > '1/ene/2003' La eficiencia, por supuesto, dependerá de tu motor de base de datos. Lo que es recomendable en cualquier motor, es tener indices que ayuden a optimizar las consultas de acuerdo a los criterios de busqueda a utilizar. Hasta luego. ;) |
Esa solución que comentas es la que actualmente estoy aplicando, pero de esta forma pierdo la independencia de las 3 capas que utilizo en mi aplicación, por eso comentaba si hay algo que este haciendo mal para q no vaya tan rápido al hacer el filtro, como en la consulta.
un saludo |
Acaso no podes usar parametros en ClientDataSets?
|
Poder, si que puede utilizar parametros, pero el problema bien en que la consulta no siempre utiliza los mismos parametros, ya que unas veces puede ser del tipo:
select * from clientes ...y otras: select * from clientes where poblacion like '%ali%' and fechaalta>'01/01/2003' con lo que segun creo yo, en estos casos los parametros no se podrían implementar, ¿o si?... salu2 |
si hay un número finito de condiciones, si, de la siguiente forma:
Código:
select * Hasta luego. ;) |
Me parece una solución perfecta para mis consultas, el tema ahora es, ¿Como implemente esto en Firebird?, te lo digo porque al intentar hacer esto que me comentas obtengo el error:
-----Data type unknown---- referenciando a cuando comparo la variable con null. gracias y un saludo |
Enel editor de parámetros del Query, asigna un tipo de dato a cada parámetro. Si lo estas haciendo desde ibConsole, creo que la única forma de hacerlo es usando CAST.
Hasta luego. ;) |
Sigue sin funcionarme..., he probado a utilizar la función CAST en la SQL, he probado desde delphi en la query a utilizar un tipo en los parametros y nada, en cuando comparo un parametro de entrada con un valor, me da el error que te comentaba.
¿que hago mal? salu2 |
Estas epecificando los tipos de dato de lops parámetros en delphi...??
como has usado el cast? proba con algo como: where : parametro = campo or cast(: parametro as integer) = cast(null as integer). A ver si te tira el mismo error... hasta luego ;) |
Hola, he resolvido el problema, con una variante de lo que tu me comentaste, te explico, si utilizo la forma q tu me comentabas no consiguía obtener ningun registro, por ejemplo:
select * from color_general where (cog_descripcion like :des) or (:des = cast( null as char(50))) En cambio si utilizo en lugar de null un valor que yo sepa q nunca se va a dar para la comparación si q funciona bien: select * from color_general where (cog_descripcion like :des) or (:des = cast( '@' as char(50))) o sea que de momento esta resuelto el tema, pq supongo |
perdon continuo aquí:
eso supongo q con otros tipos de datos (fecha, numero...) no habrá problemas con las comparaciones. Pero ¿pq no funciona bien con el null?, es mas que nada por curiosidad pq el problema lo he resulto de la otra manera. un saludo y muchas gracias |
Ya no recuerdo exactamente en interbase pero la solucion que has dado es correcta.
Tambien podes optar por utilizar otro parámetro, que lo haria mas claro, algo como: Código:
select * from color_general Código:
if eDescripcion.Text = '' Then ;) |
Esta solución q comentas no se me habia ocurrido y la verdad me convence más que la que he utilizado yo.
Muchas gracias por tu tiempo y un saludo desde alicante. |
Cuando vaya por la Madre Patria... tenes el compromiso de invitarme un par de chelas... jeje
:D ;) |
eso esta hecho tio, aunque la verdad que son ¿las chelas?...
salu2 |
cheves
birrias cervezas, pues... Hasta luego. ;) |
La franja horaria es GMT +2. Ahora son las 09:47:51. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi