GVKun编程网logo

PowerDesigner生成sql及说明文档(powerdesigner如何生成sql语句)

17

本文的目的是介绍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生成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版本的数据库文件

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文档

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信息

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 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
View Code

选择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
View Code

点击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逆向工程没有列注释等相关内容,可以在本站寻找。

本文标签: