PDA

Ver la Versión Completa : Creación de TFields en Runtime


vinguel
16-11-2010, 10:08:20
Buenos días a todos. Estoy intentando crear los TField en runtime, pero solo me crea el último. Os pongo lo que intento hacer (Solo que la asignación de campos depende de un Array dinamico que recorro en un bucle)

procedure TForm5.FormShow(Sender: TObject);
Var
v_Ind : Integer;
v_TField : TStringField;
begin
// Qry -. TQuery
Qry.DisableControls;
v_TField := TStringField.Create(Self);
//
v_TField.FieldName := 'APT_CODAPT';
v_TField.DisplayLabel:= 'Código';
v_TField.Name := Qry.Name + v_TField.FieldName;
v_TField.Visible := True;
v_TField.Index := 0;
v_TField.DataSet := Qry;
Qry.FieldDefs.UpDate;
//
v_TField.FieldName := 'APT_NOMAPT';
v_TField.DisplayLabel:= 'Nombre';
v_TField.Name := Qry.Name + v_TField.FieldName;
v_TField.Visible := True;
v_TField.Index := 1;
v_TField.DataSet := Qry;
Qry.FieldDefs.UpDate;
//
Qry.Open;
Qry.EnableControls;
end;

Muchas gracias por adelantado.

Neftali [Germán.Estévez]
16-11-2010, 12:08:25
Así a primera vista sólo has realizado un Create de la clase TStringField. Para cada campo que quieras añadir debes crearlo; De esta forma, has creado uno y luego le has cambiado los valores, pero no has creado un segundo campo.

vinguel
16-11-2010, 12:38:36
Gracias por responder, si, es cierto. ¿Sabes si existe alguna manera en tiempo de ejecucion de agregar todos los campos tal cual los lee de la BBDD?

Neftali [Germán.Estévez]
16-11-2010, 13:31:57
Tal y como lo has hecho tú, pero utilizando un bucle para todos los campos de devuelve la consulta/tabla.

Delphius
16-11-2010, 14:32:52
¿Cuál es la idea u objetivo de esto?

Un TQuery o cualquier componente xxxQuery si no tiene campos persistentes y se ejecuta una instrucción SQL SELECT automáticamente crea los Fields en tiempo de ejecución que luego son liberados al momento de cerrar el DataSet.

Saludos,

vinguel
16-11-2010, 15:16:18
Ok, Muchisimas gracias a los dos.

Un saludo.