comentToName支持多次运行已经移植过来的不会重复移植
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 Function CreateRegExp(pattern) dim result:set result=CreateObject("VBscript.RegExp") result.Global=true result.IgnoreCase=true result.Pattern=pattern result.MultiLine=true set CreateRegExp=result End Function Function IsRightText(text) if (Len(text)=0) then IsRightText=false exit function end if dim regex:set regex= CreateRegExp("^[a-zA-Z0-9_]+$") dim result:result=regex.Test(text) set regex=nothing IsRightText=result End Function Private sub ProcessFolder(folder) On Error Resume Next Dim Tab 'running table for each Tab in folder.tables if not tab.isShortcut then 'if IsRightText(tab.name) then tab.name = tab.Code + mid(tab.comment,1,10) 'end if Dim col ' running column for each col in tab.columns if col.comment="" then else if IsRightText(col.name) then col.name = mid(col.comment,1,8) end if 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
code转大写upcode
'****************************************************************************** '* File: code2name.vbs '* Title: Code to Name Conversion '* Purpose: To ' '* Model: Physical Data Model '* Category: Naming Standards '* Author: Matt Creason - Sr. System Consultant - Sybase, Inc. '* Created: Apr 8, 2005 '* Mod By: '* Modified: '* Version: 1.0 '* Comment: '* v1.0 - Must have Conversion Tables assigned as a model option '****************************************************************************** Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl ' the current model Dim opt ' model options ' 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 Set opt = mdl.GetModelOptions() opt.EnableNameCodeTranslation = true opt.save opt.UpdateModelOptions ' need to call this you have made changes ProcessFolder End If ' This routine transform code into name for each table, each column of the current folder Private sub ProcessFolder Dim obj, tbl, col for each tbl in mdl.Tables Dim codeToName, cTN for each codeToName in opt.CodeNamingConventions if (codeToName.Name = tbl.ObjectType) then 'output "Converting " + codeToName.Name + " " + tbl.Code + " code to name using " + codeToName.Script 'tbl.Name = tbl.EvaluateText(codeToName.Script) tbl.code= UCase(tbl.code) for each col in tbl.Columns for each cTN in opt.CodeNamingConventions if (cTN.Name = col.ObjectType) then 'output "Converting " + cTN.Name + " " + col.Code + " code to name using " + cTN.Script 'col.Name = col.EvaluateText(cTN.Script) col.code= UCase(col.code) end if next next end if next next end sub
在使用PowerDesigner对数据库进行概念模型和物理模型设计时,一般在NAME或Comment中写中文,在Code中写英文。Name 用来显 示,Code在代码中使用,但Comment中的文字会保存到数据库Table或Column的Comment中,当Name已经存在的时候,再写一次 Comment很麻烦,可以使用以下代码来解决这个问题:
- 代码一:将Name中的字符COPY至Comment中
Option Explicit
ValidationMode = True
InteractiveMode = im_BatchDim 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
nextDim 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_BatchDim 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 IfPrivate 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
nextDim 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进行操作