Ver Mensaje Individual
  #5  
Antiguo 18-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Componentes como ADOConnection y ADOQuery, normalmente las insertas en un formulario durante el diseño. El mecanismo de la VCL se encarga automáticamente de crear esos objetos.

Pero en tu caso, al ponerlo en su propia clase, ya no tienes a la VCL que se encargue de crearlos por lo que debes hacerlo tú mismo explícitamente.

Lo que debes hacer es implementar un constructor y un destructor para tu clase:

Código Delphi [-]
type
  TBiblioteca = class
  public
    constructor Create;
    destructor Destroy; override;
  end;

implementation

constructor TBiblioteca.Create;
begin
  // Llamas al consructor de la clase ancestra (TObject)
  inherited;

  // Creas las componentes
  cnx := TADOConnection.Create(nil);
  query := TADOQuery.Create(nil);
end;

destructor TBiblioteca.Destroy;
begin
  cnx.Free;
  query.Free;

  // Llamas al destructor de la clase ancestra (TObject)
  inherited;
end;

De esta manera, cuando construyas un objeto Biblioteca:

Código Delphi [-]
a:=TBiblioteca.Create;

el método Create que se utilice será el que recién definiste, y es donde se crean las componentes que usas.

Como la VCL tampoco te va ayudar a destruir tus componentes, ya que no estás en un formulario, debes también destruirlas explícitamente en algún momento para liberar memoria. Lo más cómodo es hacerlo entonces, en el destructor de la propia clase, que se llamará cuando uses

Código Delphi [-]
a.Free;

// Saludos
Responder Con Cita