Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Campos calculados (https://www.clubdelphi.com/foros/showthread.php?t=83511)

Parsec 25-06-2013 19:34:19

Campos calculados
 
Hola,

esto es algo que me tiene intrigado, no se porque se comporta de esta forma.
Tengo una Table con varios campos calculados y tengo activada la propiedad OnCalcFields de Table1 , cuando pongo en marcha el programa siempre entra 4 veces en la procedure:
Código Delphi [-]
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
      i:=I+1;
      Showmessage('Entra '+ IntToStr(I));
end;

¿Alguien me podría explicar porque entra siempre 4 veces, independientemente de los campos calculados que tenga?

Saludos

Casimiro Notevi 25-06-2013 20:12:24

Cita:

Empezado por Parsec (Mensaje 462772)
¿Alguien me podría explicar porque entra siempre 4 veces, independientemente de los campos calculados que tenga?

Sin ver tu código, no.
Aunque podemos imaginarlo.

marcoszorrilla 25-06-2013 20:18:22

¿Puede ser qué estés mostrando cuatro registros en una rejilla?

Un Saludo.

ecfisa 25-06-2013 21:17:23

Hola Parsec.

Coincido con Marcos, sin dudas es el caso.

El evento OnCalcFields se dispara cuando se cambia la fila activa de la tabla o cuando la propiedad AutoCalcFields esta activa y se produce alguna modificación en los campos de la primera.

La cantidad de veces que se dispare el evento OnCalcFields al abrir el DataSet, depende de la cantidad de filas que el componente requiera mostrar en ese momento.

Para comprobar esto de manera simple, agregá un ListBox y reducí el DBGrid para que muestre una sola fila y luego usa este código:
Código Delphi [-]
...
implementation 

var
  cont : Integer = 0;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DataSet.Open;
end;

procedure TForm1.DataSetCalcFields(DataSet: TDataSet);
begin
  ListBox1.Items.Add('CalcFields '+IntToStr(cont));   
  Inc(cont);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DBGrid1.Height := DBGrid1.Height + 50;
end;
Verás que a medida que el DBGrid crece en altura se van reflejando las ocurrencias en el ListBox.

Saludos :)

Parsec 26-06-2013 13:56:15

Ooohhh!, Claro!!, estoy un poco espeso.

Muchas gracias por vuestro tiempo.


La franja horaria es GMT +2. Ahora son las 12:21:18.

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