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:foxzz@163.com,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-11-13 07:51:17

powerdesigner奇淫技的相关文章

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

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

iOS调试奇巧淫技(二)之LLDB

一篇我们介绍了iOS调试奇巧淫技(一),主要是几种断点的功能和运行时间测试,这次我们进一步学习一个让你用了之后爱不释手的测试工具--LLDB 简单介绍 LLDB是一个开源的内置于XCode的调试工具,可以安装C++或者Python插件.与LLDB相对应的是gdb,主要存在于基于UNIX平台的程序调试工具. 使用作用 在开发中我们经常要调试代码,用到最多的就是print和NSLog输出,这样的做法在某些程度下并不太高效,LLDB的引进在某些时候替代打印函数,提高测试效率. 用法 1.help he

一步一步SEO 之奇淫异术

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 SEO 奇淫异术        SEO 是一项系统长期细致的工作,我们要想把 SEO 发挥值极致,仅仅有上面的些许理论知识是不够的,还需要大量的实践经验.这些经验有很多被证明是有效的,我们不妨参考一下 1 :网站内容有规律更新,最好每天都有更新,这个更新是指增加新内容,如果仅仅是某篇文章的引用计数增加,这种更新不算.        2 :当网站定位明确,并登陆到搜索引擎

12个实用的 Javascript 奇淫技巧

取整同时转成数值型: '10.567890'|0 结果: 10 '10.567890'^0 结果: 10 -2.23456789|0 结果: -2 ~~-2.23456789 结果: -2 日期转数值: var d = +new Date(); //1295698416792 3. 类数组对象转数组: var arr = [].slice.call(arguments) 4. 漂亮的随机码: Math.random().toString(16).substring(2); //14位 Math.

手机日期插件mobiscroll奇巧淫技&amp;amp;mobiscroll 中文API

demo下载链接:http://download.csdn.net/detail/cometwo/9376336 mobiscroll 扩展:http://download.csdn.net/detail/cometwo/9376397 上一个国产轻量级的:http://download.csdn.net/detail/cometwo/9394560 <!DOCTYPE html> <html lang="en"> <head> <meta c

iOS调试奇巧淫技(一)

你以为,你以为的就是你以为的吗? 你以为你代码写的很OK啦? 你以为你的是大牛啦? 你以为的就是你以为的吗? 你的代码经得起考验吗?(PS:爱经得起考验吗) iOS调试的技巧很多,通过调试我们不仅可以迅速找到Bug的所在,更能优化代码,让你的你以为不再是你以为! 一.断点 普通断点 当运行时遇到断点会停止下来供程序员调试 我们清晰的看到此时的i依旧等于0,该函数在一个名为ViewController中 上图中有五个可选按钮 分别是取消断点按钮.继续执行一步按钮.步入按钮.步出按钮 条件断点 点击

Android之.so文件奇巧淫技

.so文件的前世今生 早期的Android系统几乎只支持ARMv5的CPU架构,而现在它可以支持7种,几乎涵盖了市面上大部分的CPU架构. Android系统目前支持的CPU架构主要包含以下7种:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI. 二进制接口(ABI) 应用程序二进制接口(Application Binary Interface)定义了二

iOS开发的一些奇巧淫技

TableView不显示没内容的Cell怎么办? 类似这种,我不想让下面那些空的显示. 很简单. self.tableView.tableFooterView = [[UIView alloc] init]; 试过的都说好. 加完这句之后就变成了这样. 自定义了leftBarbuttonItem左滑返回手势失效了怎么办?     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]                    

【前端模板之路】二、人肉非智举,让代码帮我们写代码才是王道

写在前面 在前面一篇文章<[前端模板之路]一.重构的兄弟说:我才不想看你的代码!把HTML给我交出来!>中,我们举了一个人肉各种createElement的例子,那繁琐程度绝对是惨绝人寰.人生本就苦短,每天加班又占据了不少时间,这么折腾下去,还让人怎么活.面对这种场景,我们该怎么做. 无需复杂的构建工具,仅几个简单的工具函数,帮我们告别重复意义的劳动:让代码帮我们写代码! 从最简单的例子说起 让代码帮我们写代码,似乎很豪迈的话,但相信部分童鞋听着还是有些丈二和尚摸不着头脑.那我们暂且抛开这句不