How to add a value to DBF

0

To read the .DBF file work as follows:

I use a TADOConnection, ConnectionString to:

Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=C:\_workspace\projects\DBFEditor\temp
To read the DBF file I use a TADOQuery setting the SQL property for the query:

Select * from <arquivodbf>

So I have these columns in my dbf file.

INDICE  NOME    COR ESTILO  ESCALA
100     SAOJOAO      18      0,00

I need to rename the INDEX column to ID , so I am doing this as follows:

  while not ADOQuery1.Eof do
    begin
      Adoquery1.Edit;
      ADOQuery1.FieldByName('NOME').TEXT:= 'ID';
      Adoquery1.Post;
      ADOQuery1.Next;
    end;

But I get the following result when opening my excel:

INDICE  NOME    COR ESTILO  ESCALA
 ID     SAOJOAO      18      0,00

How do I expect the result:

 ID        NOME    COR ESTILO  ESCALA
 100     SAOJOAO        18      0,00
    
asked by anonymous 19.10.2016 / 18:45

1 answer

0

I gave an example of how I could do it, as follows:

  

Declare no uses Data.DB, Datasnap.DBClient

var
  oCDSDados: TClientDataSet;
  iPos: Integer;
begin
  oCDSDados := TClientDataSet.Create(nil);
try
  oCDSDados.FieldDefs.Add('ID',ftInteger);
  oCDSDados.FieldDefs.Add('NOME',ftString,50);
  oCDSDados.FieldDefs.Add('COR_ESTILO',ftInteger);
  oCDSDados.FieldDefs.Add('ESCALA',ftFloat);
  oCDSDados.CreateDataSet;

  ADOQuery1.First;
  while not (ADOQuery1.Eof) do
  begin
    oCDSDados.Append;
    oCDSDados.FieldByName('ID').AsInteger         := ADOQuery1.FieldByName('INDICE').AsInteger;
    oCDSDados.FieldByName('NOME').AsString        := ADOQuery1.FieldByName('NOME').AsString;
    oCDSDados.FieldByName('COR_ESTILO').AsInteger := ADOQuery1.FieldByName('COR_ESTILO').AsInteger;
    oCDSDados.FieldByName('ESCALA').AsFloat       := ADOQuery1.FieldByName('ESCALA').AsFloat;
    oCDSDados.Post;
    ADOQuery1.Next;
  end;

  //Primeira linha para incluir os fields no Excel.
  for iPos := 0 to oCDSDados.FieldDefs.Count-1 do
  begin
    // para pegar os fields do ClientDataSet
    oCDSDados.FieldDefs[iPos].Name;
  end;

  oCDSDados.First;
  while not (oCDSDados.Eof) do
  begin
    //
    // ESTRUTA PARA MONTAR O DADOS NO EXCEL
    //

   oCDSDados.Next;
 end;
finally
  if (oCDSDados.Active) then
    oCDSDados.Close;
  FreeAndNil(oCDSDados);
end;
end;

I hope I have helped. Hugs!

    
19.10.2016 / 21:28