取得数据库的字段名。

frankho 2001-10-09 04:39:59
我想取得数据库的字段名。
...全文
61 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
frankho 2001-10-09
  • 打赏
  • 举报
回复
谢谢大家了:)
你们的回答都不错,每人都有分。
bitfan 2001-10-09
  • 打赏
  • 举报
回复
很容易嘛。我以前做过一个小工具,只要指明Access或SQLServer数据库的登录字串,就可以自动提取这一数据库的所有表和字段名生成一棵树,并得到所有字段的大小和类别等信息,然后可以直接打印。
现在给你我封装的一个类,用它你可以直接得到数据库的有关信息,不过ADO数据库连接字串可得你自己生成。
调用其方法后,访问对应属性得到需要的信息。
如果你感兴趣,可以邮给你工程源代码。

//-------------------------------------------------------
头文件:
class GetDatabaseInfo : public TObject
{
public:
bool __fastcall OpenDatabase(String strConn);
__fastcall GetDatabaseInfo();
__fastcall ~GetDatabaseInfo();
__property TStringList * pTableNames = { read=FpTableNames, write=FpTableNames }; //连接对象
bool __fastcall GetTableNames();
__property TStringList * pFieldNames = { read=FpFieldNames, write=FpFieldNames };
void __fastcall GetFieldNames(String TableName);
TField * __fastcall GetFieldObj(String TableName,String FieldName);

private:
TADOConnection * ADOConn;
TStringList * FpFieldNames;
TStringList * FpTableNames;
TADODataSet * pDataSet;
bool __fastcall OpenTable(String TableName);


};
//------------------------------------------------------
cpp文件


#include <vcl.h>
#pragma hdrstop

#include "GetDatabaseInfoUnit.h"


bool __fastcall GetDatabaseInfo::OpenDatabase(String strConn)
{
//按strConn连接字串打开数据库
try
{
ADOConn->ConnectionString =strConn;
ADOConn->LoginPrompt =false;
ADOConn->Open();

}
catch(Exception &E)
{
ShowMessage(E.Message);
return false;
}

return true;
}
//---------------------------------------------------------------------------

#pragma package(smart_init)


__fastcall GetDatabaseInfo::GetDatabaseInfo()
{
//在类的构造函数中生成有关的数据库对象
try
{
ADOConn=new TADOConnection(Application);
pDataSet=new TADODataSet(Application);
pDataSet->Connection =ADOConn;
pTableNames=new TStringList;
pFieldNames=new TStringList;

}
catch(Exception &E)
{
ShowMessage(E.Message);
ADOConn=NULL;
}


}

__fastcall GetDatabaseInfo::~GetDatabaseInfo()
{
//销毁对象
if(ADOConn!=NULL)
{
ADOConn->Close();
delete ADOConn;
}
if(pDataSet!=NULL)
{
pDataSet->Close();
delete pDataSet;
}
if(FpTableNames!=NULL)
{
delete FpTableNames;
}
if(FpFieldNames!=NULL)
delete FpFieldNames;
}

bool __fastcall GetDatabaseInfo::GetTableNames()
{
//读取数据库中的所有表名
try
{
ADOConn->GetTableNames(pTableNames,false);
}
catch(...)
{
return false;
}

return true;


}

void __fastcall GetDatabaseInfo::GetFieldNames(String TableName)
{

if(OpenTable(TableName))
{
pDataSet->GetFieldNames(FpFieldNames);
pDataSet->Close ();
}


}

TField * __fastcall GetDatabaseInfo::GetFieldObj(String TableName,String FieldName)
{
//获取字段信息
if(OpenTable(TableName))
{
return pDataSet->FieldByName(FieldName);
}
else
return NULL;
}

bool __fastcall GetDatabaseInfo::OpenTable(String TableName)
{
//打开表
String SQL="Select * from [" +TableName+ "]";
pDataSet->Close();
pDataSet->CommandText =SQL;
try{




//TExecuteOptions opt;
//opt<< eoAsyncExecute ;
//pDataSet->Requery(opt);
pDataSet->Open();
}
catch(...)
{
return false;
}
return true;
}
wjzhuang 2001-10-09
  • 打赏
  • 举报
回复
TField::DisplayName字段名称
TField::DataType字段数据类型
TField::DataSize 字段在内存中占有的字节数

TDataSet::FieldCount返回数据集中的字段数
如:
void __fastcall TForm1::Button1Click(..)
{
String info("表中的字段有:");
for(int i=0;i<=Table1->FieldCount;i++)
{
info = info + Table1->Fields->Fields[i]->FieldName ",";

}
ShowMessage(info);
}
rh 2001-10-09
  • 打赏
  • 举报
回复
for(int i=0;i<Table->FieldCount;i++)
TView->Items->AddChild(Node, Table->Fields->Fields[i]->FieldName);

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧