转自:http://blog.sina.com.cn/u/48932504010005t9
转自:http://www.cnblogs.com/cxd4321/archive/2009/03/07/1405475.html
作者:剑飘红
在使用PowerDesigner对数据库进行概念模型和物理模型设计时,一般在NAME或Comment中写中文,在Code中写英文。Name用来显 示,Code在代码中使用,但Comment中的文字会保存到数据库Table或Column的Comment中,当Name已经存在的时候,再写一次 Comment很麻烦,可以使用以下代码来解决这个问题:
- 代码一:将Name中的字符COPY至Comment中
Option ExplicitValidationMode = TrueInteractiveMode = im_BatchDim mdl ' the current model' get the current active modelSet mdl = ActiveModelIf (mdl Is Nothing) ThenMsgBox "There is no current Model "ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) ThenMsgBox "The current model is not an Physical Data model. "ElseProcessFolder mdlEnd If' This routine copy name into comment for each table, each column and each view' of the current folderPrivate sub ProcessFolder(folder)Dim Tab 'running tablefor each Tab in folder.tablesif not tab.isShortcut thentab.comment = tab.nameDim col ' running columnfor each col in tab.columnscol.comment= col.namenextend ifnextDim view 'running viewfor each view in folder.Viewsif not view.isShortcut thenview.comment = view.nameend ifnext' go into the sub-packagesDim f ' running folderFor Each f In folder.Packagesif not f.IsShortcut thenProcessFolder fend ifNextend sub
--------------------------------------------
另外在使用REVERSE ENGINEER从数据库反向生成PDM的时候,PDM中的表的NAME和CODE事实上都是CODE,为了把NAME替换为数据库中Table或Column的中文Comment,可以使用以下脚本:
- 代码二:将Comment中的字符COPY至Name中 Option ExplicitValidationMode = TrueInteractiveMode = im_BatchDim mdl ' the current model' get the current active modelSet mdl = ActiveModelIf (mdl Is Nothing) ThenMsgBox "There is no current Model "ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) ThenMsgBox "The current model is not an Physical Data model. "ElseProcessFolder mdlEnd IfPrivate sub ProcessFolder(folder)On Error Resume NextDim Tab 'running tablefor each Tab in folder.tablesif not tab.isShortcut thentab.name = tab.commentDim col ' running columnfor each col in tab.columnsif col.comment="" thenelsecol.name= col.commentend ifnextend ifnextDim view 'running viewfor each view in folder.Viewsif not view.isShortcut thenview.name = view.commentend ifnext' go into the sub-packagesDim f ' running folderFor Each f In folder.Packagesif not f.IsShortcut thenProcessFolder fend ifNextend sub
以上两段代码都是VB脚本,在PowerDesigner中使用方法为:
PowerDesigner->Tools->Execute Commands->Edit/Run Scripts
将代码Copy进去执行就可以了,是对整个CDM或PDM进行操作
----------------------------------------------------------------------------------------------
PowerDesigner中配置外键关系时,
如果要删除配置的外键关系,
默认设置会一同删除外键列.
要更改此设置,
需在菜单栏tools中打开Model Options,
在Model Settings中点击Reference,
然后把"Auto-migrate columns"[自动移除列]这个checkbox的勾去掉,即可.
------------------------------------------------------------------------------------
让PowerDesigner自动使用Name作为备注
Database->Database Generation
------------------------------------------------------------------------
去掉 Chinese_PRC
今天在使用PowerDesigner 16设计数据库时,导出的sql语句在SqlServer中执行时,意外的让人悲催、抓狂、甚至想自杀!!!
其中就有如题这样的一个错误,看下面sql语句:
create table dbo.t_call_note ( id int identity(100,1), name char(19) collate Chinese_PRC_Stroke_90_CS_AS_KS_WS not null, pwd char(19) collate Chinese_PRC_Stroke_90_CS_AS_KS_WS null, constraint PK_T_CALL_INFO primary key (id) on "PRIMARY" ) on "PRIMARY" go
其中SqlServer报错:collate chinese_prc_ci_as意外。。。
上面的sql包含collate Chinese_PRC_Stroke_90_CS_AS_KS_WS not null,这是一种排序方式。
但是在执行sql时就会出现错误.如果column为int时就会报错。那么我们如果如下设置,问题不再是问题了。
解决方案:
1.点击:工具栏-》database-》edit current DBMS
2.选择数据源(以SqlServer2005为例)
Microsoft SQLServer2005ScriptObjectsColumnAdd
将如下代改
%20:COLUMN%
[%COMPUTE%?AS (%COMPUTE%):
[%.L:DATATYPE%=xml?xml
[%XMLSchemaCollection%?(
[%ContentType% ]%XMLSchemaCollection.GeneratedName%):]:%20:DATATYPE%]
[%ExtRowGuidCol%? RowGuidCol]
[%IDENTITY%? %IDENTITY%[[(%ExtIdentitySeedInc%)]
[%ExtIdtNotForReplication%? not for replication]]:[%ExtNullConstName%? constraint %ExtNullConstName%]
[ %NULL%][ %NOTNULL%]][
[%ExtDeftConstName%? constraint %ExtDeftConstName%] default %DEFAULT%]
[%CONSTDEFN%]]
保存即可。
重新生成。。。发现已经没有了。。collate chinese_prc_ci_as
惊喜!!!!