Ver Mensaje Individual
  #12  
Antiguo 23-02-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Reputación: 21
gluglu Va por buen camino
... perdón por el rollo anterior. Me concentro ahora en vuestros comentarios.

DarKraZY : He entendido perfectamente. Dos pequeños comentarios a tu explicación. Falta 'Property' en el código expuesto y especificar que la 'Property' debe de ser definida tanto en Form2 como en Form3. En ningun caso esa propiedad se refiere al Form1. Sólo quería aclararlo para otros foristas.

Código Delphi [-]
TForm1 = class(TForm);
{...}
Procedure TForm1.ButtonClick(Sender: TObject);
begin
  Form2 := TForm2.Create(Self);
  Form2.DataSetForm := IBDataSet1;
end;

Código Delphi [-]
TForm2 = class(TForm);
...
private
  FDataSetForm : TIBDataSet;
public
  property DataSetForm: TIBDataSet read FDataSetForm write FDataSetForm;
end;

Procedure TForm2.ButtonClick(Sender: TObject);
var
  Aux : Integer;
begin
  Aux := DataSetForm.FieldByName('CAMPO1').Value;
  Form3 := TForm3.Create(Self);
  Form3.DataSetForm := DataSetForm;
end;

Código Delphi [-]
TForm3 = class(TForm);
...
private
  FDataSetForm : TIBDataSet;
public
  property DataSetForm: TIBDataSet read FDataSetForm write FDataSetForm;
end;
 
Procedure TForm3.ButtonClick(Sender: TObject);
var
  Aux : Integer;
begin
  // Aquí quiero acceder al IBDataSet1 contenido en Form1
  Aux := DataSetForm.FieldByName('CAMPO1').Value;
end;

Román : Pasar parámetros por propiedades. También lo entendí ya perfectamente. Quiero añadir un pequeño detalle que me he dado cuenta al implementarlo:

Código Delphi [-]
type 
  TForm3 = class(TForm)
  private
    FParam: Integer;
  public
    property Param: Integer read FParam write FParam;
  end;

Al construir el formulario en p.ej. Form2
Código Delphi [-]
procedure TForm2.ButtonClick(Sender: TObject);
  Form3 := TForm3.Create(Application);
  Form3.Param := 84;
end;

Me he dado cuenta, está claro, que durante la creación de Form3, el parámetro no está disponible. Por tanto tengo que reubicar todo aquello que dependa de ese parámetro a otro evento, por ejemplo el OnActivate del Form3.

Por último. Otro pequeño detalle referente a los campos de un IBDataSet cualquiera.

Al 'pasarlo' a otros formularios mediante la opción de 'property' siempre tengo que acceder a los valores utilizando FieldByName('CAMPO'). Me he dado cuenta en general en mi programa que al permitir utilizar valores null, si accedo al valor mediante IBDataSet1CAMPO.Value, si el campo es null me devuelve 0, tanto si es 0 como si es null. (Personalmente me viene bien que sea así, pero que dentro de la BD diferencie entre 0 y null).

En cambio si accedo por IBDataSet1.FieldByName('CAMPO').Value y preguntar por su valor, Delphi (2006 VCL.NET en mi caso) diferencia entre 0 y null y en un If tengo que preguntar ambas opciones:
Código Delphi [-]
if (IBDataSet1.FieldByName('CAMPO').IsNull) or
    (IBDataSet1.FIeldByName('CAMPO').Value = 0) then ...

Una vez más gracias a todos.

Estoy en ello ... como dice por ahí algún avatar !
__________________
Piensa siempre en positivo !
Responder Con Cita