如何取出当前数据集所操作的表名及此表中的主键个数及主键字段名称呢?

解决方案 »

  1.   

    不知你所说当前数据集是指什么?是dbgrid指向的dataset?
    如果是表(BDE/ADO),可以用TTable/TADOTable的TableName得到它的表名,可用IndexDefs.Count得到索引字段个数,IndexDefs.Items[I].Fields得到它所有的索引字段名.对于大多数据库来说,主键(PrimaryKey)只能有一个,不知用你的什么数据库?
      

  2.   

    To Keiy():
    首先谢谢你的帮助!
    我用的是TClientDataSet组件,我要写一个公用函数,比如说我对这个数据集进行插入操作提交时,我希望保存操作日志,此时要根据当前被操作的数据集TClientDataSet组件取得他所操作的数据表的表名,我想用CommandText属性来截取,但觉得不好,不知道有没有更好的方法?
    我用的是Oracle数据库,好多表有双主键,想取出主键字段的名称,不知道如何取?
    请各位大侠不吝赐教!!
      

  3.   

    你既然要做通用的,且用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
    不知你的双主键是怎样建成的?)
      

  4.   

    多谢Keiy()老兄,问题已经搞定!