<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大大毛 的筆記

      DDM's Note

    哪怕沒有辦法一定有說法,
    就算沒有鴿子一定有烏鴉,
    固執無罪 夢想有價,
    讓他們驚訝.

    posts - 14, comments - 23, trackbacks - 0, articles - 58
       :: 首頁 ::  :: 聯系 ::  :: 管理
    前言
    ??????上回提到過的架構及一些細節上的分析,馬上(時隔2天)就要拉出來蹓蹓了。這次的起因是需求變動。對頁面的顯示效果進行變更。

    需求變動:
    ??????要求將相同職場的單位進行合併,以前產出的記錄集會是這樣:
    職場單位職場其它信息
    Unit1AA001....
    Unit2AA001....
    Unit3AA002....
    ??????現在頁面要顯示成這樣:
    職場單位職場其它信息
    Unit1,Unit2AA001....
    Unit3AA002....

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

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

    代碼:
    ??????在原來的功能模塊fGetFreePlace中插入一行
    ????If?pretreatmentRsPlace(rsPlace)?=?False?Then?GoTo?ErrHandler
    ??????增加的處理FUNCTION,為能重復使用分割成2個了(cloneRsFrame是準備以後復用的)。
    ''****************************************************************************************************
    '
    *程式功能??:???????預處理"待退(閒置)租約資料報表"所需的職場記錄集
    '
    *功能說明??:???????現階段要求將相同"職場"?&&?"同狀態"的單位合併成一條記錄,單位檔合併成"單位1,單位2",以逗號分隔
    '
    *開發人員??: ?????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
    ????
    '準備記錄集
    ????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"))
    ????????
    '比較是否一條新的職場記錄,由於同一個單位既可能屬於"閒置",同時該職場在考察期也可能會"退租",因此分開
    ????????If?Not?((strCPlaceCodeFlag?=?strCPlaceCode)?And?(strFlagStateFlag?=?strFlagState))?Then
    ????????????
    If?index?=?0?Then
    ????????????????
    '第1條記錄,更新標識
    ????????????Else
    ????????????????
    '更新記錄集
    ????????????????rsResult.AddNew
    ????????????????
    For?i?=?0?To?rsResult.Fields.Count?-?1
    ????????????????????rsResult(i)?
    =?tmpArr(i)
    ????????????????
    Next
    ????????????????
    '使用合併單位名稱列表的值
    ????????????????rsResult("CUnitName")?=?strCUnitNameList
    ????????????????
    '清除單位列表,保存標識
    ????????????????strCUnitNameList?=?""
    ????????????
    End?If
    ????????????strCPlaceCodeFlag?
    =?strCPlaceCode
    ????????????strFlagStateFlag?
    =?strFlagState
    ????????
    Else
    ????????????
    '?do?nothing
    ????????End?If
    ????????
    '保存當前記錄
    ????????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
    ????
    ????
    '處理完畢,關閉源記錄集,返回處理過的記錄集
    ????If?rsPlace.State?=?1?Then?rsPlace.Close
    ????
    Set?rsPlace?=?rsResult
    ????rsPlace.MoveFirst
    ????
    ????pretreatmentRsPlace?
    =?True
    ????
    Exit?Function
    ErrHandler:
    ????pretreatmentRsPlace?
    =?False
    ????objCommon.WriteErrLog?TheMdlName,?
    "pretreatmentRsPlace",?"克隆記錄集結構異常",?Err.Number,?Err.Description
    End?Function

    '*****************************************************************************************************
    '*程式功能??:???????克隆記錄集結構

    '
    *開發人員??:???????ddm?2006/12/19
    '
    *異動人員
    '
    *傳入值????:???????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
    ????????
    '克隆字段結構
    ????????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",?"克隆記錄集結構異常",?Err.Number,?Err.Description
    End?Function

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

    ??????當N列放寬後,終於...掛了。

    評論

    # re: 複雜SQL語句的構建以及內部的封裝調試--續章1(視圖變更)  回復  更多評論   

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

    i am ddm

    主站蜘蛛池模板: 亚洲精品成人无码中文毛片不卡| 亚洲一区二区三区亚瑟| 日韩插啊免费视频在线观看| 亚洲成a人片在线网站| 精品国产一区二区三区免费看| 亚洲精品视频免费| 亚洲日本视频在线观看| 四虎在线播放免费永久视频 | a级毛片100部免费观看| 亚洲宅男天堂a在线| 内射无码专区久久亚洲| 日本人成在线视频免费播放| 中日韩亚洲人成无码网站| 亚洲伊人久久精品影院| 成人免费午夜无码视频 | 国产精品高清全国免费观看| CAOPORN国产精品免费视频| 亚洲国产精品成人综合久久久 | 2020年亚洲天天爽天天噜| 久久亚洲国产成人精品无码区| 国产成在线观看免费视频| 99久久婷婷免费国产综合精品| 亚洲中文字幕AV每天更新| 亚洲国产精品无码久久SM| 美女黄网站人色视频免费国产| 国产成人久久AV免费| 日韩一区二区三区免费播放| 亚洲啪啪免费视频| 亚洲成色WWW久久网站| 伊人久久亚洲综合影院| 成人免费毛片内射美女APP| 东方aⅴ免费观看久久av| 国产成人精品亚洲一区| 亚洲AV无码久久久久网站蜜桃 | 99亚洲精品卡2卡三卡4卡2卡| 久久精品国产亚洲av影院| 久久亚洲高清综合| 亚洲国产成人久久综合野外| 在线免费观看中文字幕| 无码国产精品一区二区免费虚拟VR| 黄色网站软件app在线观看免费|