什么数据库? 要是SQL Server 你用select a.name 表名, case when d.keyno is null then null else d.keyno end 主外键顺序, b.name 字段名, c.name 字段类型, case when b.name in (N'nchar', N'nvarchar') then b.length/2 else b.length end 数据长度, case when c.name in (N'decimal',N'numeric') then ColumnProperty(object_id(a.name), b.name, N'Precision') else NULL end 精度, case when c.name in (N'decimal',N'numeric') then ColumnProperty(object_id(a.name), b.name, N'Scale') else NULL end 小数位, ColumnProperty(object_id(a.name), b.name, N'IsIdentity') 标识, case when (ColumnProperty(object_id(a.name), b.name, N'IsIdentity') <> 0) then CONVERT(nvarchar(40), ident_seed(a.name)) else null end 标识种子, case when (ColumnProperty(object_id(a.name), b.name, N'IsIdentity') <> 0) then CONVERT(nvarchar(40), ident_incr(a.name)) else null end 标识自增量, b.isnullable [允许空], f.text 默认值 from dbo.sysobjects a left join dbo.syscolumns b on a.id=b.id left join dbo.systypes c on b.xtype=c.xtype left join dbo.sysindexkeys d on a.id=d.id and b.colid=d.colid and d.indid=2 left join dbo.syscomments f on b.cdefault=f.id where a.xtype='U' order by a.name,b.colid
dim snp as new adodb.recordset dim str as string dim i as long str=" select * from 表名" snp.open str,连接 for i=0 to snp.fields.count-1 pring snp.fields(i)next snp.close
var sstrRemoteTable : Tstrings; sstrFieldName : TStrings; i, nCount : integer; begin sstrRemoteTable:=TStringList.create; if pbIsRemoteLinkOk then AdoConn_Remote.GetTableNames(sstrRemoteTable); .... AdoTable1.tablename:=sstrRemoteTable.strings[i]; AdoTable1.GetFieldNames(sstrFieldName); .... end; end;
要是SQL Server 你用select a.name 表名,
case when d.keyno is null then null else d.keyno end 主外键顺序,
b.name 字段名,
c.name 字段类型,
case when b.name in (N'nchar', N'nvarchar') then b.length/2 else b.length end 数据长度,
case when c.name in (N'decimal',N'numeric') then ColumnProperty(object_id(a.name), b.name, N'Precision') else NULL end 精度,
case when c.name in (N'decimal',N'numeric') then ColumnProperty(object_id(a.name), b.name, N'Scale') else NULL end 小数位,
ColumnProperty(object_id(a.name), b.name, N'IsIdentity') 标识,
case when (ColumnProperty(object_id(a.name), b.name, N'IsIdentity') <> 0) then CONVERT(nvarchar(40), ident_seed(a.name)) else null end 标识种子,
case when (ColumnProperty(object_id(a.name), b.name, N'IsIdentity') <> 0) then CONVERT(nvarchar(40), ident_incr(a.name)) else null end 标识自增量,
b.isnullable [允许空],
f.text 默认值
from dbo.sysobjects a
left join dbo.syscolumns b on a.id=b.id
left join dbo.systypes c on b.xtype=c.xtype
left join dbo.sysindexkeys d on a.id=d.id and b.colid=d.colid and d.indid=2
left join dbo.syscomments f on b.cdefault=f.id
where a.xtype='U'
order by a.name,b.colid
dim str as string
dim i as long
str=" select * from 表名"
snp.open str,连接
for i=0 to snp.fields.count-1 pring snp.fields(i)next
snp.close
再根据找到的id值去syscolumns里查找是id的name,这些就是该表所有的字段
最后再根据字段后的xtype,去systypes里查找该字段所属的类型。
form1.ADOConnection1.GetTableNames(); //ADO上面的两个方法即为BDE AND ADO的取表名的方法,其参数请参阅帮助文件。。取出字段类型为:procedure TForm1.Button1Click(Sender: TObject);
begin
case form1.Table1.Fields[1].DataType of
ftString:showmessage('str');
ftInteger:showmessage('int');
end;
end;
关于DATATYPE类型在帮助文件中这样定义:
Delphi syntax:type TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd);
只需要把所有的类型添加进CASE语句中即可。。取字段名也很简单:
方法名取属性:
property FieldName: String;
可以取出字段名。如果想取出所有的字段名和类型,只需要循环一下即可,基本功能例程如:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to form1.Table1.FieldCount-1 do
case form1.Table1.Fields[i].DataType of
ftString:showmessage('str');
ftInteger:showmessage('int');
end;
end;。。
Form_Login.AdoConn_Local.GetTableNames(sstrLocalTable);
我用的是interbase
Session1.GetDatabaseNames(); //列出数据库名
Session1.GetTableNames();
Session1.GetFieldNames();
sstrRemoteTable : Tstrings;
sstrFieldName : TStrings;
i, nCount : integer;
begin
sstrRemoteTable:=TStringList.create;
if pbIsRemoteLinkOk then
AdoConn_Remote.GetTableNames(sstrRemoteTable);
....
AdoTable1.tablename:=sstrRemoteTable.strings[i];
AdoTable1.GetFieldNames(sstrFieldName);
....
end;
end;