如何提取access数据库的系统信息,比如说每个表的每个字段名,数据类型,长度,以及说明

解决方案 »

  1.   

    说明用下面的函数取,速度可能有点慢uses comobj;function GetFiledDescript(FieldName: string): string;
    var
      DbEng: variant;
      TblDef: variant;
      DAOFld: Variant;
      Db: variant;
      i, j, k: integer;
    begin
      result := '';
      try
        DbEng := CreateOleObject('DAO.DBEngine.36');
        TblDef := CreateOleObject('DAO.TableDef.36');
        DAOFld := CreateOleObject('DAO.Field.36');    db := dbeng.OpenDatabase('db1.mdb'); // ACCESS文件    for i := 0 to db.TableDefs.Count - 1 do
        begin
          TblDef := db.TableDefs[i];
          for j := 0 to TblDef.Fields.Count - 1 do
          begin
            DAOFld := TblDef.Fields[j];
            if DAOFld.Name = FieldName then  // 在这里还可以加上对表的判断等
              for k := 0 to DAOFld.Properties.Count - 1 do
                if DAOFld.Properties[k].Name = 'Description' then
                begin
                  result := DAOFld.Properties[k].Value;
                  exit;
                end;
          end;
        end;
      finally
        DAOFld := unassigned;
        TblDef := unassigned;
        DbEng := Unassigned;
      end;
    end;
      

  2.   

    用TADODataset(dst_table),例如:
    dst_table.FieldCount;  //---?字段数
     for i := 0 to  dst_table.FieldCount - 1 do
      begin
        fieldname[i] := DM.dst_table.FieldDefs[i].Name;   //---?字段名
        fieldtype[i] := dm.dst_table.FieldByName(fieldname[i]).DataType;  //---?字段类型
      end;说明用cuteant 说的试试。
      

  3.   

    var
        name:   string;
        FieldType:   TFieldType;
        i,   size:   integer;
    begin
        for   i   :=   0   to   ads.Fields.Count   -   1   do
        begin
            name   :=   ads.Fields[i].FieldName;           //列名
            FieldType   :=   ads.Fields[i].DataType;   //字段类型
            size   :=   ads.Fields[i].DataSize;             //字段长度
        end;
    end; 
    不知字段是否允许为空如何判断。ads是adotable