powerdesigner显示注释

时间:2025-02-15 10:36:01

 Name是名称(字段描述),Code是字段名称,Comment是注释名称,ER图中显示的是Name。一般设计时,Name跟comment都设计成描述,

而设计时候常把comment写成中文,name保留跟code一致,保存完毕后,可以把comment替换到name上。当然也可以用name替换comment。具体方法如下:

12版:

1、在ER图模式下,去增加commit属性的显示
2、Tools下增加一个vbs的脚本,可以将name内容替换为注释内容

15版:
Tools->Display Preferences->Content->Table->Advanced...->Columns->select


选中Code后,将它上移到第一位


这样可以将code、name、type三项显示在ER图中,然后运行脚本,将注释comment的内容替换到code或name中,即可。

脚本如下:

'******************************************************************************
'* File:     
'* Purpose: 在PowerDesigner的PDM图形窗口中显示数据列的中文注释
'* Title:    将字段的comment赋值到字段的code中
'* Category: 打开物理模型,运行本脚本(Ctrl+Shift+X)
'* Copyright:foxzz@,2006/07/25 .
'* Author:   foxzz
'* Created:
'* Modified:
'* Version: 1.0
'* Comment: 遍历物理模型中的所有表,将字段的comment赋值到字段的code中。
'            在将code置换为comment过程中,需要考虑的问题
'            1、code必须唯一,而comment有可能不唯一。
'               处理办法是如果字段的comment重复,则字段的code=comment+1、2、3...
'            2、comment值有可能为空,这种情况下对字段的code不处理。
'               针对oracle数据库,将comment on column 字段名称 is '';添加到C:\文件中。
'               在补充comment完毕后,便于在数据库中执行      
'******************************************************************************

Option Explicit
ValidationMode = True
InteractiveMode = im_Batch

Dim system, file
Set system = CreateObject("")
Dim ForReading, ForWriting, ForAppending   '打开文件选项
ForReading   = 1 ' 只读
ForWriting   = 2 ' 可写
ForAppending = 8 ' 可写并追加
'打开文本文件
Set file = ("C:\", ForWriting, true)


'判断当前model是否物理数据模型
Dim mdl
Set mdl = ActiveModel
If (mdl Is Nothing) Then
   MsgBox "处理对象无模型"
ElseIf Not (PdPDM.cls_Model) Then
   MsgBox "当前模型不是物理数据模型"
Else
   ProcessFolder mdl,file
End If



'******************************************************************************
Private sub ProcessFolder(folder,file)

Dim i,j,k
i=0:j=0:k=0

'列数组,记录字段里不重复的comment
Dim ColumnComment()
Dim ColumnCommentNumber()
ReDim Preserve ColumnComment(i)
ReDim Preserve ColumnCommentNumber(i)

Dim tbl   '当前表
Dim col   '当前字段
dim curComment '当前字段comment

'处理模型中的表
for each tbl in 
    if not  then
       if len(trim())<>0 then
          '可以在这里显示table的comment
          ' = +"("+trim()+")"
       end if 

       '处理表中的列
       for each col in 
           k = 0
           curComment = trim()
           if len(curComment)<>0 then
              '遍历相异的comment数组
              for j = 0 to i
                  if ColumnComment(j) = curComment then
                     '如果找到相同的comment,则相关计数器加1
                     ColumnCommentNumber(j) = ColumnCommentNumber(j) + 1
                     k = j
                  end if
              Next
              '如果没有相同的comment,则k=0,此时ColumnCommentNumber(0)也为0
              '否则ColumnCommentNumber(k)不为0
              if ColumnCommentNumber(k) <> 0 then
                  = curComment & cstr(ColumnCommentNumber(k))
              else
                  = curComment
                 'ColumnComment(0)、ColumnCommentNumber(0)永远为空
                 '将相异的comment记录添加到数组中
                 i = i + 1
                 ReDim Preserve ColumnComment(i)
                 ReDim Preserve ColumnCommentNumber(i)
                 ColumnComment(i) = curComment
                 ColumnCommentNumber(i) = 0
              end if
           else
              '写入文件中
               "comment on column "+ +"."++" is '';"         
           end if
       next
    end if
    '由于不同表的code允许相同,因此此时重新初始化。
    '因为ColumnComment(0)、ColumnCommentNumber(0)为空,可以保留
    ReDim Preserve ColumnComment(0)
    ReDim Preserve ColumnCommentNumber(0)
    i=0:j=0:k=0

next

Dim view '当前视图
for each view in 
    if not  then
       '可以在这里显示view的comment
       ' = 
    end if
next

'对子目录进行递归
Dim subpackage 'folder
For Each subpackage In 
    if not  then
       ProcessFolder subpackage , file
    end if
Next

end sub


将comment覆盖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   (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    
            if   not      then 
                     =   
                  Dim   col   '   running   column 
                  for   each   col   in    
                  if ="" then
                  else
                        =    
                  end if
                  next 
            end   if 
      next
      Dim   view   'running   view 
      for   each   view   in    
            if   not      then 
                     =    
            end   if 
      next
      '   go   into   the   sub-packages 
      Dim   f   '   running   folder 
      For   Each   f   In    
            if   not      then 
                  ProcessFolder   f 
            end   if 
      Next 
end   sub

2 将name覆盖comment

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   (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    
            if   not      then 
                     =    
                  Dim   col   '   running   column 
                  for   each   col   in    
                        =    
                  next 
            end   if 
      next
      Dim   view   'running   view 
      for   each   view   in    
            if   not      then 
                     =    
            end   if 
      next
      '   go   into   the   sub-packages 
      Dim   f   '   running   folder 
      For   Each   f   In    
            if   not      then 
                  ProcessFolder   f 
            end   if 
      Next 
end   sub