当前位置: 首页 > news >正文

powerdesigner奇淫技

原文: 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

  

  

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

相关文章:

  • 运营商级网络部署开启 物联网普及为时不远
  • SwizzleMethod 黑魔法
  • bootstrap-wysiwyg整合ajaxFileUpload实现图片实时上传刷新
  • 别成为网络安全垃圾数据收藏家
  • msyql 笔记
  • python连接sql server数据库
  • Mysql详解my-innodb-heavy-4G.cnf 配置
  • 为什么说Ubuntu的运行级别为2
  • python网络编程1
  • Exchange 跨林迁移 Part7 配置密钥服务器
  • SQLserver行转列与列转行
  • d3js shape深入理解
  • 解决WordPress安装主题/插件提示输入FTP帐号的问题
  • jdk 7下载地址
  • leetcode Longest Common Prefix
  • 30天自制操作系统-2
  • Android交互
  • CentOS从零开始部署Nodejs项目
  • JS函数式编程 数组部分风格 ES6版
  • k8s如何管理Pod
  • learning koa2.x
  • python_bomb----数据类型总结
  • React 快速上手 - 07 前端路由 react-router
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue全家桶实现一个Web App
  • 百度地图API标注+时间轴组件
  • 区块链分支循环
  • 深度解析利用ES6进行Promise封装总结
  • 通过npm或yarn自动生成vue组件
  • 在Unity中实现一个简单的消息管理器
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ionic入门之数据绑定显示-1
  • 交换综合实验一
  • ​ssh免密码登录设置及问题总结
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #Z2294. 打印树的直径
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (1)虚拟机的安装与使用,linux系统安装
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (四) 虚拟摄像头vivi体验
  • (四)Controller接口控制器详解(三)
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)Mysql的优化设置
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .“空心村”成因分析及解决对策122344
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net Application的目录
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net mvc 获取url中controller和action
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性