您的位置:首页 > 数据库

数据库导入到PowerDesigner中

2015-07-27 09:51 260 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/koukoulove123/article/details/47080491

废话:项目以前的PDM没及时更新,现在只好重新导出来个整理整理。(Oracle11g+PowerDesigner16)

第一步:File ---> Reverse Engineer ---> Database;


第二步:输入Model名字,选择对应的数据库版本,点击 确定;


第三步:选择数据源 确定,如果没有则配置一个数据源。


第四步:创建数据源;


注意:服务器 输入框填写的就是工具PLSQL 数据库 输入框的值,得装有Oracle客户端,然后我是自己电脑以前装了个Oracle数据库,有客户端了。这个文件:D:\app\Time\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora


配置好后,测试一下,看通不通


第五步:回到最初的Connect to a DataSource,输入用户名密码 点击 确定;选择你要导出的表,


花一点时间等待,,,,,,,,,,然后就导出来。。。。

打开导出来的PDM,发现有问题。

第一个问题:Table视图name没有显示,请参考:PD中Table视图显示同时code和name

第二个问题:name和code都是英文,不能忍啊。可以参考:搜了好多个,这个最nice,点击打开链接

目标是:如果是表,name=name+(comment);如果是列,name=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("D:/temp.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.name = tbl.name+"("+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.name = curComment & cstr(ColumnCommentNumber(k))
else
col.name  = 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.name+"."+col.code+" is '';"
end if
next
end if
'由于不同表的name允许相同,因此此时重新初始化。
'因为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.name =  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





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: