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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-03-2016
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
Construyendo Clase Evento on create

Buenos dias foristas
Estoy construyendo una clase en la cual debo:
1. crear tclientdataset, y los he colocado en en on create, pero este paso no se ejecuta, pienso que debo estar usando algo mal podrian darme un ayuda gracias

2. si debo crear los dataset usando self o null



Código Delphi [-]

{-----------------------------------------------------------------------------
INMOVTR-- CLASE MOVIMIMIENTOS DE INVENTARIOS
-----------------------------------------------------------------------------}
unit INMOVTR;

interface

uses
  Windows, Messages, SysUtils, Classes,  Controls , DB, Dialogs,
     Datasnap.DBClient ;


type
  TINMOVTR = class(TComponent)
  private
    t_ok          :Boolean ;
    t_Existe      :Boolean ;
    Flg_DatasetOK :Boolean;

    FDocnumero    :string;
    FDocFecha     :TDateTime ;
    FIncodtra      : string;
    FTipoMov      : string;
    FPgmcode       :string;
    FIdInsaldoFrm  :Integer ;


    // variable y objectos de trabajo
    inmov_frm      :TClientDataSet;
    InMov_to       :TClientDataSet;
    PEDMST         :TClientDataSet;

    procedure      CrearDataSets(var Flg_DatasetOK:Boolean);

    constructor create(Aowner:tcomponent);override;

  protected
  public
    FFechaInforma : tdatetime;
  published
    //  Entrada Desde
    property Docnumero      :string    read FDocNumero     write FDocnumero;
    property DocFecha       :TDateTime read fDocFecha      write fDocFecha;
    property IdInsaldoFrm   :Integer   read FIdInsaldoFrm  write FIdInsaldoFrm;
    //  Entrada Destino
    property Cono_to        :string    read FCono_to       write FCono_to ;
    property ClfCod_to      :string    read FClfCod_to    write  FClfCod_to       ;

     // Salida
    property FlgError       :Boolean   read FFlgError      write FFlgError   ;
    property MsgError       :string    read FMsgError      write FMsgError;                        // write FMsgError
    function execute_reubica:Boolean ;

  end;

procedure Register;

implementation

 uses F, tablas, TABLASINV;       // datamodulos


Constructor  TINMOVTR.Create(Aowner:Tcomponent);
Begin
 inherited create(Aowner);
  Flg_DatasetOK := false;
  DocFecha  :=  date ;
  intramst      := TClientDataSet.Create(nil);
  insaldo_frm   := TClientDataSet.Create(nil);
  insaldo_to    := TClientDataSet.Create(nil);
End;

procedure TINMOVTR.CrearDataSets(var Flg_DatasetOK:Boolean);
begin
  intramst      := TClientDataSet.Create(self);
  insaldo_frm   := TClientDataSet.Create(nil);
  insaldo_to    := TClientDataSet.Create(nil);
  inmov_frm     := TClientDataSet.Create(self);
  InMov_to      := TClientDataSet.Create(self);
  PEDMST        := TClientDataSet.Create(self);


  Flg_DatasetOK := True;
end;


procedure Register;
begin
//  RegisterComponents('SEI-FECHAS', [TINMOVTR]);
end;

procedure TINMOVTR.CrearDataSets(var Flg_DatasetOK:Boolean);
begin
  intramst      := TClientDataSet.Create(self);   <----------------------??? usar nil o self
  insaldo_frm   := TClientDataSet.Create(nil);
  insaldo_to    := TClientDataSet.Create(nil);
 
  Flg_DatasetOK := True;
end;
......

Última edición por ASAPLTDA fecha: 15-03-2016 a las 16:03:43.
Responder Con Cita
  #2  
Antiguo 15-03-2016
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
No veo razón para que no se ejecute. Lo que sí, es que estás declarando un método CrearDataSets que no usas y estás creando los datasets tanto en el constructor como en dicho método.

Puedes usar self para el constructor. Si usas nil está bien, pero entonces debes asegurarte de destrurlos en el destructor de la clase.

LineComment Saludos
Responder Con Cita
  #3  
Antiguo 15-03-2016
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Y si colocáras el constructor en la sección public

Código Delphi [-]
Public

    constructor create(Aowner:tcomponent);override;

Saludos
Responder Con Cita
  #4  
Antiguo 15-03-2016
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 egostar Ver Mensaje
Y si colocáras el constructor en la sección public
Ja, ja. Sí, eso también puede ayudar

LineComment Saludos
Responder Con Cita
  #5  
Antiguo 15-03-2016
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
Y si colocáras el constructor en la sección public

Hola Egostar,

Efectivamente movi el constructor create(Aowner:tcomponent);override; desde el private a la seccion publica y funciono, ahora se crean los clientdataset

Hola Raman
Cambie la creacion de los tclientdataset a self para evitar evitar la destruccion manual

Gracias a Todos los del clubdelphi
Responder Con Cita
  #6  
Antiguo 16-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Justo hace poco con el compañero Al Gonzalez discutiamos sobre las ambiguedades que se puedan presentar en el codigo fuente

En este caso la clase tiene una variable privada Flg_DatasetOK de tipo Boolean

Código Delphi [-]
  TINMOVTR = class(TComponent)
  private
   ...
    Flg_DatasetOK :Boolean;
   ...

Luego, esta el metodo CrearDataSets que recibe por referencia un parametro Boolean tambien llamado Flg_DatasetOK


Código Delphi [-]
procedure TINMOVTR.CrearDataSets(var Flg_DatasetOK:Boolean);
begin
  intramst      := TClientDataSet.Create(self);
  insaldo_frm   := TClientDataSet.Create(nil);
  insaldo_to    := TClientDataSet.Create(nil);
  inmov_frm     := TClientDataSet.Create(self);
  InMov_to      := TClientDataSet.Create(self);
  PEDMST        := TClientDataSet.Create(self);


  Flg_DatasetOK := True;
end;

La linea subrayada es una asignacion ambigua; en Delphi estos "conflictos" se resuelven segun el orden de las referencias; en este caso, la referencia mas "cercana" es el parametro Flg_DatasetOK que recibe el metodo CrearDataSets ; por lo tanto, la variable de instancia Flg_DatasetOK queda "oculta"; la unica manera posible de referenciarla es indicandolo explicitamente, usando Self

Código Delphi [-]
  Self.Flg_DatasetOK

En definitiva, Self.Flg_DatasetOK no es el parametro pasado por referencia Flg_DatasetOK

Simplemente es una observacion, aunque no trivial; basicamente tu variable de instancia Flg_DatasetOK nunca se actualiza, y estos detalles no los informa el compilador
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Agregar Evento a una Clase FENIXadr Varios 6 12-04-2011 01:49:21
Pasar mi clase a una clase de 3 capas o lo mas parecido elarys OOP 2 07-04-2011 23:02:54
clase que contiene otra clase definida de forma posterior astwin OOP 5 20-02-2009 11:26:55
crear un evento en una clase? chelox OOP 4 06-06-2007 20:14:20
Llamar evento desde otro evento nachito_tuc OOP 1 23-08-2006 21:37:43


La franja horaria es GMT +2. Ahora son las 03:52:52.


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