本文的目的是介绍PowerDesigner生成sql及说明文档的详细情况,特别关注powerdesigner如何生成sql语句的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全
本文的目的是介绍PowerDesigner生成sql及说明文档的详细情况,特别关注powerdesigner如何生成sql语句的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解PowerDesigner生成sql及说明文档的机会,同时也不会遗漏关于 PowerDesigner生成Excel版本的数据库文件、powerdesign15生成word文档、PowerDesign16.6支持Mysql的生成sql脚本中包含Collate信息、PowerDesigner 15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释的知识。
本文目录一览:- PowerDesigner生成sql及说明文档(powerdesigner如何生成sql语句)
- PowerDesigner生成Excel版本的数据库文件
- powerdesign15生成word文档
- PowerDesign16.6支持Mysql的生成sql脚本中包含Collate信息
- PowerDesigner 15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释
PowerDesigner生成sql及说明文档(powerdesigner如何生成sql语句)
一、PowerDesigner生成sql问题
生成sql的方法是 Database -->Generate Database (Ctrl + G ) 但是提示
Could not load VBScript engine.
Check VBScript installation.
Generation aborted due to errors detected during the verification of the model.
检查了好久 发现将check model 去掉就可以了!其中,
one file on是否需要按照表生成许多个sql(默认选上,即不需要)
odbc generation sql直接生成到数据库中
Automatic archive 生成sql同时生成apm文件。
二、Power designer, 反向工程生成ER图
1. In PowerDesigner, choose File | Reverse Engineer | Database.... The New Physical Data Model Dialog Box, shown next, appears.DBMS要选成Oracle 10G, 然后点"OK"
2.在出来的database reverse engineering窗口里, 点上"Using script files", 再点那个"新建"的图标, 会出来个选择文件的对话框,选择script file的位置.then press "OK".
3. 生成ER diagram
三、利用PowerDesigner导出数据库ER图、PDM图
本文在以下两种时机下较为有用:
1、数据库说明文档与实际数据库的结构同步时。
2、根据现有数据库结构生成其说明文档时。
我平时是这样来生成“数据库说明文档”的:
方法一(sql Server 2000时是这样做的)
使用这个软件"SchemaTodoc With Table Annotator v2.8.8",在网上很容易找到它的注册机,所以用起来很方便,而且它生成的数据库说明文档也很专业。
但遗憾的是,我却无法用它连接到sql 2005或oracle 10g;
其企业版"SchemaTodocEnterpriseInstall.exe"倒是可以顺利连接到sql Server 2005和oracle 10g, 但由于没有注册码,每次只能导出3个对象(这里的对象包括stored procdure, view, table, function等)……
方法二
通过PowerDesigner从现有数据库导出PDM(Physical Data Model)图,然后借助另一个小工具PdmReader(可从http://www.pdmreader.com/下载)来分析PDM图,然后生成说明文档。
下面说一下具体步骤:
第一部分:通过PowerDesigner生成PDM图。
1、打开PowerDesigner,选择“文件”菜单中的“Reverse Engineer” ,再选择“DataBase”;
2、在弹出的对话框中输入将要创建的PDM文件的名字,并在DBMS选项中选择将要连接的数据库的类型后点击OK;
3、在Database Reverse Engineering Options画面的selection标签下选择“Using a data source”, 并选择用于连接到目标数据库的数据源,点击OK。
4、在Connect to a data source画面中先选择数据源名,再在其下面的输入框中输入连接到目标数据库的user id以及password,点击“Connect”,再点击OK。
5、如果前面的各项配置正确,现在就可以看到当前数据库下的数据对象,如表、视图等,默认会选中所有对象,如果你只想导出某几个表,可以去掉你不想导出的对象前面的勾,然后点击OK,PD就开始为你生成你所选择的对象的PDM图。
6、保存生成的PDM图。
第二部分:利用PdmReader生成说明文档
1、生成PDM图后,用PdmReader将其打开;这里需要注意,用PdmReader打开PDM图时,要保证该图没有在PowerDesigner中被打开。
2、点击“新建项目”,在弹出的对话框中输入项目名称,点击确定;
3、选择项目名称,点击“导入数据字典”,并选择刚生成的PDM图,点击Open;
4、在项目名称下选择pdm图链接,右边会出现一个名为“将字典导出到doc”的链接,点此即可。
附录:
PowerDesigner反向工程生成PDM数据字典
http://www.pdmreader.com/reverse.html
http://www.cnblogs.com/aspsmile/archive/2008/08/05/1261130.html (关于自动生成数据库的说明文档)
http://hlbng.javaeye.com/blog/383824
http://topic.csdn.net/t/20030721/10/2052244.html
http://www.itpub.net/thread-314637-1-1.html
http://jackson1225.javaeye.com/blog/151157
http://book.77169.org/data/web1805/20050228/20050228__2866571.html
PowerDesigner生成Excel版本的数据库文件
PowerDesigner生成Excel版本的数据库文件
在pd中,shift+ctrl+X,打开脚本运行,网上找的,然后自己修改了一下,脚本如下:
''******************************************************************************
''* File: pdm2excel.txt
''* Title: pdm export to excel
''* Purpose: To export the tables and columns to Excel
''* Model: Physical Data Model
''* Objects: Table, Column, View
''* Author: ziyan
''* Created: 2012-05-03
''* Version: 1.0
''******************************************************************************
Option Explicit
Dim rowsNum
rowsNum = 0
''-----------------------------------------------------------------------------
'' Main function
''-----------------------------------------------------------------------------
'' Get the current active model
Dim Model
Set Model = ActiveModel
If (Model Is Nothing) Or (Not Model.IsKindOf(PdPDM.cls_Model)) Then
MsgBox "The current model is not an PDM model."
Else
'' Get the tables collection
''创建EXCEL APP
dim beginrow
DIM EXCEL, SHEET
set EXCEL = CREATEOBJECT("Excel.Application")
EXCEL.workbooks.add(-4167)''添加工作表
EXCEL.workbooks(1).sheets(1).name ="test"
set sheet = EXCEL.workbooks(1).sheets("test")
ShowProperties Model, SHEET
EXCEL.visible = true
''设置列宽和自动换行
sheet.Columns(1).ColumnWidth = 15
sheet.Columns(2).ColumnWidth = 20
sheet.Columns(3).ColumnWidth = 10
sheet.Columns(4).ColumnWidth = 10
sheet.Columns(5).ColumnWidth = 15
sheet.Columns(6).ColumnWidth = 30
sheet.Columns(1).WrapText =true
sheet.Columns(2).WrapText =true
sheet.Columns(4).WrapText =true
End If
''-----------------------------------------------------------------------------
'' Show properties of tables
''-----------------------------------------------------------------------------
Sub ShowProperties(mdl, sheet)
'' Show tables of the current model/package
rowsNum=0
beginrow = rowsNum+1
'' For each table
output "begin"
Dim tab
For Each tab In mdl.tables
ShowTable tab,sheet
Next
if mdl.tables.count > 0 then
sheet.Range("A" & beginrow + 1 & ":A" & rowsNum).Rows.Group
end if
output "end"
End Sub
''-----------------------------------------------------------------------------
'' Show table properties
''-----------------------------------------------------------------------------
Sub ShowTable(tab, sheet)
If IsObject(tab) Then
Dim rangFlag
rowsNum = rowsNum + 1
'' Show properties
Output "================================"
sheet.cells(rowsNum, 1) = tab.comment
sheet.cells(rowsNum, 2) = tab.name
sheet.Range(sheet.cells(rowsNum, 2),sheet.cells(rowsNum, 6)).Merge
sheet.Range(sheet.cells(rowsNum, 1),sheet.cells(rowsNum, 6)).Font.Bold = True
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 1) = "字段名"
sheet.cells(rowsNum, 2) = "字段类型"
sheet.cells(rowsNum, 3) = "默认值"
sheet.cells(rowsNum, 4) = "是否为空"
sheet.cells(rowsNum, 5) = "自动递增"
sheet.cells(rowsNum, 6) = "说明"
''设置边框
sheet.Range(sheet.cells(rowsNum-1, 1),sheet.cells(rowsNum, 6)).Borders.Linesheet.Range(sheet.cells(rowsNum-1, 1),sheet.cells(rowsNum, 6)).Interior.Color = RGB(255,216,0)
Dim col '' running column
Dim colsNum
colsNum = 0
for each col in tab.columns
rowsNum = rowsNum + 1
colsNum = colsNum + 1
sheet.cells(rowsNum, 1) = col.name
sheet.cells(rowsNum, 2) = col.datatype
sheet.cells(rowsNum, 3) = col.DefaultValue
sheet.cells(rowsNum, 4) = col.nullstatus
sheet.cells(rowsNum, 5) = col.identity
sheet.cells(rowsNum, 6) = col.comment
next
sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,6)).Borders.LinerowsNum = rowsNum + 1
Output "FullDescription: " + tab.Name
End If
End Sub
未修改前的代码如下:
''******************************************************************************
''* File: pdm2excel.txt
''* Title: pdm export to excel
''* Purpose: To export the tables and columns to Excel
''* Model: Physical Data Model
''* Objects: Table, Column, View
''* Author: ziyan
''* Created: 2012-05-03
''* Version: 1.0
''******************************************************************************
Option Explicit
Dim rowsNum
rowsNum = 0
''-----------------------------------------------------------------------------
'' Main function
''-----------------------------------------------------------------------------
'' Get the current active model
Dim Model
Set Model = ActiveModel
If (Model Is Nothing) Or (Not Model.IsKindOf(PdPDM.cls_Model)) Then
MsgBox "The current model is not an PDM model."
Else
'' Get the tables collection
''创建EXCEL APP
dim beginrow
DIM EXCEL, SHEET
set EXCEL = CREATEOBJECT("Excel.Application")
EXCEL.workbooks.add(-4167)''添加工作表
EXCEL.workbooks(1).sheets(1).name ="test"
set sheet = EXCEL.workbooks(1).sheets("test")
ShowProperties Model, SHEET
EXCEL.visible = true
''设置列宽和自动换行
sheet.Columns(1).ColumnWidth = 20
sheet.Columns(2).ColumnWidth = 40
sheet.Columns(4).ColumnWidth = 20
sheet.Columns(5).ColumnWidth = 20
sheet.Columns(6).ColumnWidth = 15
sheet.Columns(1).WrapText =true
sheet.Columns(2).WrapText =true
sheet.Columns(4).WrapText =true
End If
''-----------------------------------------------------------------------------
'' Show properties of tables
''-----------------------------------------------------------------------------
Sub ShowProperties(mdl, sheet)
'' Show tables of the current model/package
rowsNum=0
beginrow = rowsNum+1
'' For each table
output "begin"
Dim tab
For Each tab In mdl.tables
ShowTable tab,sheet
Next
if mdl.tables.count > 0 then
sheet.Range("A" & beginrow + 1 & ":A" & rowsNum).Rows.Group
end if
output "end"
End Sub
''-----------------------------------------------------------------------------
'' Show table properties
''-----------------------------------------------------------------------------
Sub ShowTable(tab, sheet)
If IsObject(tab) Then
Dim rangFlag
rowsNum = rowsNum + 1
'' Show properties
Output "================================"
sheet.cells(rowsNum, 1) = "实体名"
sheet.cells(rowsNum, 2) =tab.name
sheet.cells(rowsNum, 3) = ""
sheet.cells(rowsNum, 4) = "表名"
sheet.cells(rowsNum, 5) = tab.code
sheet.Range(sheet.cells(rowsNum, 5),sheet.cells(rowsNum, 6)).Merge
rowsNum = rowsNum + 1
sheet.cells(rowsNum, 1) = "属性名"
sheet.cells(rowsNum, 2) = "说明"
sheet.cells(rowsNum, 3) = ""
sheet.cells(rowsNum, 4) = "字段中文名"
sheet.cells(rowsNum, 5) = "字段名"
sheet.cells(rowsNum, 6) = "字段类型"
''设置边框
sheet.Range(sheet.cells(rowsNum-1, 1),sheet.cells(rowsNum, 2)).Borders.Linesheet.Range(sheet.cells(rowsNum-1, 4),sheet.cells(rowsNum, 6)).Borders.LineDim col '' running column
Dim colsNum
colsNum = 0
for each col in tab.columns
rowsNum = rowsNum + 1
colsNum = colsNum + 1
sheet.cells(rowsNum, 1) = col.name
sheet.cells(rowsNum, 2) = col.comment
sheet.cells(rowsNum, 3) = ""
sheet.cells(rowsNum, 4) = col.name
sheet.cells(rowsNum, 5) = col.code
sheet.cells(rowsNum, 6) = col.datatype
next
sheet.Range(sheet.cells(rowsNum-colsNum+1,1),sheet.cells(rowsNum,2)).Borders.Linesheet.Range(sheet.cells(rowsNum-colsNum+1,4),sheet.cells(rowsNum,6)).Borders.LinerowsNum = rowsNum + 1
Output "FullDescription: " + tab.Name
End If
End Sub
powerdesign15生成word文档
1.Report->Report Templates
2.新建一个templates,type选择Physical Data Model
3.点击确定,选择Table下面的List of Table Columns 双击
4.右键选择Edit Title即可编辑表名,点击下方insert可以选择插入其他变量
5.点击layout也可选择导出不同的列
6.新建完templates后,保存到本地,然后Report->Generate Report...选择模板
最后将生成的rtf文档打开,然后另存为word文档即可
PowerDesign16.6支持Mysql的生成sql脚本中包含Collate信息
当前powerDesign版本:16.6
列上指定:Collation = utf8_general_ci
但是SQL脚本中,列字段没有显示Collect
-------------------------------------------------------------
工具栏-》database-》edit current DBMS
然后,选中:MYSQL50::Script\Objects\Column\Add
脚本中新增如下表达式:[ [COLLATE] %Collate%]
修改前:
%20:COLUMN% [%National%?national ]%DATATYPE%[%Unsigned%? unsigned][%ZeroFill%? zerofill][ [.O:[character set][charset]] %CharSet%][.Z:[ %NOTNULL%][%R%?[%PRIMARY%]][%IDENTITY%? auto_increment:[ default %DEFAULT%]][%R%?[ comment %.q:@OBJTLABL%]: %generatedComment%]]
修改后:
%20:COLUMN% [%National%?national ]%DATATYPE%[%Unsigned%? unsigned][%ZeroFill%? zerofill][ [.O:[character set][charset]] %CharSet%][ [COLLATE] %Collate%][.Z:[ %NOTNULL%][%R%?[%PRIMARY%]][%IDENTITY%? auto_increment:[ default %DEFAULT%]][%R%?[ comment %.q:@OBJTLABL%]: %generatedComment%]]
-------------------------------------------------------------------
设置表的默认引擎和字符集
工具栏-》database-》edit current DBMS
然后,选中:MYSQL50::Script\Objects\Table\Options
ENGINE = %s : list = BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM, default = InnoDB
DEFAULT CHARACTER SET = %s : list = utf8 | gbk, default = utf8
COLLATE = %s : list = utf8_bin | utf8_general_ci | gbk_bin | gbk_chinese_ci, default = utf8_general_ci
PowerDesigner 15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释
使用PowerDesigner默认配置逆向工程是没有注释(name列为英文,comment列是空的),这样的不方便查看字段具体是什么意义,将注释一同导出,方便查看字段具体的意义,如下图
注释列导出步骤
1、新建脚本DBMS,选择菜单:Tools→Resources→DBMS
弹出List Of DBMS对话框,选择新建
弹出新建对话框,填写名称为“My Microsoft SQL Server 2008”(这个名称可以自己定义),选择“Microsoft SQL Server 2008”,点击OK
上图默认文件,不需要修改,直接点保存,弹出下图
点击展开script->objects->column,选中SqlListQuery,如下图
将下面的脚本复制到右边的Value输入框中覆盖原来的脚本,点击确定


{OWNER, TABLE, S, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, COMPUTE, NOTNULL, IDENTITY, DOMAIN, DEFAULT, ExtIdentitySeedInc,COMMENT,COLNNAME, ExtCollation, ExtIdtNotForReplication, ExtDeftConstName, Sparse, FileStream, ExtRowGuidCol}
select
u.name,
o.name,
c.column_id,
c.name,
case when c.system_type_id in (165, 167, 231) and c.max_length = -1 then t.name + ''(Max)'' else t.name end,
c.precision,
case (c.max_length) when -1 then 0 else case when c.system_type_id in (99, 231, 239) then (c.max_length/2) else (c.max_length) end end as colnA,
c.scale,
case(c.is_computed) when 1 then convert(varchar(8000), (select z.definition from [%CATALOG%.]sys.computed_columns z where z.object_id = c.object_id and z.column_id = c.column_id)) else '''' end as colnB,
case(c.is_nullable) when 1 then ''NULL'' else ''NOTNULL'' end,
case(c.is_identity) when 1 then ''identity'' else '''' end,
case when(c.user_type_id <> c.system_type_id) then (select d.name from [%CATALOG%.]sys.types d where d.user_type_id = c.user_type_id) else '''' end as colnC,
convert(varchar(8000), d.definition),
case (c.is_identity) when 1 then convert(varchar, i.seed_value) + '', '' + convert(varchar, i.increment_value) else '''' end as colnD,
convert(varchar(8000), e.value) as colnE,
convert(varchar(8000), e.value) as colnF,
c.collation_name,
case (i.is_not_for_replication) when 1 then ''true'' else ''false'' end,
d.name,
case(c.is_sparse) when 1 then ''true'' else ''false'' end,
case(c.is_filestream) when 1 then ''true'' else ''false'' end,
case(c.is_rowguidcol) when 1 then ''true'' else ''false'' end
from
[%CATALOG%.]sys.columns c
join [%CATALOG%.]sys.objects o on (o.object_id = c.object_id)
join [%CATALOG%.]sys.schemas u on (u.schema_id = o.schema_id)
join [%CATALOG%.]sys.types t on (t.user_type_id = c.system_type_id)
left outer join [%CATALOG%.]sys.identity_columns i on (i.object_id = c.object_id and i.column_id = c.column_id)
left outer join [%CATALOG%.]sys.default_constraints d on (d.object_id = c.default_object_id)
left outer join [%CATALOG%.]sys.extended_properties e on (e.class=u.schema_id and e.major_id=o.object_id and e.minor_id = c.column_id and e.name=N''MS_Description'')
where
o.type in (''U'', ''S'', ''V'')
[ and u.name = %.q:OWNER%]
[ and o.name=%.q:TABLE%]
order by 1, 2, 3
选择File→Reverse Engineer→Database 对数据库进行逆向工程,DBMS选择刚才新建的“My Microsoft SQL Server 2008”,点击确定
选择使用刚才新建的“My Microsoft SQL Server 2008”
选项按照下图选中的,点击确定
到此修改配置完成,下面开始生产逆向工程
按照下图步骤操作
点击确定
选择数据库点击OK
点击OK就可以生产注释的逆向工程
上面步骤数据库表的注释comment没有导出来,下面导出数据库表注释comment
选择菜单:工具→Execute Commands→Edit/Run Script,Run运行vbs脚本即可。
将下面的脚本复制到上图的输入框中,点击run,就可生成表的comment注释了


''把pd中那么name想自动添加到comment里面
''如果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 mdl.IsKindOf(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 folder.tables
if not tab.isShortcut then
if trim(tab.comment)="" then ''如果有表的注释,则不改变它.如果没有表注释.则把name添加到注释里面.
tab.comment = tab.name
end if
Dim col '' running column
for each col in tab.columns
if trim(col.comment)="" then ''如果col的comment为空,则填入name,如果已有注释,则不添加;这样可以避免已有注释丢失.
col.comment= col.name
end if
next
end if
next
Dim view ''running view
for each view in folder.Views
if not view.isShortcut and trim(view.comment)="" then
view.comment = view.name
end if
next
'' go into the sub-packages
Dim f '' running folder
For Each f In folder.Packages
if not f.IsShortcut then
ProcessFolder f
end if
Next
end sub
点击run,导出的表注释效果如下
PowerDesigner 15的下载链接: https://pan.baidu.com/s/1ryohBB9RSvKbzxjjaCs69g 提取码: r54q
关于PowerDesigner生成sql及说明文档和powerdesigner如何生成sql语句的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于 PowerDesigner生成Excel版本的数据库文件、powerdesign15生成word文档、PowerDesign16.6支持Mysql的生成sql脚本中包含Collate信息、PowerDesigner 15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释等相关内容,可以在本站寻找。
本文标签: