[Lazarus-es] form: referenciar al padre

José Mejuto joshyfun en gmail.com
Mar Abr 12 19:24:10 CEST 2011


Hello Paola,

Monday, April 11, 2011, 4:27:21 PM, you wrote:

PB> si, esta es una pregunta tonta.. pero no me doy cuenta.

No, desde luego que no es tonta, es mucho más habitual de lo que crees
:)

[...]

PB> (o sea, NO estoy usando las variables globales de los formularios)
PB> Ahora.. en el form TEditMonedas, en el botón cancelar quiero hacer el
PB> cancelupdate de la tabla...
PB> como en los ejemplos que he hecho siempre usé las variables globales de
PB> los formularios, al hacer esto estaba listo:
PB>    ABMMonedas.dbMonedas.CancelUpdates;
PB> pero ahora.. sale un acces violation xq claro está, hay relajo con esto
PB> por el nombre ABMMonedas...
PB> cómo lo puedo solucionar?

Básicamente 2 formas, una es un "parche" para que mantengas el viejo
estilo, o sea, lo que estás usando y otra que sería a mi modo de verlo
más correcta:

1) Al viejo estilo:

   TABMMonedas(Self.Owner).dbMonedas.CancelUpdates;

2) El más correcto ?:

   El segundo formulario (donde pulsas Cancel) necesita saber una de
   dos cosas, o bien que el dbMonedas está en otro sitio, o bien que
   debe devolver un error si se pulsa cancel, o un ok si todo va bien.
   Si optas por el "error" simplemente alterando el valor que se
   devuelve en el ShowModal (ModalResult) tendrías suficiente, el
   trabajo lo haría el form padre al ver el error del hijo. Pero se
   puede dar el caso de que quieras cancelar la operación y no cerrar
   el form. En este caso lo lógico es crear una propiedad en el form
   que le diga o bien a qué método del form padre llamar para
   cancelar, o bien decirle que dataset está usando:

   FormHijo = class (TForm)
   private
      ......
      FMiDataSet: TDataSet;
   protected
      ......
   public
      ......
      property UseDataset: TDataSet read FMiDataSet write FMiDataSet;
   end;

   En el código pondrás algo como "FMiDataset.CancelUpdates".

   A la hora de mostrarlo:

   var
     f: TFormHijo;
   begin
     f:=TFormHijo.Create(Self);
     f.UseDataSet:=Self.dbMonedas;
     f.ShowModal;
     f.Free;
   end;

   Dependiendo de lo que hagas en el FormHijo sería más conveniente el
   método del ModalResult ( Sobre todo con cosas, tipo "¿ Está seguro
   ?") ) y como método general el segundo.

-- 
Best regards,
 José





More information about the Lazarus-es mailing list