Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-07-2004
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 06-07-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 06-07-2004
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 06-07-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 06-07-2004
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 06-07-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #7  
Antiguo 06-07-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #8  
Antiguo 06-07-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

// Saludos
Responder Con Cita
  #9  
Antiguo 06-07-2004
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 08-07-2004
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
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...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:48:41.


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
Copyright 1996-2007 Club Delphi