To Keiy(): 首先谢谢你的帮助! 我用的是TClientDataSet组件,我要写一个公用函数,比如说我对这个数据集进行插入操作提交时,我希望保存操作日志,此时要根据当前被操作的数据集TClientDataSet组件取得他所操作的数据表的表名,我想用CommandText属性来截取,但觉得不好,不知道有没有更好的方法? 我用的是Oracle数据库,好多表有双主键,想取出主键字段的名称,不知道如何取? 请各位大侠不吝赐教!!
你既然要做通用的,且用TClientDataSet,那只能通用CommandText来得到表名. 如果是oracle,在已知表名情况下可用: SELECT A.COLUMN_NAME , A.DATA_TYPE , A.DATA_LENGTH , A.DATA_PRECISION , A.DATA_SCALE FROM SYS.ALL_TAB_COLUMNS A WHERE ( (A.OWNER = 'SYSTEM') AND (A.TABLE_NAME = 'AAA1')) 得到表的定义,用: SELECT A.COLUMN_NAME FROM SYS.ALL_CONS_COLUMNS A,SYS.ALL_CONSTRAINTS B WHERE ( (A.TABLE_NAME=B.TABLE_NAME) and (A.OWNER=B.OWNER) AND (A.CONSTRAINT_NAME=B.CONSTRAINT_NAME) AND (A.OWNER = 'SYSTEM') AND (A.TABLE_NAME = 'AAA1') AND (B.CONSTRAINT_TYPE = 'P')) 可得到表的PrimaryKey (我从没用过双主键,我建双主键时报: ORA-02260: table can have only one primary key 不知你的双主键是怎样建成的?)
如果是表(BDE/ADO),可以用TTable/TADOTable的TableName得到它的表名,可用IndexDefs.Count得到索引字段个数,IndexDefs.Items[I].Fields得到它所有的索引字段名.对于大多数据库来说,主键(PrimaryKey)只能有一个,不知用你的什么数据库?
首先谢谢你的帮助!
我用的是TClientDataSet组件,我要写一个公用函数,比如说我对这个数据集进行插入操作提交时,我希望保存操作日志,此时要根据当前被操作的数据集TClientDataSet组件取得他所操作的数据表的表名,我想用CommandText属性来截取,但觉得不好,不知道有没有更好的方法?
我用的是Oracle数据库,好多表有双主键,想取出主键字段的名称,不知道如何取?
请各位大侠不吝赐教!!
如果是oracle,在已知表名情况下可用:
SELECT
A.COLUMN_NAME
, A.DATA_TYPE
, A.DATA_LENGTH
, A.DATA_PRECISION
, A.DATA_SCALE
FROM
SYS.ALL_TAB_COLUMNS A
WHERE ( (A.OWNER = 'SYSTEM') AND (A.TABLE_NAME = 'AAA1'))
得到表的定义,用:
SELECT
A.COLUMN_NAME
FROM
SYS.ALL_CONS_COLUMNS A,SYS.ALL_CONSTRAINTS B
WHERE ( (A.TABLE_NAME=B.TABLE_NAME) and (A.OWNER=B.OWNER) AND (A.CONSTRAINT_NAME=B.CONSTRAINT_NAME)
AND (A.OWNER = 'SYSTEM') AND (A.TABLE_NAME = 'AAA1')
AND (B.CONSTRAINT_TYPE = 'P'))
可得到表的PrimaryKey
(我从没用过双主键,我建双主键时报:
ORA-02260: table can have only one primary key
不知你的双主键是怎样建成的?)