Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Comportamiento extraño dataModule (https://www.clubdelphi.com/foros/showthread.php?t=12113)

brandolin 06-07-2004 15:10:39

Comportamiento extraño dataModule
 
hola a todos, en realidad no sabia donde poner este hilo, asi que sepan disculpar si esta en el lugar incorrecto.

Les comento, que tengo en una aplicacion MDI y por cada formulario tengo un DataModule en donde esta la conexion a la BD y demas yerbas. El DataModule se crea cuando se crea el Form. Todo funciona de maravilla. El problema surge cuando se abren dos o mas veces el mismo form. (se puede ya que la aplicacion es MDI) entonces lo que hace es que cuando se cambia un dato en un form, los datos se cambian en todos los otros.

Por lo que pude ver es que en realidad no tengo una copia de cada DataModule en memoria, sino que es como si desde el form estaria haciendo una referencia al mismo DataModule lo que no me interesa que funcione ya que necesito que sean transacciones independiente.

Para ejemplificar mas, es una aplicacion de facturacion y quiero dar la posibilidad de tener haciendo varias facturas juntas. El form es la factura y el data modulo maneja los datos de la factura...

Espero haber sido claro... y espero alguna sugerencia... gracias

eduarcol 06-07-2004 15:15:35

puedes probar creando las tablas dentro del formulario, luego estas tablas en su propiedad sesion apuntan a la sesion que tienes en el data modulo, o sea, en el datamodulo tienes el sesion y el database, y "demas yerbas" y en el formulario las tablas con la sesion apuntando al data modulo, asi aseguras el comportamiento que deseas

brandolin 06-07-2004 16:36:51

Si algunos formularios del sistema los tengo asi, pero en algunos la cantidad de Tablas, Querys, Store Procedure, etc, etc son demasiados para tenerlos en el mismo form. Ademas migre parte del codigo en el data module para que sea mas legible. (¿creo que para eso estan, o estoy equivocado?)

Ademas tengo otro DataModule principal que tiene la conexion a la base de datos, etc, etc.

¿Alguien sabe como hacer para que esto funcione? ¿Donde debo crear el data module?, etc, etc. Gracias

marcoszorrilla 06-07-2004 18:05:21

El problema viene dado fundamentalmente por ser una aplicación Mdi.

En el Modulo de datos debes de colocar solamente la conexión a la base de datos y la sesión.

Porque al ser una aplicación Mdi, el mismo usuario podria abrir la misma factura 2 veces ó 3 desde formularios distintos, entonces cada formulario debe tener su componente Ttable o Tquery quedando centralizada la conexión con la BD y la sesión, aunque también sería conveniente que dijeras que tipo de tablas estás manejando.

Un Saludo.

brandolin 06-07-2004 18:10:22

Estoy manejando los componentes IBX + Firebird 1.5.

Esta bien si coloco los IBDataSEt, etc, etc en el form pero se complicaria mucho el diseño y la claridad. No hay forma de que ese DataModule sea privado al form y se habra una copia de el para cada form ?

Gracias por todo

roman 06-07-2004 18:18:50

Cita:

Empezado por brandolin
No hay forma de que ese DataModule sea privado al form y se habra una copia de el para cada form ?

Puer sí. Créa una copia distinta cada vez que crees el formulario. Por ejemplo en el evento OnCreate del formulario. De hecho puedes poner al data module como una variable privada del formulario:

Código Delphi [-]
uses
  UnidadDataModuleFacturas;

type
  TfrmFactura = class(TForm)
    procedure FormCreate(Sender: TObject);

  private
    DataModule: TDataModuleFacturas;
  end;

implementation

procedure TfrmFactura.FormCreate(Sender: TObject);
begin
  DataModule := TDataModuleFacturas.Create(Self);
end;

// Saludos

marcoszorrilla 06-07-2004 18:19:25

Yo pondría un Modulo de datos para la conexión a la BD y alguna cosa más de tipo genérico, luego lo más lógico es que cada formulario lleve sus IbTables, queries.....

Porque crear un Modulo de datos por cada formulario me parece excesivo, pero si lo haces así puede funcionar sin ningún problema.

Un Saludo.

roman 06-07-2004 18:29:22

Cita:

Empezado por marcoszorrilla
Porque crear un Modulo de datos por cada formulario me parece excesivo

Sí, a mi también me parece un exceso pero él insistía :rolleyes:

// Saludos

brandolin 06-07-2004 22:43:59

Roman y otros: Gracias por sus opiniones. la verdad es que ya opino lo mismo pero como el sistema es bastante grande quiero darle un poco de claridad en el codigo fuente y migrar algunos controles de datos, inicializaciones, etc, etc a los data modules.

Creo que se veria un poco mas claro. No obstante ya habia probado la respuesta que da Roman y el comportamiento sigue igual.

Voy a ver como puedo acomodar las cosas para que funciones decentementes. Gracias

brandolin 08-07-2004 14:25:47

Disculpen pero vuelvo a las andadas con este tema. Hice lo que me recomendaron y funciona sin inconvenientes pero si lo miramos el codigo esteticamente queda una chanchada. Se mescla todo los datos y no se entiende nada.
¿Que paso con eso del diseño en 2 o 3 capas?
¿Los data modules no sirvirian en un principio para hacercarse a esa teoria?
(no me salten ya se que no es lo mismo, pero bueno...)

Agredeceria comentarios al respecto. Gracias...


La franja horaria es GMT +2. Ahora son las 19:47:55.

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