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
  #7  
Antiguo 23-04-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 gustavo2
La creacion en tiempo de ejecucion de objetos es mi duda.
Ok, entonces es una pregunta acerca de objetos y realmente no tiene que ver con tablas planas de manera que deberías haberlo puesto en el foro OOP.

Para construir un objeto en tiempo de ejecución tienes que usar su constructor- en la inmensa mayoría de casos se llamará Create. Digamos que tienes una clase TMiClase y deseas crear un objeto de esta clase; si tienes una variable de tipo TMiClase bastará que le asignes el resultado del constructor:

Código:
var
  UnObjeto: TMiClase;

...

UnObjeto := TMiClase.Create(parámetros);
Pasando los parámetros pertinentes según la clase de que se trate y llenando las propiedades necesarias. En tu caso particular, necesitas un grid, una tabla y un datasource por cada tabla física:

Código:
var
  Grid: TDBGrid;
  Table: TTable;
  DSource: TDataSource;

begin
  Table := TTable.Create(nil);
  DSource := TDataSource.Create(nil);
  Grid := TDBGrid.Create(nil);

  Table.DatabaseName := alias de la base de datos;
  Table.TableName := nombre de la tabla física;
  
  DSource.DataSet := Table;

  DBGrid.DataSource := DSource;  
end;
Fíjate en el parámetro (nil en el ejemplo) de los constructores. Este parámetro es una componente que será la encargada de destruir al objeto cuando ella misma se destruya. Cuando en tiempo de diseño insertas componentes como Table en el formulario, este parámetro automáticamente se asigna al formulario mismo de manera que cuando el formulario se destruye (sea porque termina la aplicación o porque explícitamente lo hagas en código) él destruirá también a todas las componentes que posee, razón por la cual no necesitas hacerlo tú mismo. Sin embargo, si requieres destruir las componentes antes de que termine la aplicación para liberar memoria entonces te conviene pasar nil como parámetro lo cual querrá decir que nadie se va a encargar de destruirlas de forma automática y lo harás tú mismo cuando sea necesario:

Código:
Table.Free;
DSource.Free;
Grid.Free;
Ahora bie, dado que la cantidad de tablas que crees en la ejecución no es fija sino que depende de condiciones que de el usuario, te convendrá mantener una lista dinámica de ellas, por ejemplo, con un TObjectList:

Código:
type
  TDataPack = class
    Table: TTable;
    DSource: TDataSource;
    Grid: TDBGrid;
  end;
En cada item de la lista pondrías un "pack" o conjunto de las tres componentes requeridas:

Código:
var
  Pack: TDataPack;

begin
  Pack := TPack.Create;
  Pack.Table := TTable.Create(nil);
  Pack.DSource := TDataSource.Create(nil);
  Pack.Grid := TDBGrid.Create(nil);

  List.Add(Pack); // List es de tipo TObjectList
end;

y llenas el resto de las propiedades como antes.
Recuerda que deberás crear List previamente:

Código:
List := TObjectList.Create(true);
Al pasar true como parámetro hace que la lista ´'posea' los objetos que agregas de manera que cuando destruyas la lista automáticamente se destruirán todos sus elementos.

Espero que esto te sirva de guía.

Dejame comentarte que Delphi es un lenguaje orientado a objetos de manera que es fundamental tener una noción al menos básica de éstos y como funcionan en el lenguaje. Por ello te recomiendo que leas un poco acerca de ello para no estar atorándote en cuestiones que hasta cierto punto son más o menos elementales.

// 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 17:44:30.


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