Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2011-04

form: referenciar al padre

4 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Paola Bruccoleri

Hola a todos..

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

En el form ppal hago esto:
var f2: TABMMonedas;
          f2:= TABMMonedas.Create(Self);
          f2.Showmodal;
          f2.Free;

en el ABMMonedas, donde est� un tztable (dbMonedas) y su datasource, adem�s del cl�sico grid y los cl�sicos botones de agregar, etc.. En el bot�n agregar hago esto:

var
   f: TeditMonedas;
begin
   f:= TeditMonedas.Create(Self);
   dbMonedas.Append;
   f.caption:= 'Agregar registro';
   f.Showmodal;
   f.Free;
end;

(o sea, NO estoy usando las variables globales de los formularios)

Ahora.. en el form TEditMonedas, en el bot�n cancelar quiero hacer el cancelupdate de la tabla...
como en los ejemplos que he hecho siempre us� las variables globales de los formularios, al hacer esto estaba listo:

   ABMMonedas.dbMonedas.CancelUpdates;

pero ahora.. sale un acces violation xq claro est�, hay relajo con esto por el nombre ABMMonedas...

c�mo lo puedo solucionar?
muchas gracias a todos..
chauuuuuuuuu

Reply by email

Jorge Turiel
to Paola Bruccoleri

Hola, tienes varias opciones:
1) En el bot�n cancelar de tu TABMMonedas, cancela la operaci�n
2) Pones un DataModule en tu proyecto, y ah� dentro las tablas y los datasource. Llamas a tu formulario como hasta ahora, pero recoger el valor que devuelve, as�

  Retorno := f2.ShowModal;

Y analizas el valor de Retorno, as�
If retorno = mrCancel Then
Begin

  //Cancelar

end;

La ventaja de usar DataModule, es que cualquier formulario puede hacer uso de las tablas y componentes alojados en �l.

Saludos

El 11/04/2011 16:27, Paola Bruccoleri escribi�:

Show quoted text 46 lines
Hola a todos.. si, esta es una pregunta tonta.. pero no me doy cuenta. En el form ppal hago esto: var f2: TABMMonedas; f2:= TABMMonedas.Create(Self); f2.Showmodal; f2.Free; en el ABMMonedas, donde est� un tztable (dbMonedas) y su datasource, adem�s del cl�sico grid y los cl�sicos botones de agregar, etc.. En el bot�n agregar hago esto: var f: TeditMonedas; begin f:= TeditMonedas.Create(Self); dbMonedas.Append; f.caption:= 'Agregar registro'; f.Showmodal; f.Free; end; (o sea, NO estoy usando las variables globales de los formularios) Ahora.. en el form TEditMonedas, en el bot�n cancelar quiero hacer el cancelupdate de la tabla... como en los ejemplos que he hecho siempre us� las variables globales de los formularios, al hacer esto estaba listo: ABMMonedas.dbMonedas.CancelUpdates; pero ahora.. sale un acces violation xq claro est�, hay relajo con esto por el nombre ABMMonedas... c�mo lo puedo solucionar? muchas gracias a todos.. chauuuuuuuuu _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

Reply by email

José Mejuto
to Paola Bruccoleri: Hola a todos.. si, esta es una pregunta tonta.. pero no me doy cuenta. En el form ppal…

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�

Reply by email

Paola Bruccoleri
to José Mejuto

El 12/04/2011 02:24 p.m., Jos� Mejuto escribi�:

Show quoted text 49 lines
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.

Hola Jos�..(y Jorge tambi�n..)
muchas gracias por sus comentarios..
estuve justamente pensando en que la soluci�n vendr�a por el uso de las propiedades.. no se me ocurri� lo del modalresult.. Tambi�n estuve mirando que pod�a tener todas las tablas, querys, etc en el datamodule, pero all� por ahora solo tengo la conexi�n a la bd, y en los forms pongo lo otro que necesito..

probar� a ver que tal me va! y les cuento!

todo sea por la prolijidad jajajajaj

(PD: al final, no me di� el cuero para actualizar el lazarus el fin de semana... lo har� el siguiente...)
chauuuuuuuuuu

Reply by email