与Access数据库结构有关的一些函数

//与数据库结构有关的一些函数
//1、动态改变字段名称
uses ComObj;
//Access
//TableName: 表名; OldColName: 原字段名; NewColName: 新字段名;
procedure RenameField(const TableName, OldColName, NewColName: string);
var
  DB, Col: OleVariant;
begin
  DB := CreateOleObject('ADOX.Catalog');
  DB.ActiveConnection := ADOConnection1.ConnectionObject;
  Col := CreateOleObject('ADOX.Column');
  Col := DB.Tables[TableName].Columns[OldColName];
  Col.Name := NewColName;
end;

//SQLServer
procedure RenameField(const TableName, OldColName, NewColName: string);
begin
  with ADOCommand1 do
  begin
    CommandText := 'EXEC sp_rename ''' + TableName + '.' + OldColName +
      ''',''' + NewColName + ''',''COLUMN'';';
    Excute;
  end;
end;

2、取得 Access 库中的表结构
type
  TTableDef = record
    Name,
    DateCreated,
    LastUpdated,
    Description: string;
  end;

  TTableDefs = array of TTableDef;

procedure GetTableDefs(const DBName: string; out TableDefs: TTableDefs);
var
  DBEngine, DB: OleVariant;
  I: Longint;
begin
  try
    DBEngine := CreateOleObject('DAO.DBEngine.36');
    DB := DBEngine.OpenDatabase(DBName);
    SetLength(TableDefs, Longint(DB.TableDefs.Count));
    for I := Low(TableDefs) to High(TableDefs) do
    begin
      TableDefs[I].Name := DB.TableDefs[I].Name;
      TableDefs[I].DateCreated := DB.TableDefs[I].DateCreated;
      TableDefs[I].LastUpdated := DB.TableDefs[I].LastUpdated;
      try
        TableDefs[I].Description := DB.TableDefs[I].Properties['Description'].Value;
      except
        TableDefs[I].Description := '';
      end;
    end;
  finally
    DB := Unassigned;
    DBEngine := Unassigned;
  end;
end;

3、取得 Access 表中的字段结构
type
  TFieldDef = record
    Name: string;
    Types,
    Size: Longint;
    Description: string;
  end;

  TFieldDefs = array of TFieldDef;

procedure GetFieldDefs(const DBName, TableName: string; out FieldDefs: TFieldDefs);
var
  DBEngine, DB: OleVariant;
  I: Longint;
begin
  try
    DBEngine := CreateOleObject('DAO.DBEngine.36');
    DB := DBEngine.OpenDatabase(DBName);
    SetLength(FieldDefs, Longint(DB.TableDefs[TableName].Fields.Count));
    for I := Low(FieldDefs) to High(FieldDefs) do
    begin
      FieldDefs[I].Name := DB.TableDefs[TableName].Fields[I].Name;
      FieldDefs[I].Types := DB.TableDefs[TableName].Fields[I].Type;
      FieldDefs[I].Size := DB.TableDefs[TableName].Fields[I].Size;
      try
        FieldDefs[I].Description := DB.TableDefs[TableName].Fields[I].Properties['Description'].Value;
      except
        FieldDefs[I].Description := '';
      end;
    end;
  finally
    DB := Unassigned;
    DBEngine := Unassigned;
  end;
end;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值