ehxz 发表于 2011-8-6 09:37:14

如何利用好PowerDesigner中设计的字段的name属性

我们在使用PowerDesigner进行设计的时候 ,一个字段有其中文注释(或者中文属性),往往在使用过程中要用到这些属性,比如在进行查询、数据编辑的时候希望表格的标题用其中文名称来代替,而我查阅了很多资料,发现也有类似需求的,有的网友也提供了一些解决办法,但是我在比着他们提供的解决办法使用的过程中却并不成功,最后费尽周折,才找到这个问题的完美解决办法

1、问题的提出
在用PB+PD设计的数据库中,会在数据库中自动生成 PBCATTBL,PBCATCOL,PBCATFMT,PBCATEDT,PBCATVLD 五个表,在用PB设计数据窗口的时候,发现GRID的标题都用的是PD中字段对应的NAME,原因就是数据库字段的信息已经保存到这5个表中了,在使用PB设计的时候,字段信息添加和修改都是自动的(完全是因为PB和PD都是一家公司的,近水楼台先得月,哈哈)
要获得字段的NAME信息与两个表有关pbcatcol和pbcattbl ,从字面上看,一个管的是“表”一个管的是“字段”,没错,就是这样。
遗憾的是,我不用PB,但我喜欢用PD来设计数据库,在我们通过PD "Generate Database"菜单项来生成表的SQL的时候,没有NAME信息,通过PD直接连接数据库也无法生成这些内容,甚至生成不了PBCATTBL,PBCATCOL,PBCATFMT,PBCATEDT,PBCATVLD 这5个表。

2、查找问题
上网搜索了一番,发现问题的解决办法有点千篇一律(都解决不了我的问题)

下面是一个典型的网友的提问以及提供的解决办法(不是每次do能成功的)
问:
我用PowerDesigner生成了相应的PDM,其中每一张表的每一个列字段均有相应的中文注释,只是不知道如何连同这些中文注释一起生成至数据库中?请教各位!
========
答:
这一步是设置1.model->extended   model   definitions->import   an   extended   model   definitions->check   powerbuilder->ok   
2.profile->column->extended   attrible->label,comment,header   的default   value   =   %comment%->ok   
这一步是生成到PB中toods->powerbuilder   ->generate   powerbuilder   attribles   
这样就可以了   

我这样试了,结果不成功,提示是 (我发誓,PD通过ODBC正连着数据库的)


Starting PowerBuilder extended attribute generation:
Generating tables...
-> *******
Could not generate table: *******!(这是我的表)
-> Table2
Could not generate table: Table2!
-> Table3
Could not generate table: Table3!
-> Table4
Could not generate table: Table24!

**

3、解决问题
没办法,又上网查资料,发现通过PB来实现一点问题没有,而我的机器从来没安装过PB,是不是在执行过程中需要启动PB的插件??????
于是又翻了一下生成记录

还有一些网友说PD6以上没有这个功能,PB9以后又有了,我直接用的是PB9.5现在用的是PD12.0,

就结束了,再查看数据库,没有变化,傻眼了。
Starting PowerBuilder extended attribute generation:
Generating tables...
-> *******
Could not generate table: *******!(这是我的表)
-> Table2
Could not generate table: Table2!
-> Table3
Could not generate table: Table3!
-> Table4
Could not generate table: Table24!
**
发现我的猜测在一定程度上又可信度,因为生成的第一行就是
Starting PowerBuilder extended attribute generation:
看来,PBCATTBL,PBCATCOL,PBCATFMT,PBCATEDT,PBCATVLD 这5个表是PB自动生成的,我不用PB,干脆自动生成好了。
于是我从其他数据库,反生成了这5个表的结构
   if exists (select * from dbo.sysobjects where id = object_id(N'.') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table .
GO

if exists (select * from dbo.sysobjects where id = object_id(N'.') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table .
GO

if exists (select * from dbo.sysobjects where id = object_id(N'.') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table .
GO

if exists (select * from dbo.sysobjects where id = object_id(N'.') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table .
GO

if exists (select * from dbo.sysobjects where id = object_id(N'.') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table .
GO

CREATE TABLE . (
    (30) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    (30) COLLATE Chinese_PRC_CI_AS NULL ,
    (30) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    (254) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    (254) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    NULL ,
    (31) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    NULL ,
    NULL ,
    (31) COLLATE Chinese_PRC_CI_AS NULL ,
    (1) COLLATE Chinese_PRC_CI_AS NULL ,
    (254) COLLATE Chinese_PRC_CI_AS NULL ,
    (254) COLLATE Chinese_PRC_CI_AS NULL ,
    (31) COLLATE Chinese_PRC_CI_AS NULL ,
    (254) COLLATE Chinese_PRC_CI_AS NULL
) ON
GO

CREATE TABLE . (
    (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    (254) COLLATE Chinese_PRC_CI_AS NULL ,
    NOT NULL ,
    NULL ,
    NOT NULL ,
    NULL ,
    (32) COLLATE Chinese_PRC_CI_AS NULL
) ON
GO

CREATE TABLE . (
    (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    (254) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    NOT NULL ,
    NULL
) ON
GO

CREATE TABLE . (
    (30) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    (30) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    NULL ,
    (1) COLLATE Chinese_PRC_CI_AS NULL ,
    (1) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    NULL ,
    (32) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    NULL ,
    (1) COLLATE Chinese_PRC_CI_AS NULL ,
    (1) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    NULL ,
    (32) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    NULL ,
    (1) COLLATE Chinese_PRC_CI_AS NULL ,
    (1) COLLATE Chinese_PRC_CI_AS NULL ,
    NULL ,
    NULL ,
    (32) COLLATE Chinese_PRC_CI_AS NULL ,
    (254) COLLATE Chinese_PRC_CI_AS NULL
) ON
GO

CREATE TABLE . (
    (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    (254) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    NOT NULL ,
    NULL ,
    (254) COLLATE Chinese_PRC_CI_AS NULL
) ON
GO

CREATEUNIQUECLUSTEREDINDEX ON .(, ) WITHFILLFACTOR = 90 ON
GO

CREATEUNIQUECLUSTEREDINDEX ON .() WITHFILLFACTOR = 90 ON
GO

CREATEUNIQUECLUSTEREDINDEX ON .() WITHFILLFACTOR = 90 ON
GO

CREATEUNIQUEINDEX ON .(, , ) WITHFILLFACTOR = 90 ON
GO

CREATEUNIQUEINDEX ON .(, ) WITHFILLFACTOR = 90 ON
GO

从查询分析器中去执行了一遍,再执行上面的仁兄提供的解决办法
这一步是设置1.model->extended   model   definitions->import   an   extended   model   definitions->check   powerbuilder->ok   
2.profile->column->extended   attrible->label,comment,header   的default   value   =   %comment%->ok   
这一步是生成到PB中toods->powerbuilder   ->generate   powerbuilder   attribles   
这样就可以了   
真的可以了,爽

4、结束语
问题的关键是5个表,PB中是自动生成的,很多回答问题的人士是PB高手,没想到这5个表通过PD不能生成(至少PD默认设置的情况下不能生成),非PB用户只能手工生成了

通过下面的查询语句可以得到一个表的字段的一些属性,这里就不再多说了

SELECT a.name AS tablename, rtrim(b.name) AS colname, CASE WHEN h.id IS NOT NULL
      THEN 'PK' ELSE NULL END AS primarykey, b.length, type_name(b.xusertype)
      AS type, b.colstat
---Powerdesigner中文字段
,
colcnname=(SELECT top 1 x.pbc_hdr
FROM pbcatcol x INNER JOIN
      pbcattbl y ON x.pbc_tid = y.pbt_tid
WHERE (y.pbt_tnam = a.name) and (b.name=x.pbc_cnam))
---
FROM sysobjects a, syscolumns b LEFT OUTER JOIN
      sysproperties c ON b.id = c.id AND b.colid = c.smallid LEFT OUTER JOIN
      syscomments e ON b.cdefault = e.id LEFT OUTER JOIN
          (SELECT g.id, g.colid
         FROM sysindexes f, sysindexkeys g
         WHERE f.id = g.id AND f.indid = g.indid AND f.indid > 0 AND f.indid < 255 AND
               (f.status & 2048) <> 0) h ON b.id = h.id AND b.colid = h.colid
WHERE a.id = b.id AND a.id = object_id('" + _TableName + @"') --这里是需要的通过PD设计的表名
ORDER BY b.colid


====转载请注明出处QQ:3307812 帆=====
页: [1]
查看完整版本: 如何利用好PowerDesigner中设计的字段的name属性

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com