`
xls
  • 浏览: 110294 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

PowerDesigner实用技巧小结

 
阅读更多
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 
注:可以根据实际情况需要,对脚本进行微调,如:根据名称生成注释等。
5、在查看编辑表时,可以一次选中多个列,然后对选中列的字段类型、主键等统一操作。
6、逻辑图形的显示
Tools/Model Options选项可以选择图形上是显示Name、Code;
Tools/Display Preferences可以选择图形上显示的项目,如数据类型等;
7、在修改name的时候,code的值将跟着变动
Tools/General Options 打开Dialog将Operating modes中的 Name To Code mirroring 將前面的勾去掉
8、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就行
9、批量生成测试数据
DataBase->Generation Test Data-> 在此项内,可自由选择、设置
10、根据中文名生成注释(通过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
11、PDM或CDM连线添加或删除结点
CTRL+左键单击即可。
分享到:
评论

相关推荐

    PowerDesigner设计技巧

    【PowerDesigner设计技巧】 PowerDesigner是一款强大的数据建模工具,常用于数据库的设计和管理。它提供了从概念模型到物理模型的转换,支持多种数据库管理系统,包括E-R模型的设计。以下是一些关键知识点: 1. **...

    PowerDesigner 12.5实用培训教程ppt

    **PowerDesigner 12.5 实用培训教程** PowerDesigner是一款强大的数据建模工具,广泛应用于数据库设计、系统分析和企业架构规划。本教程将详细讲解PowerDesigner 12.5版本的各项功能及其在实际工作中的应用。 **一...

    powerdesigner的大小写转换脚本

    powerdesigner的大小写转换脚本,直接在powerdesigner里面找到执行脚本的地方,粘贴进去执行一下就可以了。 powerdesigner的大小写转换脚本 powerdesigner的大小写转换脚本

    PowerDesigner一些小技巧

    以下是一些关于PowerDesigner的小技巧: 1. **字段长度限制问题**: 当在Oracle数据库上生成建表脚本时,若字段长度超过15个字符,会遇到错误。这是因为Oracle默认的限制。解决方法是进入PDM的Database菜单,选择...

    PowerDesigner使用技巧

    PowerDesigner 使用技巧大全 PowerDesigner 是一款功能强大且流行的数据库设计工具,掌握 PowerDesigner 的使用技巧对于数据库设计和开发人员非常重要。下面将总结 PowerDesigner 的一些常用技巧和设置,帮助读者更...

    PowerDesigner 12使用心得

    PowerDesigner 12 使用心得 PowerDesigner 是一款功能强大的数据建模工具,广泛应用于数据库设计、开发和维护中。本文将对 PowerDesigner 12 的一些使用心得进行总结,包括安装、生成建表脚本、对象命名、报表模板...

    PowerDesigner 12.5实用培训教程.ppt

    PowerDesigner

    powerdesigner

    powerdesigner

    PowerDesigner一些使用技巧

    ### PowerDesigner 使用技巧详解 #### 一、找回丢失的工具栏 在使用 PowerDesigner 进行数据库设计时,有时会遇到工具栏意外消失的情况。若工具栏中的“调色板(Palette)”不见,可以通过以下步骤找回: 1. **打开...

    PowerDesigner设计技巧。。。

    PowerDesigner是一款强大的数据库建模工具,它允许设计者创建、管理和维护数据模型,包括概念模型、逻辑模型和物理模型。...在实际项目中,熟练掌握PowerDesigner的使用技巧,对于提升数据库设计的质量和效率至关重要。

    PowerDesigner12.5实用培训教程

    PowerDesigner12.5实用培训教程 PowerDesigner12.5实用培训教程

    powerdesigner物理数据模型使用技巧

    以下是对PowerDesigner物理数据模型管理实用技巧的详细说明: 1、**物理数据模型基本操作** - **新建PDM**:在PowerDesigner中,通过“File”&gt; “New Model”,选择“Physical Data”,设定模型名称和DBMS类型,...

    PowerDesigner 小技巧

    调色板(Palette)快捷工具栏不见了;如何把NAME 列在 scrip里显示出来;自增长列的设置;设置CDM生成PDM时的错误检查;禁止根据name自动输入code等

    powerdesigner教程实用教程

    《PowerDesigner实用教程详解》 PowerDesigner是一款强大的数据库设计与管理工具,广泛应用于软件开发、数据分析等领域。本教程旨在深入浅出地介绍PowerDesigner的基本功能和高级应用,帮助读者掌握这款工具,提升...

    PowerDesigner

    **PowerDesigner**是一款强大的数据库建模工具,广泛用于软件开发和数据分析领域。它提供了一整套数据建模、业务流程建模、系统分析和物理设计的功能,帮助用户创建高质量的数据模型,进而支持数据库的设计和优化。 ...

    powerdesigner常用知识小合集

    这个"powerdesigner常用知识小合集"涵盖了多个重要的使用场景,包括数据库设计、数据导入、数据库连接、显示外键名称、中文注释处理以及数据库表导出等。接下来,我们将深入探讨这些知识点。 1. **数据库设计**:...

Global site tag (gtag.js) - Google Analytics