FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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:
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:
Si creamos una instancia de TDMData durante la ejecución:
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 |
|
|
|