Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Crear campos TFields en diseño (https://www.clubdelphi.com/foros/showthread.php?t=40225)

jlrbotella 09-02-2007 19:33:01

Crear campos TFields en diseño
 
Hola:

Actualmente tengo una Tabla llamada Pepe, con 2 campo (codigo y descripción), y me gustaría crear los campos de manera manual. Para ello tengo una clase TTable donde TableName = "pepe", pero no se como obtener los campos de la tabla, para modificar las propiedades de los TFields.


Gracias de antemano,

Saludos,
JL

Lepe 09-02-2007 19:48:05

¿Qué tipo de tablas son?

Si son planas (dbase, paradox), tienes el Database desktop.

con un query podrías hacerlo:
Código Delphi [-]
query1.sql.text := ' alter table add total numeric';
query1.Execsql

Es lenguaje DDL (Data Definition Language) de SQL, puedes hacerlo y bastante simple.

¿no te sirvió FieldDefs para ver los campos existentes :(?... raro... Si tienes alguna duda no dudes en preguntar.

Saludos

jlrbotella 09-02-2007 23:05:37

TFields
 
Hola:

Creo que no me he explicado bien. Cuando creamos un componente en modo diseño tipo TTable, con el botón de la derecha podemos añadir los campos que hay, así como la visualización y máscaras del campo.

Según lo que he leído hay que usar la función TfieldsDefs, pero no se donde puedo obtener ayuda.

Gracias,
JL

jhonny 09-02-2007 23:16:36

Espero que te sirva el siguiente ejemplo, asumiendo que vamos a crear el campo en un TQuery llamado Query1:
Código Delphi [-]
 
var
  Campo :TFloatField;
begin
  Campo := TFloatField.Create(Self);
  Campo.Precision := 15;
  Campo.FieldName := 'Nombre_Columna';
  Campo.Name := 'NombreDelCampo';
  Campo.DisplayLabel := 'CampoEnEjecucion';
  Campo.DisplayFormat := '###,###,###,###.00';
  Campo.DataSet := Query1;
  Query1.FieldDefs.UpDate;
end;

jlrbotella 12-02-2007 09:26:40

Hola:

Te he estado revisando el código anterior, y no logro entender la última línea de:

Query1.FieldDefs.UpDate;

Entiendo que lo que hace es actualizar la definición de la lista de campo de la consulta query1, pero cómo se liga el campo que has creado a la definición de los tfielddefs, ya que veo que el campo Tfloatfield lo ligas al dataset query1, pero no se liga al tfieldefs?.

Gracias por tu ayuda,
JL

jlrbotella 12-02-2007 10:02:59

Tfieldsdefs update
 
Hola:

Y por último, ¿cómo puedo modificar la propiedad de displaylabel o displayformat, de un campo previamente creado en modo diseño?.

Más o menos lo haría así, pero no me funciona, porque la propiedad displayname no esta tfielddef.


Código Delphi [-]

var
i : integer;
campo : TFieldDef;
begin
ifxtable1.FieldDefs.Update;
ifxtable1.indexdefs.update;
for i := 0 to ifxtable1.FieldDefs.Count - 1 do
begin
campo := ifxtable1.FieldDefs[i];
campo.displaylabel := 'Mi campo';
ifxtable1.FieldDefs[i].Assign(campo);
end;
ifxtable1.FieldDefs.Update;
ifxtable1.indexdefs.update;
end;

jlrbotella 12-02-2007 12:06:58

TFields
 
Hola:

Ya he podido modificar las propiedades de los campos de una tabla, usando la siguiente forma:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i : smallint;
begin
    for i := 0 to ifxtable1.FieldCount-1 do
    begin
        if ifxtable1.Fields[i].ClassName = 'TIntegerField' then
        begin
          (ifxtable1.Fields[i] as TIntegerField).DisplayFormat := '000';
        end;
    end;
end;

Pero no funciona si no obtienes la lista de fields desde el editor de comando, ¿alguién sabe como se hace esto en programación?.

Saludos,
JL

Lepe 12-02-2007 12:35:24

El campo creado, no tienes que agregarlo a FieldDefs, porque al asignar el Dataset de ese campo, delphi ya lo añade.

Para hacer lo que quieres:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i : smallint;
begin
    ifxtable1.FieldDefs.Update; // hacemos que se actualice la lista de campos
    for i := 0 to ifxtable1.FieldCount-1 do
    begin
        if ifxtable1.Fields[i].ClassType is TIntegerField then
        begin
          TIntegerField(ifxtable1.Fields[i]).DisplayFormat := '000';
        end;
    end;
end;

Saludos


La franja horaria es GMT +2. Ahora son las 16:38:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi