|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?站点注册
×
我们在使用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 帆===== |
|