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)
-   -   Error en DBGrid? (https://www.clubdelphi.com/foros/showthread.php?t=58450)

identsoft 21-07-2008 09:05:18

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)

coso 21-07-2008 11:01:14

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 :

Código Delphi [-]

DataSource1.DataSet := DataSet1;
DBGrid1.DataSource := DataSource1;

y cambias el query, no se te reflejaran los cambios en el dbgrid.

identsoft 21-07-2008 12:12:33

Y entonces, si quieres modificar el query como hay que hacerlo para que se reflejen los cambios?

coso 21-07-2008 12:29:44

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

Caro 21-07-2008 13:50:57

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

coso 21-07-2008 13:52:47

Vaya :confused: mea culpa por meter confusion. Gracias caro.

identsoft 22-07-2008 12:46:52

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.

identsoft 23-07-2008 08:57:26

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