文档章节

PowerDesigner实用技巧小结

 如月王子
发布于 2017/02/27 19:32
字数 2015
阅读 21
收藏 1

1、ORACLE数据库建模时,由于ORACLE的表名、字段名如果是小写会有一定的麻烦,需要将小写转化为大写?
(1)在打开pdm的情况下,进入Tools-Model Options-Naming Convention,把Name和Code的标签的Charcter case选项设置成Uppercase就可以!
(2)如果仅想在preview这一层实现,也可以选择Database->Edit current database->Script->Sql->Format,有一项CaseSensitivityUsingQuote,它的 comment为“Determines if the case sensitivity for identifiers is managed using double quotes”,表示是否适用双引号来规定标识符的大小写, 可以看到右边的values默认值为“YES”,改为“No”即可!
建议使用方法(1)。
2、在PDM里,发现某些字段的类型不可改?
这可能是引用了DOMAIN的缘故,可以双击此列,进行更改。
3、PDM连接的数据库类型更改?
Database-Change/Edit Current Dbms...
4、PD中将Comment-Name拷贝VBS
在使用PowerDesigner对数据库进行概念模型和物理模型设计时,一般在NAME或Comment中写中文,在Code中写英文。Name用来显 示,Code在代码中使用,但Comment中的文字会保存到数据库Table或Column的Comment中,当Name已经存在的时候,再写一次 Comment很麻烦,可以使用以下代码来解决这个问题:
代码一:将Name中的字符COPY至Comment中

'****************************************************************************** 
'*   File:           name2comment.vbs 
'*   Purpose:     Database   generation   cannot   use   object   names   anymore   
'                         in   version   7   and   above. 
'                         It   always   uses   the   object   codes. 
' 
'                         In   case   the   object   codes   are   not   aligned   with   your   
'                         object   names   in   your   model,   this   script   will   copy   
'                         the   object   Name   onto   the   object   Comment   for   
'                         the   Tables   and   Columns. 
' 
'*   Title:         
'*   Version:     1.0 
'*   Company:     Sybase   Inc.   
'****************************************************************************** 
Option   Explicit 
ValidationMode   =   True 
InteractiveMode   =   im_Batch 
Dim   mdl   '   the   current   model 
'   get   the   current   active   model 
Set   mdl   =   ActiveModel 
If   (mdl   Is   Nothing)   Then 
      MsgBox   "There   is   no   current   Model " 
ElseIf   Not   mdl.IsKindOf(PdPDM.cls_Model)   Then 
      MsgBox   "The   current   model   is   not   an   Physical   Data   model. " 
Else 
      ProcessFolder   mdl 
End   If 
'   This   routine   copy   name   into   comment   for   each   table,   each   column   and   each   view 
'   of   the   current   folder 
Private   sub   ProcessFolder(folder) 
      Dim   Tab   'running     table 
      for   each   Tab   in   folder.tables 
            if   not   tab.isShortcut   then 
                  tab.comment   =   tab.name 
                  Dim   col   '   running   column 
                  for   each   col   in   tab.columns 
                        col.comment=   col.name 
                  next 
            end   if 
      next 
      Dim   view   'running   view 
      for   each   view   in   folder.Views 
            if   not   view.isShortcut   then 
                  view.comment   =   view.name 
            end   if 
      next 
      '   go   into   the   sub-packages 
      Dim   f   '   running   folder 
      For   Each   f   In   folder.Packages 
            if   not   f.IsShortcut   then 
                  ProcessFolder   f 
            end   if 
      Next 
end   sub 
-------------------------------------------- 


         另外在使用REVERSE ENGINEER从数据库反向生成PDM的时候,PDM中的表的NAME和CODE事实上都是CODE,为了把NAME替换为数据库中Table或Column的中文Comment,可以使用以下脚本:
代码二:将Comment中的字符COPY至Name中

Option   Explicit 
ValidationMode   =   True 
InteractiveMode   =   im_Batch 
Dim   mdl   '   the   current   model 
'   get   the   current   active   model 
Set   mdl   =   ActiveModel 
If   (mdl   Is   Nothing)   Then 
      MsgBox   "There   is   no   current   Model " 
ElseIf   Not   mdl.IsKindOf(PdPDM.cls_Model)   Then 
      MsgBox   "The   current   model   is   not   an   Physical   Data   model. " 
Else 
      ProcessFolder   mdl 
End   If 
Private   sub   ProcessFolder(folder) 
On Error Resume Next 
      Dim   Tab   'running     table 
      for   each   Tab   in   folder.tables 
            if   not   tab.isShortcut   then 
                  tab.name   =   tab.comment 
                  Dim   col   '   running   column 
                  for   each   col   in   tab.columns 
                  if col.comment="" then 
                  else 
                        col.name=   col.comment 
                  end if 
                  next 
            end   if 
      next 
      Dim   view   'running   view 
      for   each   view   in   folder.Views 
            if   not   view.isShortcut   then 
                  view.name   =   view.comment 
            end   if 
      next 
      '   go   into   the   sub-packages 
      Dim   f   '   running   folder 
      For   Each   f   In   folder.Packages 
            if   not   f.IsShortcut   then 
                  ProcessFolder   f 
            end   if 
      Next 
end   sub 
----------------------------------------------------------------------- 


以上两段代码都是VB脚本,在PowerDesigner中使用方法为:
    PowerDesigner->Tools->Execute Commands->Edit/Run Scripts
将代码Copy进去执行就可以了,是对整个CDM或PDM进行操作
5、如何根据字段的中文NAME,以其汉语拼音首字母取得CODE英文名?
在tools--> execute command 下执行 run script 的VB脚本:
chn_to_ps.vbs

Option Explicit 
ValidationMode = True 
InteractiveMode = im_Batch 

' get the current active model 
Dim mdl ' the current model 
Set mdl = ActiveModel 
If (mdl Is Nothing) Then 
MsgBox "There is no Active Model" 
Else 
ListObjects(mdl) 
End If 

'----------------------------------------------------------------------------- 
' Sub procedure to scan current package and print information on objects from current package 
' and call again the same sub procedure on all children pacakge 
' of the current package 
'----------------------------------------------------------------------------- 
Private Sub ListObjects(fldr) '列出所有的对象 
output "Scanning " & fldr.code 
Dim obj ' running object 
For Each obj In fldr.children 
' Calling sub procedure to print out information on the object 
'DescribeObject obj 
TableSetNameToCode obj 
Next 

' go into the sub-packages 
Dim f ' running folder 
For Each f In fldr.Packages '递归调用列出所有的对象 
'calling sub procedure to scan children package 
ListObjects f 
Next 
End Sub 

'----------------------------------------------------------------------------- 
' Sub procedure to print information on current object in output 
'----------------------------------------------------------------------------- 
Private Sub DescribeObject(CurrentObject) 
if not CurrentObject.Iskindof(cls_NamedObject) then exit sub 
output "Found "+CurrentObject.ClassName+" """+CurrentObject.Name+""", Created by "+CurrentObject.Creator+" On "+Cstr(CurrentObject.CreationDate)   
End Sub 
'常数 值 描述 
'vbCr Chr(13) 回车符。 
'vbCrLf Chr(13) & Chr(10) 回车符与换行符。 
'vbFormFeed Chr(12) 换页符;在 Microsoft Windows 中不适用。 
'vbLf Chr(10) 换行符。 
'vbNewLine Chr(13) & Chr(10) 或 Chr(10) 平台指定的新行字符;适用于任何平台。 
'vbNullChar Chr(0) 值为 0 的字符。 
'vbNullString 值为 0 的字符串 与零长度字符串 ("") 不同;用于调用外部过程。 
'vbTab Chr(9) 水平附签。 
'vbVerticalTab Chr(11) 垂直附签;在 Microsoft Windows 中不适用。 

Private Sub TableSetNameToCode(CurrentObject) 
if not CurrentObject.Iskindof(cls_Table) then exit sub 
'output "Found "+CurrentObject.ClassName+" """+CurrentObject.Name+""", Created by "+CurrentObject.Creator+" On "+Cstr(CurrentObject.CreationDate)   
    
if not CurrentObject.isShortcut then 
output CurrentObject.name 
CurrentObject.code = "T_"&GetPy( CurrentObject.name) 
CurrentObject.comment = CurrentObject.name & "_"&CurrentObject.code 
Dim col ' running column 
dim index1   
index1 = 0 
for each col in CurrentObject.columns 
dim str11 
str11 = GetPy( col.name)   
col.code = str11 & cstr(index1 ) 
col.Comment = col.name & "_" & col.code 
index1 = index1 + 1 
next 
end if   
    
End Sub 

'//生成汉字串首字母串 
function GetPy(strxx) 
dim i 
dim getpy1 
for i=1 to len(strxx) 
getpy1=getpy1 & getpychar(mid(strxx,i,1)) 

next 
output getpy1 
GetPy = getpy1 

End function 
'//获取汉字的首字母 

function getpychar(char) 
'0---9 , a---z , A---Z 
if ((asc(char) >= asc("0") and asc(char) <= asc("9")) or (asc(char) >= asc("A") and asc(char) <= asc("Z")) or (asc(char) >= asc("a") and asc(char) <= asc("Z")) or asc(char) = asc("_") ) then 
getpychar = char 
else 
dim tmpp:tmpp=65536+asc(char) 
if(tmpp>=45217 and tmpp<=45252) then 
getpychar= "A" 
elseif(tmpp>=45253 and tmpp<=45760) then 
getpychar= "B" 
elseif(tmpp>=45761 and tmpp<=46317) then 
getpychar= "C" 
elseif(tmpp>=46318 and tmpp<=46825) then 
getpychar= "D" 
elseif(tmpp>=46826 and tmpp<=47009) then 
getpychar= "E" 
elseif(tmpp>=47010 and tmpp<=47296) then 
getpychar= "F" 
elseif(tmpp>=47297 and tmpp<=47613) then 
getpychar= "G" 
elseif(tmpp>=47614 and tmpp<=48118) then 
getpychar= "H" 
elseif(tmpp>=48119 and tmpp<=49061) then 
getpychar= "J" 
elseif(tmpp>=49062 and tmpp<=49323) then 
getpychar= "K" 
elseif(tmpp>=49324 and tmpp<=49895) then 
getpychar= "L" 
elseif(tmpp>=49896 and tmpp<=50370) then 
getpychar= "M" 
elseif(tmpp>=50371 and tmpp<=50613) then 
getpychar= "N" 
elseif(tmpp>=50614 and tmpp<=50621) then 
getpychar= "O" 
elseif(tmpp>=50622 and tmpp<=50905) then 
getpychar= "P" 
elseif(tmpp>=50906 and tmpp<=51386) then 
getpychar= "Q" 
elseif(tmpp>=51387 and tmpp<=51445) then 
getpychar= "R" 
elseif(tmpp>=51446 and tmpp<=52217) then 
getpychar= "S" 
elseif(tmpp>=52218 and tmpp<=52697) then 
getpychar= "T" 
elseif(tmpp>=52698 and tmpp<=52979) then 
getpychar= "W" 
elseif(tmpp>=52980 and tmpp<=53688) then 
getpychar= "X" 
elseif(tmpp>=53689 and tmpp<=54480) then 
getpychar= "Y" 
elseif(tmpp>=54481 and tmpp<=62289) then 
getpychar= "Z" 
else '如果不是中文,则用''代替 
getpychar="" 
end if 
end if 

output getpychar + "---->" + cstr(tmpp) 
End Function  


注:可以根据实际情况需要,对脚本进行微调,如:根据名称生成注释等。
6、在查看编辑表时,可以一次选中多个列,然后对选中列的字段类型、主键等统一操作。
7、逻辑图形的显示
Tools/Model Options选项可以选择图形上是显示Name、Code;
Tools/Display Preferences可以选择图形上显示的项目,如数据类型等;
8、在修改name的时候,code的值将跟着变动
Tools/General Options 打开Dialog将Operating modes中的 Name To Code mirroring 將前面的勾去掉
9、sql语句中表名与字段名前的引号去除
  也可以选择Database->Edit current database->Script->Sql->Format,有一项CaseSensitivityUsingQuote,它的 comment为“Determines if the case sensitivity for identifiers is managed using double quotes”,表示是否适用双引号来规定标识符的大小写, 可以看到右边的values默认值为“YES”,改为“No”即可!,建议使用这种方法

进入Tools-Model Options-Naming Convention,把Name和Code的标签的Charcter case选项设置成Uppercase或者Lowercase,只要不是Mixed Case就行
10、批量生成测试数据
DataBase->Generation Test Data-> 在此项内,可自由选择、设置
11、根据中文名生成注释(通过4修改一下也可以,但效率太低)
cat Create_Comment_src_chn.vbs

Option Explicit 
ValidationMode = True 
InteractiveMode = im_Batch 

Dim mdl 'the current model 

'get the current active model 
Set mdl = ActiveModel 
If (mdl Is Nothing) Then 
MsgBox "There is no current Model" 
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then 
MsgBox "The current model is not an Physical Data model." 
Else 
ProcessFolder mdl 
End If 

'This routine copy name into code for each table, each column and each view 
'of the current folder 
Private sub ProcessFolder(folder) 
Dim Tab 'running table 
for each Tab in folder.tables 
if not tab.isShortcut then 
tab.comment = tab.name 
Dim col 'running column 
for each col in tab.columns 
col.comment= col.name 
next 
end if 
next 

Dim view 'running view 
for each view in folder.Views 
if not view.isShortcut then 
view.comment = view.name 
end if 
next 

'go into the sub-packages 
Dim f 'running folder 
For Each f In folder.Packages 
if not f.IsShortcut then 
ProcessFolder f 
end if 
Next 
end sub 


12、PDM或CDM连线添加或删除结点
CTRL+左键单击即可。

本文转载自:http://xls.iteye.com/blog/1534680

粉丝 15
博文 177
码字总数 3194
作品 0
淮安
私信 提问
【PPT分享】PowerDesigner10.0与模型驱动开发.ppt

作者简介 我的名字是王晓昀 (WANG Xiao Yun) 我于1978年上北京大学.只上了三个月. 我于1979年去法国上学 1986年大学毕业后在巴黎的SDP软件公司工作 1988年开始开发PowerDesigner 1989年开发在...

红薯
2010/09/03
1K
9
powerDesigner jdbc 链接不上mysql 的解决方案

powerDesigner连接数据库时出现的错误,表示找不到JDBC的驱动文件。 Could not load class com.mysql.jdbc.Driver 解决方案: 1. 将 mysql.jar 驱动包 复制到 powerDesigner 的安装根目录下;...

haopeng
2014/11/05
1K
0
PowerDesigner表名、列名大小写转换

方法一:不编写vbs PowerDesigner大小写转换,不用写vbscript,直接利用软件提供的功能即可完成转换,只需要选择 转换表名:菜单——ToolsModel Options...Naming ConvertionTable下 转换字段...

城邑耕夫
2012/04/07
2.8K
0
Powerdisigner使用

最近开发新项目正在设计数据库用到了PowerDesigner,在使用过程当中遇到了一些问题,在这里分享一下,以免大家在同样的问题上浪费时间。 刚开始下载了一个PowerDesigner16.5的安装包,安装好...

王子城
2018/08/31
60
0
PowerDesigner的网友评论

这不是一款免费或者开源的工具,但它却是数据库建模工具中的翘楚,因此列出以供参考。 PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有...

红薯
2009/12/11
789
2

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
2.9K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
5
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
12
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
69
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部