工作三年了,如果說對於數據庫不敏感,我覺得的無論是作為一個前端開發人員還是后端開發人員來說,跟別人說你是個軟件開發人員,我覺得都有點慚愧。可能之前一直在關注數據庫sql的編寫等等,但是現在我覺得有必要升華一下了,下面我就我遇到的問題,向大家提供一個解決方案,可能不是最好的,但是當實現了這個效果后,我真的眼前一亮,在此分享給大家......
軟件環境:powerdesign16.5 + win64(64位系統下,由於jdk的版本,powerdesign軟件運行不正常,這個我安裝jdk1.6_x86 后解決此問題,大家可百度具體步驟)
問題:當在使用powerdesign時,ER模型中展示code和dataType,即使選擇了Comment或者Name,從數據庫中反向生成的model中依然在ER視圖中看不到中文注釋,具體如圖:

用powerdesign反向生成的model中展示如下:

題:該圖中沒有展示數據庫中列的注釋,通過以下步驟可解決此問題:
1、在powerdesign中菜單 Tools——>Display Preference...——>Table——>Advanced...

2、點擊確定,模型顯示如圖:

3、接下來,我們執行腳本,在桌面建立文件powerdesign-name-comment.vbs ,文件名稱可隨便寫,但是必須是vbs文件,名稱最好用英文,該文件內容為:
'******************************************************************************
'* File: comment2code.vbs
'* Purpose: 在PowerDesigner的PDM圖形窗口中顯示數據列的中文注釋
'* Title: 將字段的comment賦值到字段的code中
'* Category: 打開物理模型,運行本腳本(Ctrl+Shift+X)
'* Copyright:foxzz@163.com,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:\pdcomment.txt文件中。
' 在補充comment完畢后,便於在數據庫中執行
'******************************************************************************
Option Explicit
ValidationMode = True
InteractiveMode = im_Batch
Dim system, file
Set system = CreateObject("Scripting.FileSystemObject")
Dim ForReading, ForWriting, ForAppending '打開文件選項
ForReading = 1 ' 只讀
ForWriting = 2 ' 可寫
ForAppending = 8 ' 可寫並追加
'打開文本文件
Set file = system.OpenTextFile("C:\pdcomment.txt", ForWriting, true)
'判斷當前model是否物理數據模型
Dim mdl
Set mdl = ActiveModel
If (mdl Is Nothing) Then
MsgBox "處理對象無模型"
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then
MsgBox "當前模型不是物理數據模型"
Else
ProcessFolder mdl,file
End If
file.Close
'******************************************************************************
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 folder.tables
if not tbl.isShortcut then
if len(trim(tbl.comment))<>0 then
'可以在這里顯示table的comment
'tbl.code = tbl.code+"("+trim(tbl.comment)+")"
end if
'處理表中的列
for each col in tbl.columns
k = 0
curComment = trim(col.comment)
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
col.name = curComment & cstr(ColumnCommentNumber(k))
else
col.name = 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
'寫入文件中
file.WriteLine "comment on column "+ tbl.code+"."+col.name+" 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 folder.Views
if not view.isShortcut then
'可以在這里顯示view的comment
'view.code = view.comment
end if
next
'對子目錄進行遞歸
Dim subpackage 'folder
For Each subpackage In folder.Packages
if not subpackage.IsShortcut then
ProcessFolder subpackage , file
end if
Next
end sub
'******************************************************************************
4、在powerdesign中菜單Tools——>Excute Commands——>Edit/Run Script... 選擇上一步創建的文件,點擊執行,效果如下:

5、至此,完畢!
馬上過年了,這幾天忙得要死,這一個問題,我搞了一天多,網上查到的都是展示列,選出來,但是都是英文,終於搞定這個,今天也是抽空寫成博客,希望大家采納,如有問
題,可直接發我郵箱zh_haining@163.com ,希望與大家交流分享。
