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)
-   -   'close data set' con dbExpress y midas. (https://www.clubdelphi.com/foros/showthread.php?t=14822)

j-vi 01-10-2004 10:12:21

'close data set' con dbExpress y midas.
 
Hola a todos.

Tengo un grabísimo problema:
Estoy migrando una aplicación de parados-bde a interbase-dbExpress.
Accedo a una tabla con un tSqlDataSet. Esta tabla podría ser la de clientes. Le asocio un TDataSource.
Accedo a otra tabla de facturas con otro tSqlDataSet, pero le pongo como parámetro el código de socio que tendrá que pillar del tDataSource de Clientes. Tambien le asocio otro tDataSource.
Por último accedo a otra tabla (por ejemplo líneas de factura) pero dejando el código de factura como parámetro para que lo coja del TDataSoruce de Facturas.
Pongo un tDataSetProvider y lo asocio con la tabla de clientes.
Pongo un tClientDataSet asociado al tDataSetProvider. Le doy a añadir todos los campos y me aparece un CampoDataSet.
Coloco otro tClientDataSet y lo asocio con el campo del primero. Le doy a añadir campos y me aparece otro CampoDataSet, que asocio con otro TClientDataSet.
El problema es que cuando activo el tClientDataSet (cualquiera de ellos) me da el error: 'ClientesCds: Cannot perform this operation on a closed dataset'.

He probado algo parecido (pero más sencillo) y me funcionaba correctamente.

Alguíen puede ayudarme?

Gydba 01-10-2004 14:11:15

Hola, antes que nada viendo tu cantidad de mensajes te doy la bienvenida al foro. Espero que puedas encontrar todo lo que necesites y que puedas aportar todo lo que creas interesante.

Dicho esto voy a aclarar que me mareó un poco tu mensaje, no porque esté mal sino porque es muy temprano para mi cabeza!!!! :).

Lo que se me ocurre es que si estás relacionando los datasets lo más normal sería "activarlos" según su dependencia, es decir con jerarquía (los tSqlDataSets por ejemplo). Pero no sé si te soluciona algo, esto más que nada es una prueba. Esto lo digo porque el error parece indicar que un master dataset no está abierto y al tratar de activar uno relacionado de alguna con éste falla.

Todo es una suposición, así que perdón si me equivoco.

Saludos!

j-vi 01-10-2004 15:31:23

Hola, Antes de nada gracias por la bienvenida.

Efectivamente estoy de acuerdo contigo: parece que por alguna estraña razón los querys ¡¡¡no se abren!!! al activar el ClientDataSet.

Pero si los abro de uno en uno (los Querys) si que se abren sin problemas, lo que me indica que no debe de ser un fallo de la sentencia sql.

Estoy volviendo ha hacer todo en otro data modulo para probar y me está funcionando. No se que puede pasar. Comparo las propiedades de los objetos (los del primer datamodulo con los del datamodulo de pruebas) y están todas iguales, sólo que en el segundo funcionan...

PD: por cierto soy usuario registrado dese hace mucho tiempo. Lo que pasa es que en estos nuevos foros nunca había escrito ni para preguntar, ni para contestar.

axelbb 01-10-2004 16:46:06

Estas cosas son las que me asustan de Delphi
 
Hola, vean mi solicitud acerca de la recomendación de Delphi a un nuevo programador. Este tipo de cosas es la que veía que les pasaba a los desarrolladores de Delphi en donde trabajo. Todo parecía estar bien pero no andaban. Lo hacían de nuevo exactamente igual, y ¡¡bingo!!. No estoy acostumbrado a renegar (Clipper jamás lo hizo) y no quisiera empezar a hacerlo :0(
Gracias y disculpen mi intromisión...

basti 01-10-2004 16:59:17

Hola

El problema creo que es el siguiente.

Cuando abres un TClientDataSet, este controla el dataset al que está enlazado (en este caso la consulta) y lo abre o cierra según necesite.

La solución pasa por asociar el TDataSource al TClientDataSet y no al TSQLDataSet, usando para todo TClientDataSet.

un saludo

j-vi 01-10-2004 17:15:23

Cita:

Empezado por basti
Cuando abres un TClientDataSet, este controla el dataset al que está enlazado (en este caso la consulta) y lo abre o cierra según necesite.

La solución pasa por asociar el TDataSource al TClientDataSet y no al TSQLDataSet, usando para todo TClientDataSet.

un saludo

Esta parece una solución correcta aunque estaríamos haciendo la relación en la "supuesta" capa de interfaz en vez de en la de datos. Lo que pasa es que el otro sistema ahora parece que funciona correctamente. Casi he terminado de enlazar todas las tablas, voy probando de una en una para encontrar el error cuanto antes.

PD: Aunque he revisado todas las propieades de todos los objetos y tal, y tal... prefiero pensar que hay un error mio en algún lado y que en breve lo encontraré a pensar que las relaciones DBExpress-DataSetProvider-ClientDataSet tienen fallos incontrolables.

j-vi 01-10-2004 17:59:05

Hola. Sigo con lo mio pero quería comentaros una cosilla:
Algunas veces después de meterle la sentencia Sql al TSqlDataSet me da este error: "Incorrect values within SQLDA structure".

Entonces edito la sentencia, le cambio cualquier cosilla pero después la dejo como estaba (añado un espacio, y lo borro), activo el componente y ya no da el citado error.

Es algo muy raro ...

Saludos.


La franja horaria es GMT +2. Ahora son las 22:55:37.

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