準備工作
首先需要進行MySql數據庫的鏈接,和數據庫引擎的選擇,建議連上數據庫以後先進行一次逆向工程。
逆向程操作方式請參考:《PowerDesigner逆向工程導入MYSQL數據庫總結》
之後在Tools-->Execute Commands-->Edit/Run Script執行腳本即可
導出腳本
Option Explicit Dim rowsNum rowsNum = 0 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 ="Table" set sheet = EXCEL.workbooks(1).sheets("Table") ShowProperties Model, SHEET EXCEL.visible = true '設置列寬和自動換行 sheet.Columns(1).ColumnWidth = 2.5 sheet.Columns(2).ColumnWidth = 15 sheet.Columns(3).ColumnWidth = 15 sheet.Columns(4).ColumnWidth = 5 sheet.Columns(5).ColumnWidth = 5 sheet.Columns(6).ColumnWidth = 5 sheet.Columns(7).ColumnWidth = 40 sheet.Columns(7).WrapText =true End If '----------------------------------------------------------------------------- Sub ShowProperties(mdl, sheet) ' Show tables of the current model/package rowsNum=1 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 '----------------------------------------------------------------------------- Sub ShowTable(tab, sheet) If IsObject(tab) Then Dim rangFlag rowsNum = rowsNum + 1 ' Show properties Output "================================" sheet.cells(rowsNum, 2) = tab.code sheet.cells(rowsNum, 3) =tab.Comment rowsNum = rowsNum + 1 sheet.cells(rowsNum, 2) = "字段" sheet.cells(rowsNum, 3) = "類型" sheet.cells(rowsNum, 4) = "主鍵" sheet.cells(rowsNum, 5) = "必填" sheet.cells(rowsNum, 6) = "自增" sheet.cells(rowsNum, 7) = "描述" '設置邊框 sheet.Range(sheet.cells(rowsNum-1, 2),sheet.cells(rowsNum, 7)).Borders.LineStyle = "1" sheet.Range(sheet.cells(rowsNum-1, 2),sheet.cells(rowsNum, 7)).Interior.Color = &HDCCD92 Dim col ' running column Dim colsNum colsNum = 1 for each col in tab.columns rowsNum = rowsNum + 1 colsNum = colsNum + 1 sheet.cells(rowsNum, 2) = col.Code sheet.cells(rowsNum, 3) = col.DataType sheet.cells(rowsNum, 4) = col.Primary sheet.cells(rowsNum, 5) = col.Mandatory sheet.cells(rowsNum, 6) = col.Identity sheet.cells(rowsNum, 7) = col.Comment next sheet.Range(sheet.cells(rowsNum-colsNum+1,2),sheet.cells(rowsNum,7)).Borders.LineStyle = "1" rowsNum = rowsNum + 1 Output "FullDescription: " + tab.Name End If End Sub
導入腳本
Option Explicit Dim mdl ' the current model Set mdl = ActiveModel If (mdl Is Nothing) Then MsgBox "There is no Active Model" End If Dim HaveExcel Dim RQ RQ = vbYes If RQ = vbYes Then HaveExcel = True ' Open & Create Excel Document Dim x1 ' Set x1 = CreateObject("Excel.Application") x1.Workbooks.Open "F:\1.xlsx" Else HaveExcel = False End If a x1, mdl sub a(x1, mdl) dim rwIndex dim tableName dim colname dim table dim col dim options dim count dim s For s=1 to x1.Sheets.Count step 1 x1.Workbooks(1).Worksheets(s).Activate With x1.Workbooks(1).Worksheets(s) For rwIndex = 1 To .Usedrange.Rows.count+1 step 1 If .Cells(rwIndex, 2).Value <> "" Then If .Cells(rwIndex, 6).Value = "" Then set table = mdl.Tables.CreateNew table.Name = .Cells(rwIndex , 2).Value table.Code = .Cells(rwIndex , 2).Value table.Comment = .Cells(rwIndex , 3).Value count = count + 1 rwIndex = rwIndex + 1 Else colName = .Cells(rwIndex, 2).Value set col = table.Columns.CreateNew col.Name = .Cells(rwIndex, 2).Value col.Code = .Cells(rwIndex, 2).Value col.Comment = .Cells(rwIndex,7).Value col.DataType = .Cells(rwIndex, 3).Value col.Primary = .Cells(rwIndex, 4).Value If col.Primary <> true Then col.Mandatory = .Cells(rwIndex, 5).Value End If col.Identity = .Cells(rwIndex, 6).Value End If End If Next End With Next MsgBox "生成數據表結構共計 " + CStr(count), vbOK + vbInformation, "表" x1.Quit set x1=Nothing Exit Sub End sub
*注意修改導入路徑
powerdesigner添加mysql的字符集支持
點擊:Database-->Edit Current DBMS
然後,選中:MYSQL50::Script/Objects/Table/Options
在options末尾添加:
ENGINE = %s : list = BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM, default = MYISAM
DEFAULT CHARACTER SET = %s : list = utf8 | gbk, default = utf8
COLLATE = %s : list = utf8_bin | utf8_general_ci | gbk_bin | gbk_chinese_ci, default = utf8_bin
第一個:存儲引擎
第二個:字符集
第三個:帶bin是區分大小寫,ci不區分
點擊ok保存,回到工作區,雙擊某表,在:
Physicial Options中,可以看到剛剛添加的選項,這樣就可以按照自己的方式來操作了。之後通過Database-->Default Physical Options設置默認的存儲引擎、字符集等Options選項
此節出自 “leolee” 博客,出處http://jooben.blog.51cto.com/253727/309467
修改SQL腳本生成規則
爲了建表腳本能夠正常運行我們要給表明和字段名用“`”符號括起來,這就需要修改腳本生成的規則樣式。
還是點擊:Database-->Edit Current DBMS
之後找到表的創建語句生成規則
MySQL 腳本修改
將Table的Create的代碼改爲
將Table的TableComment的代碼改爲create [%Temporary%?temporary ]table[%R%?[ if not exists]] [%QUALIFIER%]`%TABLE%`[ ( %TABLDEFN% )][%R%?[comment = %.q:TLABL%]] [%OPTIONS%]
將Column的Add的代碼改爲alter table [%QUALIFIER%]`%TABLE%` comment %.60qA:COMMENT%
`%COLUMN%` [%National%?national ]%DATATYPE%[%Unsigned%? unsigned][%ZeroFill%? zerofill][ [.O:[character set][charset]] %CharSet%][.Z:[ %NOTNULL%][%R%?[%PRIMARY%]][%IDENTITY%? auto_increment:[ default %DEFAULT%]][ comment %.q:@OBJTLABL%]]
這樣通過Database-->Generate Database… 中的 Preview 窗口生成的腳本就可以直接放到MySql中執行了。
SQL Server腳本修改
將Table的Create的代碼改爲
將Column的Add的代碼改爲create table [%QUALIFIER%]\[dbo\].\[%TABLE%\] ( %TABLDEFN% ) [%OPTIONS%]
將PKey的Add的代碼改爲\[%COLUMN%\] [%COMPUTE%?AS [(]%COMPUTE%[)]:[%.L:DATATYPE%=xml?xml[%XMLSchemaCollection%?([%ContentType% ]%XMLSchemaCollection.GeneratedName%): ]:%20:DATATYPE%][.Z:[ collate %ExtCollation%][%allowFilestream%?[%FileStream%? filestream]][%ExtRowGuidCol%? RowGuidCol][%Mandatory%?:[%Sparse%? sparse]][%IDENTITY%? %IDENTITY%[[(%ExtIdentitySeedInc%)][%ExtIdtNotForReplication%? not for replication]]:[%ExtNullConstName%? constraint %ExtNullConstName%][ %NULL%][ %NOTNULL%]][[%ExtDeftConstName%? constraint %ExtDeftConstName%] default [%R%?[(]]%DEFAULT%[%R%?[)]]]] [%CONSTDEFN%]]
[constraint \[%CONSTNAME%\] ]primary key [%CLUSTER%?[%R%?[clustered ]]:nonclustered ](\[%PKEYCOLUMNS%\]) [%OPTIONS%]
這樣通過Database-->Generate Database… 中的 Preview 窗口生成的腳本就可以直接放到Sql Server中執行了。