procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;FieldType:TFieldType;typestr:string;
begin
  table2.close;
  table2.databasename:='dbdemos';
  table2.tablename:='clients.dbf';{ delphi自带的数据库 }
  table2.Open;
  table1.databasename:='dbdemos';
  table1.tablename:='mytable.dbf';{ fsize字段为N }
  table1.open;
  while not table1.eof do table1.delete;
  for i:= 0 to Table2.FieldDefs.Count-1 do
  begin
    table1.insert;
    Table1.FieldByName('fname').Asstring :=table2.fielddefs.items[i].name;
    Table1.FieldByName('fsize').asinteger :=table2.fielddefs.items[i].size;
    FieldType:=table2.fielddefs.items[i].datatype;
    {TFieldType不能简单地认为是Integer类型,虽然他是Integer的“集合”}
    case FieldType of
      ftString:typestr:='ftString';
      //ft...:typestr:='ft...';
    end;
    Table1.FieldByName('ftype').Asstring :=typestr;
    Table1.FieldByName('fdec').Asstring :=inttostr(table2.fielddefs.items[i].Precision);
  end;
  Table1.first;
  table1.Refresh;
end;
由于您给的数据库类型(DB or DBF),因Clients.dbf为DBF所以用DBase for Windows,但愿能解决您的问题

解决方案 »

  1.   

    其实你所需要做的事情是需要获得数据字段的定义是吧?就像EXPLORER做的那样,但是FieldDef下定义的Size呀,精确位这些的并不是数据表的结构定义,如果你要获得数据表的结构定义,你需要使用BDE的API函数,具体的参考你可以看一下Borland Database Engine Online Reference,在HELP菜单下的BDE帮助下面.
    其实需要注意的是FLDDesc结构,这个结构的数据由DbiGetFieldDescs函数获得,下面是一个例子:
    procedure ShowFields(T: TTable);var
       curProp: CURProps;
       pfldDes, pCurFld: pFLDDesc;
       i: Integer;          // counter
       MemSize: Integer;
       FieldList: string;
    begin
      Check(DbiGetCursorProps(T.Handle, curProp));
      MemSize := curProp.iFields * SizeOf(FLDDesc);
      pfldDes := AllocMem(MemSize);
      try
        pCurFld := pfldDes;
        Check(DbiGetFieldDescs(T.Handle, pfldDes));
        I := 0;
        FieldList := '';
        while (i < curProp.iFields) do begin
          FieldList := FieldList + Format('%d - %s'#13#10,[pCurFld^.iFldNum,
            pCurFld^.szName]);
          inc(pCurFld);
          inc(i);
        end;
      finally
        ShowMessage(FieldList);
        FreeMem(pfldDes, MemSize);
      end;
    end;FLDDesc结构的定义如下:
    iFldNum  整型数,表中字段的数据.
    szName  字段名
    iFldType  整型,字段类型
    iSubType 整型,字段副类型,如果有的话
    iUnits1  整型,指明字段的长度,如果字符型,则是字符长度,数据型,则是数据长度
    iUnits2  整型,如果是数据,则这个就是小数位.
    iOffset  整型,偏移量
    iLen  整型,字段在记录中的长度
    以下还有一些东西,我怕麻烦就不贴了,你自己查一查吧,得到这些数据,要填进一个表就很容易了,另外一句,你可以使用table.fieldvalues[Fieldname]来取得值或者设置值,这样也许你觉得更方便一些.