一、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)。
二、在PDM里,发现某些字段的类型不可改?
这多是引用了DOMAIN的缘故,能够双击此列,进行更改。
三、PDM链接的数据库类型更改?
Database-Change/Edit Current Dbms...
四、PD中将Comment-Name拷贝VBS
在使用PowerDesigner对数据库进行概念模型和物理模型设计时,通常在NAME或Comment中写中文,在Code中写英文。Name用来显 示,Code在代码中使用,但Comment中的文字会保存到数据库Table或Column的Comment中,当Name已经存在的时候,再写一次 Comment很麻烦,可使用如下代码来解决这个问题:
代码一:将Name中的字符COPY至Comment中sql
'****************************************************************************** '* 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进行操做
五、如何根据字段的中文NAME,以其汉语拼音首字母取得CODE英文名?
在tools--> execute command 下执行 run script 的VB脚本:
chn_to_ps.vbside
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
注:能够根据实际状况须要,对脚本进行微调,如:根据名称生成注释等。
六、在查看编辑表时,能够一次选中多个列,而后对选中列的字段类型、主键等统一操做。
七、逻辑图形的显示
Tools/Model Options选项能够选择图形上是显示Name、Code;
Tools/Display Preferences能够选择图形上显示的项目,如数据类型等;
八、在修改name的时候,code的值将跟着变更
Tools/General Options 打开Dialog将Operating modes中的 Name To Code mirroring 將前面的勾去掉
九、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就行
十、批量生成测试数据
DataBase->Generation Test Data-> 在此项内,可自由选择、设置
十一、根据中文名生成注释(经过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
十二、PDM或CDM连线添加或删除结点
CTRL+左键单击便可。this