在Delphi中如何取得SQL Server中表的类型(Type)?(66分)

  • 主题发起人 主题发起人 李长柱
  • 开始时间 开始时间

李长柱

Unregistered / Unconfirmed
GUEST, unregistred user!
在使用SQL Server 7.0建立输入数据库时,会自动生成Type为System的系统
表,用户自建的表的Type为User,那么在Delphi如何取得他们的Type属性呢?
我是想区别自己建的表和系统表。
 
1)系统表的名称是固定的
2)sysobjects中存放数据库中所有对象的信息。
所以:
select name,uid from sysobjects where type='u'
可以列出所有当前库中的用户表name,id
 
g622:
我在Delphi使用TQuery构件对SysObjects数据库查询,无法查询到Name字段,
其它字段均可以查到,请问为什么?
 
SysObjects表中的name字段定义为sysname(128),非SQL数据类型。delphi进行绑定时无法识别。我以前试过一个笨方法,用sql server的osql工具,具体用法你可查一下,很简单。将osql查询结果输出到文件,从文件即可取出name字段。后来试出了一个简单方法,可惜我想不起来了。hehe...
 
试一试:
用存储过程,把name放在char类型的参数中output.
 
g622:
我曾试该方法,但不知道具体怎么办,你能详细说明一下吗?
 
seems to be:
helptext tablename ?
helpsql tablename?
 
难道没有别的办法了吗?
 
把g622的查询写成存储过程如下:
CREATE PROCEDURE [sys_obj] AS
select * from sysobjects where type='u'
在delphi中执行它就能返回所有用户表的名称了.
 
gxg8816:

你的方法我已经试过了,还是得不到Name字段,不知道是怎么回事。
 
我的DBGrid中已经显示出了名称,DBGrid的数据源为该存储过程
 
jcp说过,SysObjects表中的name字段定义为sysname(128),非SQL数据类型。delphi进行绑定时无法识别,直接使用SQL可能不行,那么该用什么呢?
 
我是使用Session.GetTableNames()获得表的名称,
但是过滤不掉SQL Server 7.0中非'U'类型的表,系统表也混在里面,
如何过滤掉系统表?
无论有什么方法只要能得到并只得到自己建立的表都行?
 
用存储过程:
sp_tables_rowset tablename

如果是系统表,TABLE_TYPE字段值为SYSYTEM TABLE
如果是用户表,TABLE_TYPE字段值为TABLE
 
多人接受答案了。
 
后退
顶部