我想在delphi中获取元数据,包括有哪些表,每张表的属性,每张表包括哪些字段,每个字段的类型属性等信息。该用什么数据访问控件?怎么用?多谢了!!
解决方案 »
- form显示后,进度条直接运行,如何实现?
- 多线程 图像控件显示出错?
- 我在tPanel 组件上 添加了TSpeedButton 。但是TSpeedButton的Down属性用不了,怎么办?
- 散分!散分!散分!散分!
- 请教一个ExcelApplication的问题?
- 下班回来的路上,我被一群拿着摄像机的PLMM拦住了,散分……
- 大家快来帮忙,很急..
- 一个概念性的问题...
- 如何彻底删除vfp数据?我不是来凑热闹。
- 菜上菜问题,欢迎指教(Invality TypeCast错误问题及AddExitProc函数使用问题)。
- 我的ADSL只能上QQ,不可以访问IE,也不是DNS的问题,只是一般发生在下午
- 数据库问题!!!
那本
delphi7 高效數據庫編程
就有啊
另:使用BDE,ADO数据库控件时,字段信息里也包含但前表或查询语句的字段信息。
但我也要每张表的属性,每张表包括哪些字段,每个字段的类型属性等信息。请大侠指点哦~~
例子如下:
获取表名列表:
ADOConnection1.GetTableNames(ListBox1.Items,False);获取属性名列表:
ADOConnection1.GetFieldNames('Employee', ListBox1.Items);但是要获得字段名的属性就好像实现不了了!而且我要用代码实现建立access数据库,用ADO好像也实现不了!
怎么办?能否给我一个使用ADOX的例子?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, ADOX_TLB;type
TForm1 = class(TForm)
ListBox_Table: TListBox;
ListBox_Field: TListBox;
ADOConnection1: TADOConnection;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
GroupBox1: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label9: TLabel;
Label10: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit6: TEdit;
Button2: TButton;
Edit5: TEdit;
procedure Button1Click(Sender: TObject);
procedure ListBox_TableClick(Sender: TObject);
procedure ListBox_FieldClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
adoxCatalog : _Catalog;
adoxTables : Tables;
adoxTable : _Table;
adoxColumns : Columns;
adoxColumn : _Column;
adoxIndexes : Indexes;
adoxIndex : _Index;
adoxKeys : Keys;
adoxKey : _Key; function GetADOXFieldType(aType : DataTypeEnum): String;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
AdoConnection1.GetTableNames(ListBox_Table.Items,False);
//AdoX连接到数据源
adoxCatalog.Set_ActiveConnection(AdoConnection1.ConnectionObject);
adoxTables := adoxCatalog.Tables;
end;procedure TForm1.ListBox_TableClick(Sender: TObject);
var
TableName : string;
iCount : integer;
begin
TableName := ListBox_Table.Items[ListBox_Table.itemIndex];
AdoConnection1.GetFieldNames(TableName,ListBox_Field.Items); //连接到当前数据表
for iCount := 0 to adoxTables.Count - 1 do
begin
adoxTable := adoxTables.Item[iCount];
if adoxTable.Name = TableName then
break;
end;
end;function TForm1.GetADOXFieldType(aType : DataTypeEnum): String;
begin
case aType of //
adEmpty : Result := 'adEmpty';
adTinyInt : Result := 'adTinyInt';
adSmallInt : Result := 'adSmallInt';
adInteger : Result := 'adInteger';
adBigInt : Result := 'adBigInt';
adUnsignedTinyInt : Result := 'adUnsignedTinyInt';
adUnsignedSmallInt : Result := 'adUnsignedSmallInt';
adUnsignedInt : Result := 'adUnsignedInt';
adUnsignedBigInt : Result := 'adUnsignedBigInt';
adSingle : Result := 'adSingle';
adDouble : Result := 'adDouble';
adCurrency : Result := 'adCurrency';
adDecimal : Result := 'adDecimal';
adNumeric : Result := 'adNumeric';
adBoolean : Result := 'adBoolean';
adError : Result := 'adError';
adUserDefined : Result := 'adUserDefined';
adVariant : Result := 'adVariant';
adIDispatch : Result := 'adIDispatch';
adIUnknown : Result := 'adIUnknown';
adGUID : Result := 'adGUID';
adDate : Result := 'adDate';
adDBDate : Result := 'adDBDate';
adDBTime : Result := 'adDBTime';
adDBTimeStamp : Result := 'adDBTimeStamp';
adBSTR : Result := 'adBSTR';
adChar : Result := 'adChar';
adVarChar : Result := 'adVarChar';
adLongVarChar : Result := 'adLongVarChar';
adWChar : Result := 'adWChar';
adVarWChar : Result := 'adVarWChar';
adLongVarWChar : Result := 'adLongVarWChar';
adBinary : Result := 'adBinary';
adVarBinary : Result := 'adVarBinary';
adLongVarBinary : Result := 'adLongVarBinary';
adChapter : Result := 'adChapter';
adFileTime : Result := 'adFileTime';
adPropVariant : Result := 'adPropVariant';
adVarNumeric : Result := 'adVarNumeric';
end; // case
end;procedure TForm1.ListBox_FieldClick(Sender: TObject);
var
str : string;
iCount,i : Integer;
aType : DataTypeEnum;
begin
//清空edit1-edit5
Edit1.Text := '';
Edit2.Text := '';
Edit3.Text := '';
Edit4.Text := '';
Edit5.Text := '';
Edit6.Text := ''; //连接到当前所选数据行
adoxColumns := adoxTable.Columns;
iCount := ListBox_Field.ItemIndex;
adoxColumn := adoxColumns.Item[iCount]; //获取字段详细信息
//1、获取字段名
Edit1.Text := ListBox_Field.Items[ListBox_Field.ItemIndex];
//2、获取数据类型
Edit2.Text := GetADOXFieldType(adoxColumn.Type_);
//3、获取声明字段大小
Edit3.Text := IntToStr(adoxColumn.DefinedSize);
//4、获取主键及外键
//获取当前表所有的关键字
adoxKeys := adoxTable.Keys;
if adoxKeys.Count <> 0 then
begin
//遍历所有关键字(key),从中获取主键(PK)及外键(FK)
for iCount := 0 to adoxKeys.Count - 1 do
Begin
adoxKey := adoxKeys.Item[iCount];
str := adoxKey.Columns.Item[0].Name; //当前key
if Edit1.Text = str then
begin //判断是主键or外键
case adoxKey.type_ of
AdKeyPrimary : Edit5.Text := '是'; //主键
AdKeyForeign : Edit6.Text := '是'; //外键
end;//end case
end;//end if
End;//end for
end;//end if adoxKey.Count <> 0
if Edit5.Text = '' then Edit5.Text :='否';
if Edit6.Text = '' then Edit6.Text :='否';end;procedure TForm1.FormCreate(Sender: TObject);
begin
adoxCatalog := CoCatalog.Create;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
//将adoxCatalog清空
adoxCatalog := nil;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;end.
在Delphi7中选择Project|Import Type Library菜单,然后在Import Type Library对话框中选择Microsoft ADO Ext.对象,此时Class names中会产生三个类别:TTable,TColumn和TIndex,这三个名称和Delohi本身的VCL组件有冲突,重命名之为TADOTable,TADOColumn和TADOIndex.这样就可以使用ADOX对象了.
______________http://hthunter.vicp.net/