Actualizar datos de una Query...

Tengo una aplicación en la que realizo una Query y muestro los datos
en un DBGrid.
Además de esto, tengo varios botones que me ordenan dicha rejilla en
función a un campo.
Actualmente, lo que hago es cambiar el contenido de la propiedad SQL
del TQuery para incluir un ORDER BY en función al campo que me
interesa. Pero claro, vuelve a ejecutarse la Query.
Mi idea es utilizar diversos índices que tengo creados, uno por cada
botón de ordenación. Pero no se cómo hacerlo.
¿Podría decirme alguien alguna forma de hacer esto?
Respuesta
1
Una alternativca sería usar un TClientDataSet, asociado en su propiedad, PROVIDERNAME a un TDataSetProvider, que en su propiedad dataset este asociado a tu Query.
Esto te permitiría ordenar el resultado proveniente del query con el TClientDataSet (que obviamente recupera los datos del datasetprovider que los recupera a su vez del TQuery), este objeto tiene una propiedad que se llama IndexFieldNames a la que le podes indicar mediante un String la forma en la que querés que ordene los campos de tu cursor (o resultado de datos). Además esta es una solución muy piola si tenés que actualizar información proveniente del query en la DB porque el TClientDataSet permite la actualización por lotes de los registros a través del tproviderDataSet que por defecto actualiza SQL,(con el TQuery si quieres lograr este efecto deberías usar RequestLive a true y solo funciona si el Query es de una sola tabla en una única DB, si desears impactar sobre distintas tablas en una o varias DBs tienes lapropiedad UpdateObject del TQuery que debe asociarse a un objeto de tipo TUpdateSql que realizará la actualización en forma personalizada a través de eventos que deberías programar).
Bueno espero que sirva y cualquier duda a tus ordenes.
Hola de nuevo.
Muchas gracias por tu comentario. Pero no me funciona del todo bien.
Si te he entendido correctamente, necesito un TQuery, un TDataSource, un TClientDataSet y un TDataSetProvider. El TQuery le pasa los datos al TDataSetProvider, que a su vez los manda al TClientDataSet.
Posteriormente, asocio el TClientDataSet con la propiedad DataSet del TDataSource. Hasta aquí todo bien, en apariencia.
El problema es que no me refresca los datos del TDBgrid. En su propiedad DataSource tengo el TDataSource que está asociado al TClientDataSet que, a su vez, está unido al TDataSetProvider. La Query me la hace bien, pero el contenido de la rejilla no varía.
Muchas gracias por anticipado por tu respuesta.
Bueno en principio si es correcto lo que decís, fíjate lo siguiente:
1) El TDataSetProvider tiene una propiedad dataset que debe ser puesta en el TQuery.
2) El TClientDataSet debe tener una propiedad providername que debe ser puesta al nombre del TDataSet provider.
3) El TDataSource debe tener una propiedad DataSet que debe ser puesta en el TClientDataSet.
4) El DBGrid debe tener una propiedad DataSource que debe ponerse al TDataSource.
5)Las propiedad Active inicialmente deberíasn estar todas en false.
6)Cuando quieras realizar una consulta, fija el SQL del TQuery y luego hace Active:=true para el TClientDataSet, este en busca de un dato consultará al TDataSetProvider, y este en busca de los datos solicitados, consultará el query poniendo en true la propiedad Active.
7)Si querés reconsultar, antes, pone a false las propiedades Active intervinietes en el TClientDataSet y TQuery.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas