PowerDesigner从Sqlserver中反转为带注释的字典及快捷键操作

PowerDesigner的操作经常忘记,所以把常用的功能记录下来备忘。

1、修改反转过来的字段

PowerDesigner从数据库反转的时候,默认不带注释,需要先进行修改。

输入如下脚本:

{OWNER, TABLE, S, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, COMPUTE, NOTNULL, IDENTITY, DOMAIN, DEFAULT, COMMENT, ExtIdentityIncrement, ExtIdentitySeed}

select
u.name,
o.name,
c.colid,
c.name,
case when (s.usertype < 100) then s.name else x.name end,
c.prec,
c.length,
c.scale,
z.text ,
case (c.status & 8) when 8 then 'NULL' else 'NOTNULL' end,
case (c.status & 128) when 128 then 'identity' else '' end,
case when (s.usertype < 100) then '' else s.name end,
v.text,
CONVERT(varchar, ISNULL(p.[value], '')) AS text,
case (c.status & 128) when 128 then ident_incr(u.name + '.' + o.name) else null end,
case (c.status & 128) when 128 then ident_seed(u.name + '.' + o.name) else null end
from
dbo.sysusers u
join dbo.sysobjects o on (o.uid = u.uid and o.type in ('U', 'S', 'V'))
join dbo.syscolumns c on (c.id = o.id)
left outer join sys.extended_properties p on c.id = p.major_id and c.colid = p.minor_id
left outer join dbo.systypes s on (c.usertype = s.usertype and s.xtype = c.xtype and c.usertype >= 0)
left outer join dbo.systypes x on (s.usertype > 100 and s.xtype = x.xtype and x.usertype not in (0, 18, 80) and x.usertype < 100)
left outer join dbo.syscomments z on (z.id = o.id and z.number = c.colid)
left outer join dbo.sysobjects d on (d.id = c.cdefault and d.category <> 0)
left outer join dbo.syscomments v on (v.id = d.id)
where 1 = 1
[ and u.name = %.q:OWNER%]
[ and o.name=%.q:TABLE%]
order by 1, 2, 3

 2、配置PowerDesigner数据库连接

下一步,点击“完成”——“测试数据库”——返回OK。

3、新建物理数据模型

点击“OK”后,将会开始进行反转PD字典工作。

PowerDesigner设计时表显示注释选项: 选定编辑的表,右键- >Properties- >Columns- >Customize Columns and Filter(或直接用快捷键Ctrl+U)- >Comment(前面打勾)- >OK

如果出现错误“[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。 SQLSTATE = 37000”

解决办法:选择菜单栏中的Database -> Change Current DBMS ,给DBMS选择SQL Server2005。

PowerDesigner常用快捷键

一般快捷键

F4   打开检查模型窗口,检查模型
F5   如果图窗口内的图改变过大小,恢复为原有大小即正常大小
F6   放大图窗口内的图
F7   缩小图窗口内的图
F8   在图窗口内中查看全部图内容
F9   预览图窗口
F10   在图窗口中以一幅视图的高度显示图Shift+单击对象   连续选择对象

alt+0   显示或隐藏浏览器窗口
alt+1   显示或隐藏输出窗口
alt+2   显示或隐藏结果列表窗口
ctrl+双击或ctrl+"+"     打开包图
ctrl+tab   在图窗口中切换大小,在文本中插入制表符或   在属性表窗口中切换标签页
ctrl+page up/page down 在属性表标签页中切换标签页
ctrl+移动窗口   禁止Docking特性
ctrl+b   在浏览器窗口中查找对象
ctrl+d   打开选择图窗口,选择图
ctrl+e   打开报表列表窗口
ctrl+f   打开查找对象窗口,查找对象
ctrl+j   在对象符号中调整文本
ctrl+F4   关闭当前图窗口
ctrl+alt+F4   关闭模型
ctrl+F6   在多个属性表窗口间切换
ctrl+shift+F6   在多个属性表窗口间反向切换
ctrl+u   回到父图
shift+F2   打开Workspace
shift+F3   保存Workspace
shift+F4   关闭Workspace

对象操作快捷键表

Del   删除对象(需确认)
shift+Del   删除对象(无需确认)
alt+Enter   打开所选对象的属性表
ctrl+k   粘贴为快捷方式
ctrl+h   选择连接:水平连接
ctrl+l   选择连接:垂直连接
ctrl+改变大小   保持对象的中心改变对象大小
ctrl+shift+改变大小 保持对象的中心改变对象大小,并保持与原对象的长宽比例

工具面板快捷键表

双击光标工具(Point)
选择图中的所有符号或ctrl+a  
双击删除工具(Delete) 删除所有已选择的符号(需确认)
双击移动工具(Grabber) 显示全局视图双击对象工具  
选择同类型的所有符号shift+双击对象工具 保持前一个选择,添加选择同类型的所有符号

拖放快捷键表

shift+移动项   移动符号
ctrl+移动项   复制符号
ctrl+shift+移动项 创建快捷方式列表窗口快捷键表
F2   选择编辑的文本
ctrl+shift+Space 选择当前行
ctrl+a   选择所有行
ctrl+shift+a   取消所有选择
ctrl+n或ctrl+i   插入行
ctrl+d   删除行

浏览器窗口快捷键表

*(小键盘)   展开活动浏览器中的所有节点
+(小键盘)   展开活动浏览器中的子节点
-(小键盘)   合拢活动浏览器中的所有节点
F2   重命名
ctrl+shift+f   在图中查找选择的对象

powerdesigner15显示注释

Tools->Display Preferences->Content->Table->Advanced...->Columns->select
选中Code后,将它上移到第一位

这样可以将code、name、type三项显示在ER图中,然后运行脚本,将注释comment的内容替换到code或name中,即可。
 执行如下脚本:
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+123...
'            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.code = curComment & cstr(ColumnCommentNumber(k))
              else
                 col.code = 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.code+" 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

扩展:PowerDesigner导出表到word

posted @ 2016-07-30 18:40  邹琼俊  阅读(1916)  评论(2编辑  收藏  举报
-->