powerdesigner奇淫技

  在日常开发中数据库的设计常常需要建立模型,而powerdesigner是个不错的选择。但很多时候用powerdesigner生成模型后再去创建表结构,会觉得烦和别扭。那么能不能数据库表建好后再生成模型呢?然而生成的模型是否符合我们的日常使用习惯呢?下面说说powerdesigner的奇淫技。

  1、根据sql生成视图模型(在不使用ODBC直接连接数据库的情况下)

    将表结构导出sql文件后执行以下操作

    

    

    

  按确定后便可生成相应的表视图模型。但是生成的视图模型name和code都是英文的,不好理解。因而有了奇淫技2。

  2、将comment列值复制到name列

    

    Ctr + O选择转换脚本 comment2name.vbs(将以下代码片段保存成一个vbs)    

‘******************************************************************************
‘* File:     comment2name.vbs
‘* Purpose:  在PowerDesigner的PDM图形窗口中显示数据列的中文注释
‘* Title:    将字段的comment赋值到字段的name中
‘* Category: 打开物理模型,运行本脚本(Ctrl+Shift+X)
‘* Copyright:[email protected],2006/07/25 .
‘* Author:   foxzz
‘* Created:
‘* Modified:
‘* Version:  1.0
‘* Comment:  遍历物理模型中的所有表,将字段的comment赋值到字段的name中。
‘            在将name置换为comment过程中,需要考虑的问题
‘            1、name必须唯一,而comment有可能不唯一。
‘               处理办法是如果字段的comment重复,则字段的name=comment+1、2、3...
‘            2、comment值有可能为空,这种情况下对字段的name不处理。
‘               针对oracle数据库,将comment on column 字段名称 is ‘‘;添加到C:/pdcomment.txt文件中。
‘               在补充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("C:/pdcomment.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

  

  最后点击run按钮,你会发现神奇的事情就这么发生了。

  3、让table视图同时显示name和code

  

  

  至此,你便可在查询工具里建立好表结构。然后再生成表模型了,省省体力吧!

时间: 2024-08-09 12:10:53

powerdesigner奇淫技的相关文章

CSS布局奇淫技巧之--各种居中

居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明外,都是兼容IE6+.谷歌.火狐等主流浏览器的. 先来说几种简单的.人畜无害的居中方法 1. 把margin设为auto 具体来说就是把要居中的元素的margin-left和margin-right都设为auto,此方法只能进行水平的居中,且对浮动元素或绝对定位元素无效. 2.使用 text-ali

iOS开发——淫技篇&amp;iOS开发中各种淫技总结(六)

iOS开发中各种淫技总结(六) swift中指针的使用 在 Swift 中,指针都使用一个特殊的类型来表示,那就是 UnsafePointer<T>.遵循了 Cocoa 的一贯不可变原则,UnsafePointer<T> 也是不可变的.当然对应地,它还有一个可变变体,UnsafeMutablePointer<T>.绝大部分时间里,C 中的指针都会被以这两种类型引入到 Swift 中:C 中 const 修饰的指针对应 UnsafePointer (最常见的应该就是 C

octave之奇巧淫技向量化计算实现寻找样本点所属聚类下标

前面有文章提到过,K-means算法,第一步骤是找出样本点的的所属聚类.下面用两种方式实现,一种是普通的循环,一种是完全向量化计算. 假设 : X 是m×n样本矩阵,其每一行是一个样本,m表示样本数目,n表示特征数目: centroids是K×n矩阵,K表示聚类数目,n表示特征数目,每一行是一个聚类的中心. idx是m×1矩阵,idx(i) 表示第i个样本所属的聚类下标.(取值范围 1..K ) 半循环半向量化方式 实现: 思想:循环遍历每一个样本点,计算每一个样本点距离K个聚类中心的值,并取最

iOS开发——淫技篇&amp;iOS开发中各种淫技总结(五)

淫技篇&iOS开发中各种淫技总结(五) ARC的使用: ARC并不能避免所有的内存泄露.使用ARC之后,工程中可能还会有内存泄露,不过引起这些内存泄露的主要原因是:block,retain循环,对CoreFoundation对象(通常是C结构)管理不善,以及真的是代码没写好. reuseIdentifier 在iOS程序开发中一个普遍性的错误就是没有正确的为UITableViewCells.UICollectionViewCells和UITableViewHeaderFooterViews设置r

iOS开发的一些奇巧淫技(转载)

iOS开发的一些奇巧淫技 http://www.cocoachina.com/ios/20141229/10783.html iOS开发的一些奇巧淫技2 http://www.cocoachina.com/ios/20141229/10801.html iOS开发的一些奇巧淫技3 http://www.cocoachina.com/ios/20150210/11130.html 2011斯坦福大学iOS应用开发视频教程笔记 http://blog.csdn.net/column/details/

C之奇淫技巧——宏的妙用

一.宏列表 当遇到这样的问题的时候: 有一个标记变量,其中的每个位代表相应的含义.我们需要提供一组函数来访问设置这些位,但是对于每个标记位的操作函数都是相似的.若有32个位,难道要搞32套相似的操作函数么? 你也许会说,用一套操作函数,根据传入的参数来判断对哪个位操作.这样固然可行,但是 ①不够直观.例如访问Movable标记位,对于用户来说,is Movable()是很自然的方式,而我们只能提供这样的接口isFlag(Movable) ②扩展性差.若以后增加删改标记位,则需要更改isFlag等

iOS开发——淫技篇&amp;iOS开发中各种淫技总结(四)

iOS开发中各种淫技总结(四) 一:@autoclosure将一段代码块活着一句表达式自动的封装成一个闭包 func logIfTrue(predicate: () -> Bool) { if predicate() { print("True") } } 调用 logIfTrue({return 2 > 1}) 简写:logIfTrue{2 > 1} 在predicate加上@autoclosure调用的时候就可以省略{}直接使用logIfTrue(2>1)

iOS开发——淫技篇&amp;iOS开发中各种淫技总结(二)

iOS开发中各种淫技总结(二) 先来张笔者电脑上面安装的Mac app 一:for .. in 的内部实现(swift): 1 var g = array.generate() 2 while let obj = g.next() { 3 4 5 print(obj) } 6 二:map/Fileter/Reduce map map方法,其获取一个闭包表达式作为其唯一参数. 数组中的每一个元素调用一次该闭包函数,并返回该元素所映射的值(也可以是不同类型的值). 具体的映射方式和返回值类型由闭包来

Objective-C 奇巧淫技--delegate挂钩

Objective-C 奇巧淫技–delegate挂钩 奇技淫巧 指过于奇巧而无益的技艺与制品. 需求说明 在实际的编程过程中,我们总要定制一些控件,在定制的过程里,有时喜欢自己实现部分delegate方法 // MYScrollView.m - (instancetype)init { ... self.delegae = self; ... } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"%s 我被执行&q