高手请进(数据库)-再线等

zz5201314 2003-09-29 01:49:49
请问这样依次取出一个库中的每个表名 以及怎样从所取出的表中依次取出表的中每一个字段名以及其类型
...全文
46 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zpzs 2003-10-03
  • 打赏
  • 举报
回复
...
SolarMoon 2003-09-29
  • 打赏
  • 举报
回复
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;
dickeybird888 2003-09-29
  • 打赏
  • 举报
回复
哈哈好快啊!
zz5201314 2003-09-29
  • 打赏
  • 举报
回复
还想问兄弟们一个问题
我这样去判断这两个表中的记录是否完全一致呢?
tongki 2003-09-29
  • 打赏
  • 举报
回复
在窗体上放入一个TSESSION(BDE中),一个Tlistbox.
tongki 2003-09-29
  • 打赏
  • 举报
回复
Session1.GetAliasNames(ListBox1.Items); // 列出连接名称。
Session1.GetDatabaseNames(); //列出数据库名
Session1.GetTableNames();
Session1.GetFieldNames();
zz5201314 2003-09-29
  • 打赏
  • 举报
回复
谢谢各位
我用的是interbase
SolarMoon 2003-09-29
  • 打赏
  • 举报
回复
var

if pfun.pbIsLocalDataOk then
Form_Login.AdoConn_Local.GetTableNames(sstrLocalTable);
  • 打赏
  • 举报
回复
form1.Session1.GetTableNames(); //BDE
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;

。。。。。。。。。。。。。。。。。
tears0 2003-09-29
  • 打赏
  • 举报
回复
首先从sysobject表里的name字段可以取得表的名字,然后找到对应的id值
再根据找到的id值去syscolumns里查找是id的name,这些就是该表所有的字段
最后再根据字段后的xtype,去systypes里查找该字段所属的类型。
myhot-河马吃草 2003-09-29
  • 打赏
  • 举报
回复
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
HiMrXia 2003-09-29
  • 打赏
  • 举报
回复
什么数据库?
要是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
zz5201314 2003-09-29
  • 打赏
  • 举报
回复
不懂啊
能不能详细点点啊!
lqdmafeng 2003-09-29
  • 打赏
  • 举报
回复
看看对应数据库的系统表,你就明白了:)syscolumns,sysobjects

2,497

社区成员

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

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