• PowerDesigner实用技巧小结(2)


    PowerDesigner实用技巧小结

    1、ORACLE数据库建模时,由于ORACLE的表名、字段名如果是小写会有一定的麻烦,需要将小写转化为大写?
    (1)在打开pdm的情况下,进入Tools-Model Options-Naming Convention,把Name和Code的标签的Charcter case选项设置成Uppercase就可以!
    (2)如果仅想在preview这一层实现,也可以选择Database->Edit current database->Script->Sql->Format,有一项CaseSensitivityUsingQuote,它的 comment为"Determines if the case sensitivity for identifiers is managed using double quotes",表示是否适用双引号来规定标识符的大小写, 可以看到右边的values默认值为"YES",改为"No"即可!
    建议使用方法(1)。
    2、在PDM里,发现某些字段的类型不可改?
    这可能是引用了DOMAIN的缘故,可以双击此列,进行更改。
    3、PDM连接的数据库类型更改?
    Database-Change/Edit Current Dbms...
    4、如何根据字段的中文NAME,以其汉语拼音首字母取得CODE英文名?
    在tools--> execute command 下执行 run script 的VB脚本:
    chn_to_ps.vbs
    Option Explicit
    ValidationMode = True
    InteractiveMode = im_Batch

    ' get the current active model
    Dim mdl ' the current model
    Set mdl = ActiveModel
    If (mdl Is Nothing) Then
    MsgBox "There is no Active Model"
    Else
    ListObjects(mdl)
    End If

    '-----------------------------------------------------------------------------
    ' Sub procedure to scan current package and print information on objects from current package
    ' and call again the same sub procedure on all children pacakge
    ' of the current package
    '-----------------------------------------------------------------------------
    Private Sub ListObjects(fldr) '列出所有的对象
    output "Scanning " & fldr.code
    Dim obj ' running object
    For Each obj In fldr.children
    ' Calling sub procedure to print out information on the object
    'DescribeObject obj
    TableSetNameToCode obj
    Next

    ' go into the sub-packages
    Dim f ' running folder
    For Each f In fldr.Packages '递归调用列出所有的对象
    'calling sub procedure to scan children package
    ListObjects f
    Next
    End Sub

    '-----------------------------------------------------------------------------
    ' Sub procedure to print information on current object in output
    '-----------------------------------------------------------------------------
    Private Sub DescribeObject(CurrentObject)
    if not CurrentObject.Iskindof(cls_NamedObject) then exit sub
    output "Found "+CurrentObject.ClassName+" """+CurrentObject.Name+""", Created by "+CurrentObject.Creator+" On "+Cstr(CurrentObject.CreationDate)
    End Sub
    '常数 值 描述
    'vbCr Chr(13) 回车符。
    'vbCrLf Chr(13) & Chr(10) 回车符与换行符。
    'vbFormFeed Chr(12) 换页符;在 Microsoft Windows 中不适用。
    'vbLf Chr(10) 换行符。
    'vbNewLine Chr(13) & Chr(10) 或 Chr(10) 平台指定的新行字符;适用于任何平台。
    'vbNullChar Chr(0) 值为 0 的字符。
    'vbNullString 值为 0 的字符串 与零长度字符串 ("") 不同;用于调用外部过程。
    'vbTab Chr(9) 水平附签。
    'vbVerticalTab Chr(11) 垂直附签;在 Microsoft Windows 中不适用。

    Private Sub TableSetNameToCode(CurrentObject)
    if not CurrentObject.Iskindof(cls_Table) then exit sub
    'output "Found "+CurrentObject.ClassName+" """+CurrentObject.Name+""", Created by "+CurrentObject.Creator+" On "+Cstr(CurrentObject.CreationDate)

    if not CurrentObject.isShortcut then
    output CurrentObject.name
    CurrentObject.code = "T_"&GetPy( CurrentObject.name)
    CurrentObject.comment = CurrentObject.name & "_"&CurrentObject.code
    Dim col ' running column
    dim index1
    index1 = 0
    for each col in CurrentObject.columns
    dim str11
    str11 = GetPy( col.name)
    col.code = str11 & cstr(index1 )
    col.Comment = col.name & "_" & col.code
    index1 = index1 + 1
    next
    end if

    End Sub

    '//生成汉字串首字母串
    function GetPy(strxx)
    dim i
    dim getpy1
    for i=1 to len(strxx)
    getpy1=getpy1 & getpychar(mid(strxx,i,1))

    next
    output getpy1
    GetPy = getpy1

    End function
    '//获取汉字的首字母

    function getpychar(char)
    '0---9 , a---z , A---Z
    if ((asc(char) >= asc("0") and asc(char) <= asc("9")) or (asc(char) >= asc("A") and asc(char) <= asc("Z")) or (asc(char) >= asc("a") and asc(char) <= asc("Z")) or asc(char) = asc("_") ) then
    getpychar = char
    else
    dim tmpp:tmpp=65536+asc(char)
    if(tmpp>=45217 and tmpp<=45252) then
    getpychar= "A"
    elseif(tmpp>=45253 and tmpp<=45760) then
    getpychar= "B"
    elseif(tmpp>=45761 and tmpp<=46317) then
    getpychar= "C"
    elseif(tmpp>=46318 and tmpp<=46825) then
    getpychar= "D"
    elseif(tmpp>=46826 and tmpp<=47009) then
    getpychar= "E"
    elseif(tmpp>=47010 and tmpp<=47296) then
    getpychar= "F"
    elseif(tmpp>=47297 and tmpp<=47613) then
    getpychar= "G"
    elseif(tmpp>=47614 and tmpp<=48118) then
    getpychar= "H"
    elseif(tmpp>=48119 and tmpp<=49061) then
    getpychar= "J"
    elseif(tmpp>=49062 and tmpp<=49323) then
    getpychar= "K"
    elseif(tmpp>=49324 and tmpp<=49895) then
    getpychar= "L"
    elseif(tmpp>=49896 and tmpp<=50370) then
    getpychar= "M"
    elseif(tmpp>=50371 and tmpp<=50613) then
    getpychar= "N"
    elseif(tmpp>=50614 and tmpp<=50621) then
    getpychar= "O"
    elseif(tmpp>=50622 and tmpp<=50905) then
    getpychar= "P"
    elseif(tmpp>=50906 and tmpp<=51386) then
    getpychar= "Q"
    elseif(tmpp>=51387 and tmpp<=51445) then
    getpychar= "R"
    elseif(tmpp>=51446 and tmpp<=52217) then
    getpychar= "S"
    elseif(tmpp>=52218 and tmpp<=52697) then
    getpychar= "T"
    elseif(tmpp>=52698 and tmpp<=52979) then
    getpychar= "W"
    elseif(tmpp>=52980 and tmpp<=53688) then
    getpychar= "X"
    elseif(tmpp>=53689 and tmpp<=54480) then
    getpychar= "Y"
    elseif(tmpp>=54481 and tmpp<=62289) then
    getpychar= "Z"
    else '如果不是中文,则用''代替
    getpychar=""
    end if
    end if

    output getpychar + "---->" + cstr(tmpp)
    End Function
    注:可以根据实际情况需要,对脚本进行微调,如:根据名称生成注释等。
    5、在查看编辑表时,可以一次选中多个列,然后对选中列的字段类型、主键等统一操作。
    6、逻辑图形的显示
    Tools/Model Options选项可以选择图形上是显示Name、Code;
    Tools/Display Preferences可以选择图形上显示的项目,如数据类型等;
    7、在修改name的时候,code的值将跟着变动
    Tools/General Options 打开Dialog将Operating modes中的 Name To Code mirroring 將前面的勾去掉
    8、sql语句中表名与字段名前的引号去除
    进入Tools-Model Options-Naming Convention,把Name和Code的标签的Charcter case选项设置成Uppercase或者Lowercase,只要不是Mixed Case就行
    9、批量生成测试数据
    DataBase->Generation Test Data-> 在此项内,可自由选择、设置
    10、根据中文名生成注释(通过4修改一下也可以,但效率太低)
    cat Create_Comment_src_chn.vbs
    Option Explicit
    ValidationMode = True
    InteractiveMode = im_Batch

    Dim mdl 'the current model

    'get the current active model
    Set mdl = ActiveModel
    If (mdl Is Nothing) Then
    MsgBox "There is no current Model"
    ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then
    MsgBox "The current model is not an Physical Data model."
    Else
    ProcessFolder mdl
    End If

    'This routine copy name into code for each table, each column and each view
    'of the current folder
    Private sub ProcessFolder(folder)
    Dim Tab 'running table
    for each Tab in folder.tables
    if not tab.isShortcut then
    tab.comment = tab.name
    Dim col 'running column
    for each col in tab.columns
    col.comment= col.name
    next
    end if
    next

    Dim view 'running view
    for each view in folder.Views
    if not view.isShortcut then
    view.comment = view.name
    end if
    next

    'go into the sub-packages
    Dim f 'running folder
    For Each f In folder.Packages
    if not f.IsShortcut then
    ProcessFolder f
    end if
    Next
    end sub
    11、PDM或CDM连线添加或删除结点
    CTRL+左键单击即可。

  • 相关阅读:
    软件工程第五次作业——例行报告
    “Hello world!”团队—团队选题展示(视频展示说明)
    “Hello world!”团队—文案+美工
    “Hello world!”团队—选题展示
    “Hello world!”贡献分分配规则
    “hello world!”团队第三次会议
    软件工程第四次作业——例行报告
    【AtCoder】ARC092 D
    Set和数组的互换
    优先队列的基本用法(java和c++)
  • 原文地址:https://www.cnblogs.com/sczw-maqing/p/3252714.html
Copyright © 2020-2023  润新知