Ver Mensaje Individual
  #9  
Antiguo 01-03-2011
rchavezh rchavezh is offline
Miembro
 
Registrado: sep 2005
Ubicación: Guadalajara, Jalisco, México
Posts: 23
Reputación: 0
rchavezh Va por buen camino
Al parecer el orden de asignacion en delphi 2010 afecta por lo que actualizo la funcion

Código Delphi [-]
CrearCampoCalculado(DataSet :TDataSet; nombrecampo :string; tipo :TFieldType; longi :integer);
var
    f: TField;
    i: Integer;
begin
try
    //es necesario que antes estén definidos todos los campos persistentes
    DataSet.FieldDefs.Update;
    for i:=0 to DataSet.FieldDefs.Count - 1 do
        if DataSet.FindField(DataSet.FieldDefs[i].Name) = nil then
            DataSet.FieldDefs.Items[i].CreateField(DataSet);
    //ahora ya podemos comprobar el nuevo campo
    //antes comprobamos la existencia de otro campo con el mismo nombre
    if DataSet.FindField(nombrecampo) = nil then begin
        case tipo of
            ftString: f:=TStringField.Create(DataSet);
            ftInteger: f:=TIntegerField.Create(DataSet);
            ftFloat: f:=TFloatField.Create(DataSet);
            ftBoolean: f:=TBooleanField.Create(DataSet);
            //contempla aqui todos los tipos que necesites
            //lógicamente, dependerán de la bbdd que uses
            else GeneraLog('Tipo de campo no contemplado: ');
        end;
        if f <> nil then begin
            f.Name:=DataSet.Name+nombrecampo;
            f.FieldName:=nombrecampo;
            f.DisplayLabel:=nombrecampo;
            if tipo = ftString then
                f.Size:=longi;
            f.Calculated:=true;
            f.FieldKind := fkCalculated;
            f.DataSet:=DataSet;
        end;
    end;
except on e:exception do
    GeneraLog(e.Message);
end;

Última edición por rgstuamigo fecha: 01-03-2011 a las 22:11:26. Razón: Estética en el código Delphi
Responder Con Cita