PowerDesigner對MySql數據庫的Excel導入導出

準備工作

首先需要進行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

image
 

然後,選中:MYSQL50::Script/Objects/Table/Options
 
image
在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中,可以看到剛剛添加的選項,這樣就可以按照自己的方式來操作了。
image

之後通過Database-->Default Physical Options設置默認的存儲引擎、字符集等Options選項

此節出自 “leolee” 博客,出處http://jooben.blog.51cto.com/253727/309467

修改SQL腳本生成規則

爲了建表腳本能夠正常運行我們要給表明和字段名用“`”符號括起來,這就需要修改腳本生成的規則樣式。

還是點擊:Database-->Edit Current DBMS

之後找到表的創建語句生成規則


MySQL 腳本修改

將Table的Create的代碼改爲

create [%Temporary%?temporary ]table[%R%?[ if not exists]] [%QUALIFIER%]`%TABLE%`[
(
   %TABLDEFN%
)][%R%?[comment = %.q:TLABL%]]
[%OPTIONS%]
將Table的TableComment的代碼改爲

alter table [%QUALIFIER%]`%TABLE%` comment %.60qA:COMMENT%
將Column的Add的代碼改爲

`%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的代碼改爲

create table [%QUALIFIER%]\[dbo\].\[%TABLE%\] (
   %TABLDEFN%
)
[%OPTIONS%]
將Column的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%]]
將PKey的Add的代碼改爲
[constraint \[%CONSTNAME%\] ]primary key [%CLUSTER%?[%R%?[clustered ]]:nonclustered ](\[%PKEYCOLUMNS%\])
      [%OPTIONS%]

這樣通過Database-->Generate Database… 中的 Preview  窗口生成的腳本就可以直接放到Sql Server中執行了。
發佈了17 篇原創文章 · 獲贊 9 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章