怎么样得到sql服务器里的表名?谢谢(100分)

  • 主题发起人 主题发起人 wddddd
  • 开始时间 开始时间
W

wddddd

Unregistered / Unconfirmed
GUEST, unregistred user!
利用session.gettablenames();可以得到DBDEMOS.ACCESS等类型的数据库表的名字,
但是怎么才能类似的查到sql服务器中的表的名字?
 
方法一:
procedure TForm1.Button1Click(Sender: TObject);
var
TableLists : TStringList;
begin
TAbleLists := TStringList.Create;
adoconnection1.GetTableNames(TableLists);
ListBox1.Items.Assign(TableLists);
end;

方法二:
select name from sysobjects where type = 'U' or type = 'S'
~~~~~~~~~~~ ~~~~~~~
用户表 系统表
 
执行系统存储过程sp_tables可以获得数据库所有表,再判断是否系统表还是用户表
 
还是bluerain的方法一较常用
 
Session.GetAliasNames(listbox1.items);
database1.aliasname:=listbox1.itmes[listbox1.itemindex];
Database1.GetTableNames(ListBox2.Items, False);
 
用 sp_tables的时候,我就是写:
sql.add ('sp_tables');
open;
很奇怪返回的结果集中值有Table_Type,Remarks字段的内容,其他字段的内容没有??
调用其他的系统存储过程也是一样,返回的结果集总是不完整。
不知怎么回事?
 
大家有没有遇到过与我相同的问题,是不是bde的问题。因为我在delphi sql explore里写
exec sp_tables也是一样的。(:
 
不会啊,在explore里面一样的,是不是它的自段太宽你没注意啊
 
研究一下TAdoTable的原代码,设定TableName时他的列表是怎么得来的
 
ADOConnection.GetTableNames(TableNamebox.Items,False);
此种方法可以得到SQL SERVER的数据库表名,
但不能得到ORACLE的数据库表名。
 
bluerain所言极是
 
ADO和直接使用BDE控件到底有什么区别?
 
要看sql中的数据表,须先知别名(数据库名)
我的系统维护便有这样的功能:
1、用bde:
Session.GetAliasNames(CbAlias.Items)取得别名
Session.GetTableNames(Cbalias.text,'',True,False,CbTable.Items)取得表名。
2、用查询语句,从sysobjects中找出type='U'的则是用户表。
3、用ADO连接时,adoconnect的gettablename(cbtable.items,false)
 
后退
顶部