Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   constructor y destructor (https://www.clubdelphi.com/foros/showthread.php?t=9413)

gustavo2 22-04-2004 19:07:29

constructor y destructor
 
Hola y Gracias a Todos
Quiero crear con un constructor para tablas paradox un dbgrid y un table.
Saludos Gustavo2....

delphi.com.ar 22-04-2004 19:13:47

Podrías ser un poco mas explícito...

Saludos!

gustavo2 22-04-2004 21:32:29

constructor y destructor
 
Hola a todos
Para ser mas explicito deseo crear con el metodo constructor create un objeto dbgrid y un objeto table con uso de algunos de sus properties : posicion,tamaño,campos.Si es posible?.... Las tablas que usare para llenar las grillas y relacionar con el table son paradox.
Saludos Gustavo2....

jachguate 22-04-2004 22:33:41

Hola gustavo.

La verdad me parece que seguis dando muy poca información. Si realmente queres conseguir ayuda, creo que vas a tener que dedicar unos minutos mas a redactar un mensaje que sea claro para que quienes no tenemos ni la menor idea de lo que estas haciendo, pero que si sabemos hacerlo, podamos darte una mano.

Antes de responder de nuevo, te recomiendo la lectura de este hilo
Por ejemplo en el constructor create de que???

Hasta luego.

;)

delphi.com.ar 22-04-2004 22:35:49

Cita:

Empezado por jachguate
La verdad me parece que seguis dando muy poca información. Si realmente queres conseguir ayuda, creo que vas a tener que dedicar unos minutos mas a redactar un mensaje que sea claro para que quienes no tenemos ni la menor idea de lo que estas haciendo, pero que si sabemos hacerlo, podamos darte una mano.

Me alegro de ver que no es un problema mío, que verdaderamente no se entiende :)...

gustavo2 23-04-2004 01:20:11

crear objetos
 
Hola y gracias a todos
Primero creo en tiempo de ejecucion tablas desnormalizadas.
Luego lo que yo quiero hacer es crear objetos de tipo table y dbgrid sacados de sus respectivas clases. Lo que pasa es que mi aplicacion requiere de una cantidad "x" de objetos dbgrid para enlazarlos a una cantidad "x" de objetos table que deben crearse en tiempo de ejecucion (enlazados estas Grillas Y Table a las tablas anteriores). El numero de objetos y tablas creados es sacado de lo que el usuario me ingrese en registros de una tabla creada en tiempo de desarrollo(normalizada). Luego paso a tablas nuevas que creo en tiempo de ejecución(normalizadas) y borro las otras. El sistema ,es mi intencion hacerlo de esta manera,para evitarle al usuario una Grilla grande con informacion desparramada que el debera ordenar en varios pasos y a mi una programacion al estilo excel con reconocimiento de distintos datos en celdas, etc. La creacion en tiempo de ejecucion de objetos es mi duda. Las tablas son desnormalizadas por el mejor ingreso de informacion para este caso en particular.
Saludos y pedidos de disculpas Gustavo2.....

roman 23-04-2004 02:03:12

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

delphi.com.ar 23-04-2004 06:02:12

Cita:

Empezado por roman
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.

Lo muevo al foro OOP

jachguate 23-04-2004 07:49:53

creo que esto perfectamente se puede lograr con herencia visual, simplemente asignando en un método el nombre de la tabla...

Seria mucho mas práctico, a mi entender...

Hasta luego. ;)

roman 23-04-2004 08:08:19

Cita:

Empezado por jachguate
creo que esto perfectamente se puede lograr con herencia visual

No alcanzo a ver dónde entra la herencia visual. Quizá te refieres a simplemente a utilizar un formulario con un grid, un table y un datasource y crear varias instancias de él asignado el nombre de la tabla.

En todo caso sí, tienes razón, es mucho más sencillo. :o

// Saludos

gustavo2 23-04-2004 19:59:46

Objetos
 
Hola y Gracias
Al principio mi intención era optimizar codigo y no aprender sobre programacion orientada a objeto como roman hace referencia; (leer cuando hago referencia a metodos constructores y destructores , create) si no recorreria al help de delphi . Sobre el titulo de "duda" hace referencia al ejemplo en aplicacion y a la optimizacion del codigo para varios objetos creados en tiempo de ejecucion. Sobre "complicarse" al igual que lo anterior lo tomo con humor porque me parece una opinion apresurada y fuera de lugar ya que deseo crear ademas de ventajas para el usuario un data warehouse (ver desnormalizar) al violar la nfbc y crear campos calculados. La aclaracion de es una lenguaje orientado a objetos me parece que esta de mas ya que no creo que nadie en este foro no lo sepa.
Saludos Gustavo2......

roman 23-04-2004 20:23:20

Cita:

Empezado por gustavo2
Al principio mi intención era optimizar codigo y no aprender sobre programacion orientada a objeto como roman hace referencia;

Al principio tu intención no era clara para nadie y después se vio que tu pregunta era acerca de construcción de objetos (léase programación orientada a objetos) de manera que me es difícil entender que alguien quiera usar OOP sin aprender OOP.

Cita:

Empezado por gustavo2
(leer cuando hago referencia a metodos constructores y destructores , create) si no recorreria al help de delphi . Sobre el titulo de "duda" hace referencia al ejemplo en aplicacion y a la optimizacion del codigo para varios objetos creados en tiempo de ejecucion.

Tú lo has dicho. Con conocimientos básicos, leídos del help de Delphi, puedes perfectamente saber cómo construir objetos en tiempo de ejecución.

Cita:

Empezado por gustavo2
Sobre "complicarse" al igual que lo anterior lo tomo con humor porque me parece una opinion apresurada y fuera de lugar ya que deseo crear ademas de ventajas para el usuario un data warehouse (ver desnormalizar) al violar la nfbc y crear campos calculados.

De hecho no entendiste que la observación de jachguate iba para mí y no para tí. Su idea es mucho más sencilla que la mía y lo acepto tal cual, sin ponérmele al "brinco".

Cita:

Empezado por gustavo2
La aclaracion de es una lenguaje orientado a objetos me parece que esta de mas ya que no creo que nadie en este foro no lo sepa.

Llevas muy pocos mensajes en los foros por lo cual no tenemos muchos medios para saber cuál es tu nivel de conocimientos. A estos foros entran muchas personas que apenas se están iniciando y dada que confundiste un problema de normalización de tablas con un problema de objetos es natural que pensemos que eres novato y de ahí la observación que era una simple recomedación. Cuando desconozco un tema nunca veo con malos ojos que alguien me haga una sugerencia.

// Saludos


La franja horaria es GMT +2. Ahora son las 06:37:18.

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