1. 根據SQL文件生成ER圖
首先準備好SQL文件
然後在PowerDesigner 裏 點擊 File -> ReverseEngineer -> Database 顯示如下
其中 :ModelName自己隨意寫,DBMS選擇你使用的數據庫類型
點擊確定,顯示如下頁面
選擇你的SQL文件
改編碼類型
然後點擊確定即可
2. 生成註釋
如圖:點擊Tools -> ExecuteCommands -> Edit/Run Script …
'******************************************************************************
'* 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
'******************************************************************************zzzz
將以下代碼粘貼進來然後點擊run
3. 顯示字段名
雖然註釋顯示出來了,但原字段不見了
如圖點擊
補充:如果生成的圖如下,字段在最後選項調整位置的話
到上一步顯示Code的地方,如圖圈中的工具挪動位置就可以了
總結
只能生成物理模型中的表實體,目前還不能生成表之間的關係。