PDA

Ver la Versión Completa : Módulo de datos con DbExpress


Gisela
01-07-2003, 22:50:49
Hola a todos!! Tengo poca experiencia con Delphi así es que ha sido de mucha ayuda leer sus comentarios. Estuve buscando acerca de módulo de datos y no he encontrado lo que necesito así que espero alguno de ustedes pueda orientarme un poco.

Estoy usando dbExpress para conectarme a una base de datos PosgreSQL. Creo un módulo de datos para compartir consultas en varios programas pero quisiera lograr que sean como "sesiones" distintas, es decir que cuando selecciono un registro en un programa, no me cambie el cursor en el otro programa. Quizás con un ejemplo puedo ser más clara, supongamos que tengo una consulta de carreras que se cargan en un comboBox, al seleccionar una se muestran los alumnos en una grilla. En otro programa quiero usar un combo igual, aprovechando el sql que ya tengo creado en el módulo y en lugar de mostrar alumnos muestro los títulos que otorga esa carrera. Si cambio la selección en el programa que muestra alumnos, va a cambiar la selección en el programa que muestra títulos. ¿Cómo sería la forma correcta de trabajar en un caso así? ¿Se puede usar simultáneamente una consulta de un módulo sin que cambien los cursores de todos los programas?

Espero haber sido suficientemente clara, y que alguno pueda darme una idea. Gracias!!!

Gisela

delphi.com.ar
01-07-2003, 23:04:47
No se si es verdaderamente lo que necesitas, pero te recomiendo ver la ayuda de:

TDataSet.DisableControls
TDataSet.EnableControls


Saludos!

Gisela
01-07-2003, 23:31:17
Gracias por tu pronta respuesta pero creo que no es lo que estoy buscando, porque si le pongo DisableControls al ClientDataSet, me deshabilita para seleccionar en todos los programas que estén usando ese Client del módulo de datos ...

Lo que funciona es poner en el módulo de datos solo el Query y en cada programa su propio Provider, ClientDataSet y DataSource (y que usen el Query del módulo de datos). Pero la verdad todavía no me resigno a tener tantos componentes repetidos. Quizás el problema original es que no conozco como sería el modo correcto u óptimo de usar estos cuatro componentes de dbExpress ...

Espero alguna otra idea :) Gracias de nuevo
Gisela

guillotmarc
02-07-2003, 15:02:57
Hola.

Yo lo que hago es clonar el clientdataset en cada formulario. Es decir, en el datamodule dejas el query + provider + clientdataset, y lo abres.

Al cargar un formulario clonas el clientdataset del datamodule, sobre un clientdataset local al formulario :

cdsLocal.CloneCursor(dmData.cdsCompartido, True);

Ahora el cdsLocal contiene los mismos datos que el cdsCompartido, pero cuando te muevas sobre sus registros, no te moverás en el cdsCompartido. (Aunque si añades o modificas registros, estos cambios si que aparecerán en el otro clientdataset).

NOTA : Lo bueno de este sistema es que los datos solo se consultan una vez en la base de datos (en cambio con tu sistema actual, cada vez que abres el formulario se vuelven a cargar los datos via el query del datamodule), y los datos se mantienen sincronizados si haces cambios en cualquiera de los clientdatasets clonados.

El problema, es que tendrás que añadir clientdataset y datasources en los formularios. Por cierto si necesitas tener los campos persistentes, puedes siemplemente copiar el clientdataset del datamodule sobre el formulario (con lo que se copian los campos). o entrar en la lista del fields editor del clientdataset del datamodule, seleccionar todos los campos y Ctrl-C, te vas al fields editor del clientdataset local, y los podrás pegar sin problemas.

Saludos.

Gisela
02-07-2003, 16:10:33
Esto es lo que estaba buscando. Voy a leer la ayuda de Delphi para comprender mejor como funciona el CloneCursor. Ahora tengo que definir en qué momento paso los parámetros a los Query y abro los ClientDataSet del DataModule para que estén disponibles para clonarlos en los formularios... quizás en el menú de la gestión que estoy modelando.

Muchas gracias Marc!!

Gisela