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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-08-2005
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
Entendiendo al inspector de objetos

Nunca había caido en la cuenta de algo que, al menos a mi, me parece extraño. Quizá alguien puede explicar lo que realmente sucede.

Vamos a suponer que tenemos un formulario MainForm y un data module DMData.

En el data module colocamos una componente Table y en el formulario un DataSource.

Incluimos la unidad del data module en la cláusula uses del formulario con lo cual podemos asignar el Table de DMData a la propiedad DataSet del DataSource del formulario.

Nada fuera de lo común. Supongo que muchos habremos hecho esto cientos de veces: conectar un datasource de un formulario a un dataset de un data module.

Pues bien; mi pregunta es, ¿a dónde realmente apunta MainForm.DataSource.DataSet?

Dirán ustedes: pues a DMData.Table, ¡lo acabas tú mismo de decir!

Más aún, si vemos el archivo DFM del formulario es justo lo que vemos:


Código Delphi [-]
  object DataSource: TDataSource
    DataSet = DMData.Table
    Left = 464
    Top = 8
  end

Pero mi duda comienza aquí:

Cuando agregamos un data module a nuestro proyecto durante el diseño y le insertamos componentes, declaramos propiedades e implementamos métodos, se supone que estamos definiendo una clase, no construyendo un objeto. Y puede haber más de un objeto de esta clase.

Así pues, reformulo la pregunta:

¿A qué instancia de la clase TDMData pertenece la componente Table a la que apunta MainForm.DataSource.DataSet?

Una primera respuesta sería decir que a la variable DMData que Delphi crea por defecto.

Bueno, pues ahora borren esa variable y quítenla del auto-create:


Código Delphi [-]
type
  TDMData = class(TDataModule)
    Table: TTable;
    procedure DataModuleCreate(Sender: TObject);
  end;

(* no usar la variable declarada por Delphi
var
  DMData: TDMData;
*)

Si creamos una instancia de TDMData durante la ejecución:


Código Delphi [-]
with TDMData.Create(Self) do
begin
  Table.Open;
end;

todo funciona igual. Los controles conectados a MainForm.DataSource muestran correctamente los datos de la tabla en DMData.Table.

Pero, ¿si creamos varias instancias de TDMData? ¿A cuál apunta MainForm.DataSource.DataSet?

Aparentemente a la primera que se haya creado.

¿Cómo hace la VCL para determinar a dónde debe apuntar MainForm.DataSource.DataSet?

// Saludos
Responder Con Cita
 



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 21:40:25.


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