2011年7月20日 星期三

powerdesigner 15 產生SQL指令

設計好PDM,接下來就要在DB上把物件都建立起來.

到  Database >> Generate Database  產生create 語法檔

結果出錯了,原來產生出來的create table  syntax中, 欄位的data type都變成了domain name 了

到 Database >> Edit Current DMBS >> Script >> Objects >> Domain >> Enable , 將Value點選為No即可

  
但問題又來了, 明明是int和smallint的欄位, 怎麼create table 中變成後加collate ??

/*==============================================================*/
/* Table: BatchLog                                              */
/*==============================================================*/
create table dbo.BatchLog (
   BatchLogID             int                  identity(1, 1),
   StartDateTime        datetime             not null,
   EndDateTime          datetime             null,
   Status                      smallint             collate Chinese_Taiwan_Stroke_CI_AS  not null,
   ProjectCode          nvarchar(256)        collate Chinese_Taiwan_Stroke_CI_AS null,
   StartDate               int                  collate Chinese_Taiwan_Stroke_CI_AS null,
   EndDate                int                  collate Chinese_Taiwan_Stroke_CI_AS null,
   constraint PK_BatchLog primary key (BatchLogID)
         on "PRIMARY"
)
on "PRIMARY"
go

有夠奇怪啦...找了半天, 才發現原來剛開始這些table是由現存DB反向轉成PDM的
轉入時,字串欄位在Microsoft 頁籤,都會將Collation name一起轉入

後來當把某些字串欄位分別改成了smallint及int型態時, PD15並未將其Collation name 給清空, 所以在generate script時,就變成了上面那樣了.

最後一個個欄位調整, 重建一下script就OK了.



所以如果有指定collation時,當改變資料型態時要記得自已去刪掉collation 定義.

2011年7月19日 星期二

VS2011 Pluralization of name

表格名稱若帶有s字母結尾, 使用Linq to SQL,建立.dbml時

記得先做下列設定..

Tools >> Options  >> Database Tools >> O/R Designer >> Pluralization  of name

Enabled 設成 False

不然VS2010會亂亂命名class , 有s的亂改成沒s, 沒有s的自已亂改成有s,


Pluralization  of name = 名稱的複數表示

我咧傻傻搞不清

2011年7月17日 星期日

IIS 7無法上傳超過30MB 檔案

網站由windows 2003換到windows 2008後, 上傳大旳檔案時會出現404 not found的錯

web.config httpruntim 有設定maxlength, 但仍無法上傳, google 到此篇
以下是更改設定指令.

REM切換到appcmd目錄
cd c:\Windows\systems32\inetsrv

REM 先備份IIS設定
appcmd add backup test20110718

REM 查看IIS備份紀錄是否存在
appcmd list backup

REM 先查主機的SiteName及APP list
appcmd list app

REM 查看目前上傳設定,找關鍵字requestLimits
appcmd list config "Default Web Site/mySite" -section:requestFiltering

REM 更改size 單位為byte ,以下為100MB左右
appcmd set config "Default Web Site/mySite" -section:requestFiltering -requestLimits.maxAllowedContentLength:102400000 -commitpath:apphost



2011年7月14日 星期四

powerdesigner 15 取消欄位 Code = Name

新增表格定義時,輸入欄位Name有時不想要同步到Code,

可在Tools >> General Options , 點選左方選單Dialog, 反勾選Name to Code mirroring



如果table要顯示的是code而不是name
Tools >> Model Options >> Naming Conventions >> Display 改成Name即可


每次必忘的設定, 每次都要找一下....

2011年7月13日 星期三

powerdesigner 15 文件範本

powerdesigner功能愈來愈多,表示使用上也愈來愈複雜

產生文件時,通常會先編輯好文件範本.
不然使用內定的範本後,產生出來的文件內容挺不實用的

PD15中,文件的功能也多了許多,常用的

1.希望物件依code排序,
在item 按mouse 右鍵,選 selection 進入後, 第一行S 就是排序選項, 勾選你要排序的欄位為Code即可

  
2.table 產出格式

 在item 按mouse 右鍵,選Layoyt進入後, 可勾選要顯示的Attribute, 同時也可設定欄位寬度
通常會選的就是下面這幾項




2011年7月12日 星期二

windows 2003 IIS 顯示silverlight

把原本部署在IIS7的網站改部署到windows 2003 R2 IIS上,

如果在顯示silverlight物件時,出現了這個錯誤....

網頁錯誤詳細資料

使用者代理程式: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; Foxy/1; .NET CLR 1.1.4322; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
時間戳記: Tue, 12 Jul 2011 09:43:13 UTC


訊息: Unhandled Error in Silverlight Application
Code: 2104   
Category: InitializeError      
Message: 2104 發生錯誤。    
行: 47
字元: 13
程式碼: 0
URI: http://bev2003/Demo/Scripts/jquery.silverlight.js






google找到以下訊息, 是IIS少了silverlight檔案的關聯設定


  • .xap application/x-silverlight-app

  • .xaml application/xaml+xml

  • .xbap application/x-ms-xbap 


  • 主要是在IIS 本機電腦,按右鍵選內容, 在MIME類型加入幾上三個檔案即可.

    2011年7月11日 星期一

    powerdesigner 轉出五個meta data table

    如果手上只有PDM,..想要產生 meta data table

    Tools >> powerbuilder >>Generate Extended Attributes...


    當然要先匯入powerbuilder extension,
    Tool >>Extension >>Import an Extension,勾選powerbuilder

    同時先準備好五個meta data table schema, 欄位名稱不能更改,但字串欄型態可加長.


    CREATE TABLE [dbo].[pbcatcol](
        [pbc_tnam] [char](30) NOT NULL,
        [pbc_tid] [int] NULL,
        [pbc_ownr] [char](30) NULL,
        [pbc_cnam] [char](30) NOT NULL,
        [pbc_cid] [smallint] NULL,
        [pbc_labl] [nvarchar](254) NULL,
        [pbc_lpos] [smallint] NULL,
        [pbc_hdr] [nvarchar](254) NULL,
        [pbc_hpos] [smallint] NULL,
        [pbc_jtfy] [smallint] NULL,
        [pbc_mask] [nvarchar](31) NULL,
        [pbc_case] [smallint] NULL,
        [pbc_hght] [smallint] NULL,
        [pbc_wdth] [smallint] NULL,
        [pbc_ptrn] [nvarchar](31) NULL,
        [pbc_bmap] [char](1) NULL,
        [pbc_init] [nvarchar](254) NULL,
        [pbc_cmnt] [nvarchar](4000) NULL,
        [pbc_edit] [nvarchar](31) NULL,
        [pbc_tag] [nvarchar](254) NULL,
     CONSTRAINT [PK_pbcatcol] PRIMARY KEY CLUSTERED
    (
        [pbc_tnam] ASC,
        [pbc_cnam] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
     GO
     
    CREATE TABLE [dbo].[pbcatedt](
        [pbe_name] [nvarchar](30) NOT NULL,
        [pbe_edit] [nvarchar](254) NULL,
        [pbe_type] [smallint] NOT NULL,
        [pbe_cntr] [int] NULL,
        [pbe_seqn] [smallint] NOT NULL,
        [pbe_flag] [int] NULL,
        [pbe_work] [char](32) NULL,
     CONSTRAINT [PK_pbcatedt] PRIMARY KEY CLUSTERED
    (
        [pbe_name] ASC,
        [pbe_seqn] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
     
    CREATE TABLE [dbo].[pbcattbl](
        [pbt_tnam] [char](30) NOT NULL,
        [pbt_tid] [int] NULL,
        [pbt_ownr] [char](30) NULL,
        [pbd_fhgt] [smallint] NULL,
        [pbd_fwgt] [smallint] NULL,
        [pbd_fitl] [char](1) NULL,
        [pbd_funl] [char](1) NULL,
        [pbd_fchr] [smallint] NULL,
        [pbd_fptc] [smallint] NULL,
        [pbd_ffce] [char](32) NULL,
        [pbh_fhgt] [smallint] NULL,
        [pbh_fwgt] [smallint] NULL,
        [pbh_fitl] [char](1) NULL,
        [pbh_funl] [char](1) NULL,
        [pbh_fchr] [smallint] NULL,
        [pbh_fptc] [smallint] NULL,
        [pbh_ffce] [char](32) NULL,
        [pbl_fhgt] [smallint] NULL,
        [pbl_fwgt] [smallint] NULL,
        [pbl_fitl] [char](1) NULL,
        [pbl_funl] [char](1) NULL,
        [pbl_fchr] [smallint] NULL,
        [pbl_fptc] [smallint] NULL,
        [pbl_ffce] [char](32) NULL,
        [pbt_cmnt] [nvarchar](4000) NULL,
     CONSTRAINT [PK_pbcattbl] PRIMARY KEY CLUSTERED
    (
        [pbt_tnam] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO


     
    CREATE TABLE [dbo].[pbcatvld](
        [pbv_name] [nvarchar](30) NOT NULL,
        [pbv_vald] [nvarchar](254) NOT NULL,
        [pbv_type] [smallint] NOT NULL,
        [pbv_cntr] [int] NULL,
        [pbv_msg] [nvarchar](254) NULL,
     CONSTRAINT [PK_pbcatvld] PRIMARY KEY CLUSTERED
    (
        [pbv_name] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

    轉出過程中, 其實PD會產生insert 及update 語法, 所以上述五個table應設立PK或Unique Index,以避免重覆轉入

    若手動修改了五個table的內容想要反向更新PDM時,則

    Tools >> powerbuilder >>Reverse Engineering Extended Attributes...就轉回來了.

    powerdesigner 反向轉出PDM

    剛開始寫程式是由powerbuilder 6.0開始的.
    所以理所當然,剛開始使用case tool也就是使用powerdesigner 6.0


    二者結合後有個很不錯的功能就是可以將做好的PDM直接轉出powerbuilder設計時使用的五個meta data table ,分別是
    pbcatcol ,放置表格欄位, 類似sql server 2005 的sys.columns
    pbcatedt,放置powerbuilder design時用的edit style, 如果開發過pb的應用系統,你會很高興有這個
    pbcatfmt,放置powerbuilder design時用的foramt,也是用在開發pb
    pbcattb,放置資料表, 類似sql server 2005 的sys.tables
    pbcatvld,放置驗證原則.

    以上幾個table,除了pbcatvld沒使用過外,其他4個在開發powerbuilder的程式時,一定是SA/SD必備且必要的設計工具了. 不然programmer在coding設計UI時真的會叫苦連天

    時過多年,我已經久違powerbuilder多年, 但每次在交付資料庫設計文件時, 一定都不忘附上PDM以及相關的report, 所以無論如何, 不管是先設計PDM還是先設計資料庫開表格, 到最後一定都會產出這幾個table

    powerdesigner在敝公司真是個老牌的case tool, 許多同事時至今日仍然在使用pd 6.0, 即便這個產品已經進化到15.0的版本了.但大家仍舊喜愛使用pd 6.0來進行SA/SD. 因為他算是所有pd的版本中最容易使用,最容易理解的一版了.


    對我而言, 因為很習慣直接在sql server 中先design,所以通常我都會先在sqlserver先編輯好欄位中文後, 然後再於pd中反向產出PDM .因為主要都是想利用pd產出資料庫的文件.

    然而,其他同事則是習慣在pd中新建PDM,然後再產生實體資料庫.

    powerdesigner從6.0開始就提供了正向與反向產生PDM或db table schema的功能

    在pd 15中,如果要由DB產出PDM,則在File >>Reverse Engineer>>Database
    連接到要轉出的DB類型後,
     先在Extension頁籤, 勾選PowerBuilder (為了日後可幾進行正反向轉換)
    如果要事後匯入,可以在開啟PDM後, 在Tool >>Extension >>Import an Extension,勾選powerbuilder
     選擇要轉入的資料庫連線
     這樣就完成PDM.

    最後,如果你是像我一樣,習慣在sql server description 維護資料表及欄位 中文說明,則產生完PDM後, 可利用 Tools >>Execute Command >>Edit/Run Script執行下列指令碼, 將comment轉換成name, 這樣你的PDM就同時可呈現欄位名稱及中文說明了.



    Option Explicit

    ValidationMode = True
    InteractiveMode = im_Batch 

    Dim mdl   
    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

    Private Sub ProcessFolder(folder)

     On Error Resume Next

     Dim tbl 'table
     For Each tbl In folder.tables
     
      If (Not tbl.IsShortcut) Then
       tbl.name = tbl.comment 
       Dim col 'column
       For Each col In tbl.columns
        If col.comment = "" Then
        Else
         col.name = col.comment
        End If
       Next
      End If
     Next

     Dim view 'view
     For Each view In folder.views
      If (Not view.IsShortcut) Then
       view.name = view.comment
      End If
     Next

     Dim f
     For Each f In folder.Packages
      If (Not f.IsShortcut) Then
       ProcessFolder f
      End If
     Next

    End Sub


    無論用什麼工具, 前提就是利用PD提供的正反向功能將苦差事做一次就好吧.

    自動記錄滑鼠點選操作

    為了一個需求,需要人工去點選幾個滑鼠的點選行為,找了幾種工具,覺得GS Auto Clicker最實用,極符合我的需求,尤其是多個固定位置的button點擊,解決了一個很耗時間的工作。 最後設定完預設hotkey F8為啟用鍵,就可以開始自動做工了。再按F8結束工作。 GS Au...