PDA

Ver la Versión Completa : Campos calculados


Parsec
25-06-2013, 19:34:19
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:
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
¿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:

...
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.