祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 9401|回复: 0

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

[复制链接]

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

[复制链接]
ehxz

主题

0

回帖

57万

积分

管理员

积分
570584
贡献
在线时间
小时
2011-8-6 09:37:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
我们在使用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'[dbo].[pbcatcol]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[pbcatcol]
GO

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

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

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

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

CREATE TABLE [dbo].[pbcatcol] (
     [pbc_tnam] [char] (30) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbc_tid] [int] NULL ,
     [pbc_ownr] [char] (30) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbc_cnam] [char] (30) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbc_cid] [smallint] NULL ,
     [pbc_labl] [varchar] (254) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbc_lpos] [smallint] NULL ,
     [pbc_hdr] [varchar] (254) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbc_hpos] [smallint] NULL ,
     [pbc_jtfy] [smallint] NULL ,
     [pbc_mask] [varchar] (31) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbc_case] [smallint] NULL ,
     [pbc_hght] [smallint] NULL ,
     [pbc_wdth] [smallint] NULL ,
     [pbc_ptrn] [varchar] (31) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbc_bmap] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbc_init] [varchar] (254) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbc_cmnt] [varchar] (254) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbc_edit] [varchar] (31) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbc_tag] [varchar] (254) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[pbcatedt] (
     [pbe_name] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
     [pbe_edit] [varchar] (254) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbe_type] [smallint] NOT NULL ,
     [pbe_cntr] [int] NULL ,
     [pbe_seqn] [smallint] NOT NULL ,
     [pbe_flag] [int] NULL ,
     [pbe_work] [char] (32) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[pbcatfmt] (
     [pbf_name] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
     [pbf_frmt] [varchar] (254) COLLATE Chinese_PRC_CI_AS NOT NULL ,
     [pbf_type] [smallint] NOT NULL ,
     [pbf_cntr] [int] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[pbcattbl] (
     [pbt_tnam] [char] (30) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbt_tid] [int] NULL ,
     [pbt_ownr] [char] (30) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbd_fhgt] [smallint] NULL ,
     [pbd_fwgt] [smallint] NULL ,
     [pbd_fitl] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbd_funl] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbd_fchr] [smallint] NULL ,
     [pbd_fptc] [smallint] NULL ,
     [pbd_ffce] [char] (32) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbh_fhgt] [smallint] NULL ,
     [pbh_fwgt] [smallint] NULL ,
     [pbh_fitl] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbh_funl] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbh_fchr] [smallint] NULL ,
     [pbh_fptc] [smallint] NULL ,
     [pbh_ffce] [char] (32) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbl_fhgt] [smallint] NULL ,
     [pbl_fwgt] [smallint] NULL ,
     [pbl_fitl] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbl_funl] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbl_fchr] [smallint] NULL ,
     [pbl_fptc] [smallint] NULL ,
     [pbl_ffce] [char] (32) COLLATE Chinese_PRC_CI_AS NULL ,
     [pbt_cmnt] [varchar] (254) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[pbcatvld] (
     [pbv_name] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
     [pbv_vald] [varchar] (254) COLLATE Chinese_PRC_CI_AS NOT NULL ,
     [pbv_type] [smallint] NOT NULL ,
     [pbv_cntr] [int] NULL ,
     [pbv_msg] [varchar] (254) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

CREATE  UNIQUE  CLUSTERED  INDEX [pbcatedt_idx] ON [dbo].[pbcatedt]([pbe_name], [pbe_seqn]) WITH  FILLFACTOR = 90 ON [PRIMARY]
GO

CREATE  UNIQUE  CLUSTERED  INDEX [pbcatfmt_idx] ON [dbo].[pbcatfmt]([pbf_name]) WITH  FILLFACTOR = 90 ON [PRIMARY]
GO

CREATE  UNIQUE  CLUSTERED  INDEX [pbcatvld_idx] ON [dbo].[pbcatvld]([pbv_name]) WITH  FILLFACTOR = 90 ON [PRIMARY]
GO

CREATE  UNIQUE  INDEX [pbcatcol_idx] ON [dbo].[pbcatcol]([pbc_tnam], [pbc_ownr], [pbc_cnam]) WITH  FILLFACTOR = 90 ON [PRIMARY]
GO

CREATE  UNIQUE  INDEX [pbcattbl_idx] ON [dbo].[pbcattbl]([pbt_tnam], [pbt_ownr]) WITH  FILLFACTOR = 90 ON [PRIMARY]
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 帆=====
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

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

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-4-24 06:43 , Processed in 0.079945 second(s), 7 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表