大大毛 的筆記

            DDM's Note

          哪怕沒有辦法一定有說(shuō)法,
          就算沒有鴿子一定有烏鴉,
          固執(zhí)無(wú)罪 夢(mèng)想有價(jià),
          讓他們驚訝.

          posts - 14, comments - 23, trackbacks - 0, articles - 58
             :: 首頁(yè) ::  :: 聯(lián)系 ::  :: 管理
          前言
          ??????上回提到過的架構(gòu)及一些細(xì)節(jié)上的分析,馬上(時(shí)隔2天)就要拉出來(lái)蹓蹓了。這次的起因是需求變動(dòng)。對(duì)頁(yè)面的顯示效果進(jìn)行變更。

          需求變動(dòng):
          ??????要求將相同職場(chǎng)的單位進(jìn)行合併,以前產(chǎn)出的記錄集會(huì)是這樣:
          職場(chǎng)單位職場(chǎng)其它信息
          Unit1AA001....
          Unit2AA001....
          Unit3AA002....
          ??????現(xiàn)在頁(yè)面要顯示成這樣:
          職場(chǎng)單位職場(chǎng)其它信息
          Unit1,Unit2AA001....
          Unit3AA002....

          思考及方案選擇:
          ??????這次的變動(dòng)算是不大,對(duì)邏輯沒有影響,難度較低,可選方案有2個(gè)。
          ??????1. 直接修改視圖,例如在ASP頁(yè)面中對(duì)產(chǎn)出記錄集的職場(chǎng)單位字段按職場(chǎng)實(shí)施合併;
          ??????2. 在產(chǎn)出記錄集前實(shí)施修改,例如在VB的DLL代碼中增加處理。
          ??????沒有什麼可以盤旋的余地,直接選擇方案2,原因是
          ??????a. 模塊的視圖掛了兩種,一種是ASP頁(yè)面的“預(yù)覽”,另一種是Excel數(shù)據(jù)文件的產(chǎn)出,方案1的變更需要在多處進(jìn)行。
          ??????b. 留下適應(yīng)再次變更的余地。

          實(shí)施細(xì)節(jié):
          ??????這次的變更屬於視圖層的變更,不需要去變更實(shí)現(xiàn)邏輯,因此不會(huì)考慮去變更實(shí)施邏輯的SQL(而且SQL也不擅長(zhǎng)解決此類問題),采取體外手術(shù)的方式解決。
          ??????實(shí)施的流程示例:
          ????????????SQL->原RS->處理(適應(yīng)這次的需求變更)->新RS->產(chǎn)出
          ??????這樣一來(lái)改動(dòng)的影響會(huì)是極其特別以及肯定的非常小,在cls中增加功能函數(shù)就好。

          代碼:
          ??????在原來(lái)的功能模塊fGetFreePlace中插入一行
          ????If?pretreatmentRsPlace(rsPlace)?=?False?Then?GoTo?ErrHandler
          ??????增加的處理FUNCTION,為能重復(fù)使用分割成2個(gè)了(cloneRsFrame是準(zhǔn)備以後復(fù)用的)。
          ''****************************************************************************************************
          '
          *程式功能??:???????預(yù)處理"待退(閒置)租約資料報(bào)表"所需的職場(chǎng)記錄集
          '
          *功能說(shuō)明??:???????現(xiàn)階段要求將相同"職場(chǎng)"?&&?"同狀態(tài)"的單位合併成一條記錄,單位檔合併成"單位1,單位2",以逗號(hào)分隔
          '
          *開發(fā)人員??: ?????ddm?2006/12/17
          '
          '****************************************************************************************************
          Private?Function?pretreatmentRsPlace(ByRef?rsPlace?As?Variant)?As?Boolean
          On?Error?GoTo?ErrHandler
          ????
          Dim?rsResult?As?New?ADODB.Recordset
          ????
          Dim?tmpArr?As?Variant
          ????
          Dim?strCPlaceCode?As?String,?strFlagState?As?String,?strCUnitName?As?String
          ????
          Dim?strCPlaceCodeFlag?As?String,?strFlagStateFlag?As?String,?strCUnitNameList?As?String,?index?As?Long,?i?As?Long
          ????
          '如果源記錄集為空則返回
          ????If?rsPlace.EOF?Then
          ????????pretreatmentRsPlace?
          =?True
          ????????
          Exit?Function
          ????
          End?If
          ????
          '準(zhǔn)備記錄集
          ????Set?rsResult?=?cloneRsFrame(rsPlace)
          ????
          If?rsResult?Is?Nothing?Then?GoTo?ErrHandler
          ????
          ????
          '變量初始化
          ????ReDim?tmpArr(rsResult.Fields.Count?-?1)
          ????strCPlaceCodeFlag?
          =?"i?am?ddm"
          ????strCUnitNameList?
          =?""
          ????index?
          =?0
          ????
          Do?While?Not?rsPlace.EOF
          ????????strCUnitName?
          =?Trim(rsPlace("CUnitName"))
          ????????strCPlaceCode?
          =?Trim(rsPlace("CPlaceCode"))
          ????????strFlagState?
          =?Trim(rsPlace("FlagState"))
          ????????
          '比較是否一條新的職場(chǎng)記錄,由於同一個(gè)單位既可能屬於"閒置",同時(shí)該職場(chǎng)在考察期也可能會(huì)"退租",因此分開
          ????????If?Not?((strCPlaceCodeFlag?=?strCPlaceCode)?And?(strFlagStateFlag?=?strFlagState))?Then
          ????????????
          If?index?=?0?Then
          ????????????????
          '第1條記錄,更新標(biāo)識(shí)
          ????????????Else
          ????????????????
          '更新記錄集
          ????????????????rsResult.AddNew
          ????????????????
          For?i?=?0?To?rsResult.Fields.Count?-?1
          ????????????????????rsResult(i)?
          =?tmpArr(i)
          ????????????????
          Next
          ????????????????
          '使用合併單位名稱列表的值
          ????????????????rsResult("CUnitName")?=?strCUnitNameList
          ????????????????
          '清除單位列表,保存標(biāo)識(shí)
          ????????????????strCUnitNameList?=?""
          ????????????
          End?If
          ????????????strCPlaceCodeFlag?
          =?strCPlaceCode
          ????????????strFlagStateFlag?
          =?strFlagState
          ????????
          Else
          ????????????
          '?do?nothing
          ????????End?If
          ????????
          '保存當(dāng)前記錄
          ????????For?i?=?0?To?rsPlace.Fields.Count?-?1
          ????????????tmpArr(i)?
          =?rsPlace(i)
          ????????
          Next
          ????????
          '合併單位名稱
          ????????If?Len(strCUnitNameList)?<?1?Then
          ????????????strCUnitNameList?
          =?strCUnitName
          ????????
          Else
          ????????????strCUnitNameList?
          =?strCUnitNameList?&?",?"?&?strCUnitName
          ????????
          End?If
          ????????
          ????????index?
          =?index?+?1
          ????????rsPlace.MoveNext
          ????
          Loop
          ????
          '更新記錄集
          ????rsResult.AddNew
          ????
          For?i?=?0?To?rsResult.Fields.Count?-?1
          ????????rsResult(i)?
          =?tmpArr(i)
          ????
          Next
          ????
          '使用合併單位名稱列表的值
          ????rsResult("CUnitName")?=?strCUnitNameList
          ????
          ????
          '處理完畢,關(guān)閉源記錄集,返回處理過的記錄集
          ????If?rsPlace.State?=?1?Then?rsPlace.Close
          ????
          Set?rsPlace?=?rsResult
          ????rsPlace.MoveFirst
          ????
          ????pretreatmentRsPlace?
          =?True
          ????
          Exit?Function
          ErrHandler:
          ????pretreatmentRsPlace?
          =?False
          ????objCommon.WriteErrLog?TheMdlName,?
          "pretreatmentRsPlace",?"克隆記錄集結(jié)構(gòu)異常",?Err.Number,?Err.Description
          End?Function

          '*****************************************************************************************************
          '*程式功能??:???????克隆記錄集結(jié)構(gòu)

          '
          *開發(fā)人員??:???????ddm?2006/12/19
          '
          *異動(dòng)人員
          '
          *傳入值????:???????templetRs???????????--樣本記錄集
          '
          *回傳值????:???????Recordset???????????--克隆記錄集
          '
          *****************************************************************************************************
          Public?Function?cloneRsFrame(templetRs?As?Variant)?As?ADODB.Recordset
          On?Error?GoTo?ErrHandler
          ????
          Dim?newRs?As?New?ADODB.Recordset,?f?As?Field
          ????
          If?templetRs?Is?Nothing?Then
          ????????
          Set?cloneRsFrame?=?Null
          ????
          Else
          ????????
          Set?newRs?=?New?ADODB.Recordset
          ????????
          '克隆字段結(jié)構(gòu)
          ????????For?Each?f?In?templetRs.Fields
          ???????????newRs.Fields.Append?f.Name,?f.Type,?f.DefinedSize,?adFldIsNullable
          ????????
          Next
          ????????newRs.Open
          ????
          End?If
          ????
          Set?cloneRsFrame?=?newRs
          ????
          Exit?Function
          ErrHandler:
          ????
          Set?cloneRsFrame?=?Nothing
          ????objCommon.WriteErrLog?TheMdlName,?
          "cloneRsFrame",?"克隆記錄集結(jié)構(gòu)異常",?Err.Number,?Err.Description
          End?Function

          後記:
          ??????算是一個(gè)小插曲,不過也是從這次的實(shí)現(xiàn)中(cloneRsFrame)受益。
          ??????後來(lái)USER增加了資料匯入的功能,當(dāng)俺們完成後就發(fā)現(xiàn)不得不“適當(dāng)”的修改一下表(僅僅是因?yàn)閁SER在Excel導(dǎo)入文件中某些列上寫了過多的說(shuō)明而已),修改表是最簡(jiǎn)單的那種,放列寬。
          ??????有兄弟的模塊中使用了這樣的代碼:
          ????Dim?rsPlace?as?new?ADODB.RecordSet
          ????rsPlace.Fields.Append?
          "CAddress",?adChar,?200
          ????rsPlace.AddNew
          ????rsPlace(
          "CAddress")?=?Trim(rsSource("CAddress"))
          ???
          .

          ??????當(dāng)N列放寬後,終於...掛了。

          評(píng)論

          # re: 複雜SQL語(yǔ)句的構(gòu)建以及內(nèi)部的封裝調(diào)試--續(xù)章1(視圖變更)  回復(fù)  更多評(píng)論   

          2007-07-02 19:47 by 大大米
          路過,順便澆下水~``

          i am ddm

          主站蜘蛛池模板: 远安县| 汝南县| 容城县| 桐城市| 东山县| 肥西县| 阳新县| 兰州市| 垫江县| 大安市| 雷波县| 图木舒克市| 凉城县| 洱源县| 新河县| 文安县| 桦甸市| 湘潭市| 湛江市| 巩义市| 隆安县| 宁国市| 石林| 手游| 临清市| 磐安县| 扶风县| 沂水县| 巴彦县| 鄂州市| 江城| 莱阳市| 库尔勒市| 麟游县| 承德市| 略阳县| 江华| 冷水江市| 西宁市| 香港| 德令哈市|