Error en DBGrid?
Un saludo foreros.
Tengo un form con un Button, un DBGrid y un Data Source. Tengo además un DataModule con SQLConnection, Dataset (de tipo ctQuery), un DataSetProvider y un ClientDataSet (enlazados adecuadamente). Naturalmente el DataModule está en el uses del form. La conexion la abrimos (sin problemas) desde el principio. Inicialmente, DataSet.Active = false y ClientDataset.Active = false Cuando pinchamos sobre el button, simplemente hacemos: 1.-montamos el CommandText del Query (correctamente) 2.-DataSet.Open 3.-ClientDataSet.Open Pero no aparecen los datos del Query Sin embargo, si activamos (desde el IDE, con el commandText preparado) el DataSet y el ClientDataSet si que aparecen todos los datos. ¿Es un error o me dejo algo? Utilizo Delphi 2006 y Firebird 1.5 Gracias y un saludo para todos Post: en Delphi 7 sí funciona correctamente (comprobado) |
Hola : los enlaces son asi
DBGrid.DataSource -> source a conjunto de datos DataSource.DataSet -> enlace al conjunto de datos asociado -> TQuery, TTable, TDataSet,... TQuery, TTable, TDataSet . Connection -> conexion a la base de datos (en ADO). Si, por ejemplo, tienes una configuracion asi :
y cambias el query, no se te reflejaran los cambios en el dbgrid. |
Y entonces, si quieres modificar el query como hay que hacerlo para que se reflejen los cambios?
|
un dataset es un conjunto de datos. Si el dbgrid o cualquier control apunta a un datasource, debes cambiar la propiedad .dataset de este para apuntar a los datos que tu quieres. En tu caso, segun lo que entiendo, yo haria
1.- montar el query y activarlo 2.- datasource del dbgrid.dataset = query |
Coso, identsoft esta manejando DBExpress, por lo que necesita un DataSet que puede ser (SQLQuery, SQLTable o SQLDataSet en este ultimo el commandType puede ser ctQuery, ctTable, ctStoredProc, ademas que es el que esta utilizando Identsoft) cualquiera de esos DataSet debe ir enlazado a un DataSetProvider y el Provider enlazado a un ClientDataSet y el ClientDataSet enlazado recien al DataSource.
De la forma que lo estas haciendo esta bien ademas como dices te funciona en Delphi 7, no manejo delphi 2006, pero por lo que he leído aqui en el foro es que el Driver de Interbase ya no es del todo compatible con firebird. Revisa este hilo http://www.clubdelphi.com/foros/show...ght=ADO%2A ahi mismo te indica de donde bajarte otro driver para Firebird que es gratuito. Saluditos |
Vaya :confused: mea culpa por meter confusion. Gracias caro.
|
Gracias coso y Caro por vuestro interes.
Ya lo he solucionado. Lo pongo aquí por si interesa a alguien. El problema está en volver a reasignar el Dataset al DataSource. No se porqué razón, pero se pierde esa conexion. Si antes de hacer el Open, reasignas DataSource.DataSet := DataSet problema solucionado. Ahora la cuestión es : ¿porqué unas veces hay que volver a reasignar el DataSet al DataSource y otras veces no hace falta? Gracias a ambos. |
Perdon, se me ha hido la mano:
DataSource.DataSet := ClientDataSet |
La franja horaria es GMT +2. Ahora son las 08:44:43. |
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