ClientDataSet - criando campos e indices em runtime

Top  Previous  Next

// criando campos e indices de um ClientDataSet em Run-Time:

// tb = TClientdataSet

 

procedure TForm1.mlABtn1Click(Sender: TObject);

begin

  with Tb do

  begin

    with FieldDefs.AddFieldDef do

    begin

      DataType := ftInteger;

      Name     := 'Codigo';

    end;

    with FieldDefs.AddFieldDef do

    begin

      DataType := ftString;

      Size     := 10;

      Name     := 'Nome';

    end;

    with IndexDefs.AddIndexDef do

    begin

      Fields := 'nome';

      Name   := 'inome';

    end;

    CreateDataSet;

  end;

  Tb.Open;

end;

 

 

------------------------- feito por jr

 

procedure InsereCampoEmXML(const Arq: string; const NomeCampo, TipoEmXML: string);

var

  L: TStringList;

  S, Linha: string;

  I: Integer;

begin

  S := '<FIELD attrname="' + NomeCampo + '" fieldtype="' + TipoEmXML + '"/>';

 

  L := TStringList.Create;

  if not FileExists(Arq) then Exit;

  L.LoadFromFile(Arq);

  // a primeira linha contem a estrutura dos campos

  if Pos(Uppercase(S), Uppercase(L[0])) = 0 then

  begin

    I := Pos('</FIELDS>', Uppercase(L[0]));

 

    if I = 0 then

      msgErro('Cláusula </FIELDS> não encontrada!')

    else

    begin

      Linha := L[0];

      Insert(S,Linha,I);

      L[0] := Linha; 

    end;

 

    L.SaveToFile(Arq);

  end;

  L.Free;

end;

// está incompleto, falta tamanho e alteracao...