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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

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

1、修改反转过来的字段

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

输入如下脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{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  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


本文转自邹琼俊博客园博客,原文链接:http://www.cnblogs.com/jiekzou/p/5721522.html,如需转载请自行联系原作者

相关文章
|
数据库 Docker 容器
Mac 下Docker操作SQLServer数据库
Mac 下Docker操作SQLServer数据库
148 0
|
数据库
SqlServer如何给表添加新的字段以及字段注释
SqlServer如何给表添加新的字段以及字段注释
589 1
|
SQL 关系型数据库 MySQL
「Python入门」python操作MySQL和SqlServer
**摘要:** 了解如何使用Python的pymysql模块与MySQL数据库交互。首先,通过`pip install pymysql`安装模块。pymysql提供与MySQL的连接功能,例如创建数据库连接、执行SQL查询。在设置好MySQL环境后,使用`pymysql.connect()`建立连接,并通过游标执行SQL(如用户登录验证)。注意防止SQL注入,使用参数化查询。增删改操作需调用`conn.commit()`来保存更改。pymssql模块类似,但导入和连接对象创建略有不同。
217 0
「Python入门」python操作MySQL和SqlServer
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错合集之sqlserver mysql都用的胖包,sqlserver的成功了,mysql报这个错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
667 6
|
SQL Java 网络安全
实时计算 Flink版操作报错合集之SQLserver表没有主键,同步的时候报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
457 1
|
SQL Kubernetes 数据库
实时计算 Flink版操作报错合集之查询sqlserver ,全量阶段出现报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
270 0
|
SQL
SQL Server查询所有的表名、字段名、注释
SELECT 表名=case when a.colorder=1 then d.name else '' end, 表说明=case when a.colorder=1 then isnull(f.
1957 0
|
SQL 存储 监控
sqlserver触发器详解:sqlserver触发器after/for和instead of的区别详解(实例讲解),触发器定义创建操作打通,触发器的优缺点,触发器使用建议
sqlserver触发器详解:sqlserver触发器after/for和instead of的区别详解(实例讲解),触发器定义创建操作打通,触发器的优缺点,触发器使用建议
4062 1
|
存储 程序员
SQLServer存储过程自制数据字典
SQLServer存储过程自制数据字典