資料定型是定義一個定型記錄集的過程,定性記錄集我們可以認為是一個層次記錄集,層次記錄集分為三種:
關係層次,參數化層次,分組層次。
我認為這種技術的最大優點是:沒有資料冗餘,介面顯示清晰簡單,對於多層資料操作更便利
要嚮應用這個技術,需要將資料驅動連接字串中的Provider設定為:MSDataShape
具體應用需要Shape命令:並有兩種不同的shape語句:
一、shape{sql1} append({sql2} as ?? relate a to b)
他的工作方式就是:首先查詢sql1,然後再根據 relate a to b指定的條件查詢sql2,然後在sql1檢索結果的後面分別添加一個欄位,分別用於儲存相應的sql2查詢結果的記錄集,也就是說sql1查詢結果為父記錄集,sql2查詢結果為子記錄集。
這種方式還分為兩種:關係層次和參數化層次
關係層次例子:Shape{select a,b from t1} append({select m,n from t2} relate a=m)
參數化層次的例子:shape{select a,b from t1} append({select m,n from t2 where m=?} relate a to Parameter 0)
可見,在參數化層次中,有一個where m=? 和一個parameter 0
這個的功能起始和上一個關係層次一樣,只是工作原理不同而已,這種情況下,資料不是一次栽入,只檢索父記錄集上的資料,子記錄集只有在你顯示的開啟基於章節欄位的一個記錄集時,才檢索。
例子:
<%
Set Db = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
mmm="driver={SQL Server};server=192.1.1.21;uid=sa;pwd=myself;database=gwjp2"
db.Provider="MSDataShape"
db.Open mmm
rs.Open "shape{select name,id from tgw} append({select name,gwid from tren} as liu relate id to gwid) AS liu",db,3,1
Response.Write rs.RecordCount
Response.Write "<hr>"
do while not rs.EOF
Response.Write "崗位名:" & rs(0)
set qq=rs("liu").value
Response.write "<br> 記錄數 " & qq.recordcount & ":<br>"
do while not qq.eof
for i=0 to qq.fields.count-1
Response.Write qq(i) & " | "
next
Response.Write "<br>"
qq.movenext
loop
Response.Write "<br>"
Response.Write "<hr>"
rs.MoveNext
loop
%>
執行結果為:
42
--------------------------------------------------------------------------------
崗位名:網路系統管理B
記錄數 0:
--------------------------------------------------------------------------------
崗位名:應用軟體開發J
記錄數 2:
姓名1 | 9 |
姓名2 | 9 |
--------------------------------------------------------------------------------
崗位名:股市分析
記錄數 0:
--------------------------------------------------------------------------------
崗位名:複印工
記錄數 4:
姓名3 | 68 |
姓名4 | 68 |
姓名5 | 68 |
姓名6 | 68 |
--------------------------------------------------------------------------------
崗位名:巡守員B
記錄數 1:
姓名7 | 69 |
--------------------------------------------------------------------------------
崗位名:售後服務站主任H
記錄數 1:
姓名8 | 111 |
--------------------------------------------------------------------------------
崗位名:現場技術診斷D
記錄數 1:
姓名9 | 121 |
--------------------------------------------------------------------------------
崗位名:現場技術診斷G
記錄數 3:
姓名10 | 123 |
姓名11 | 123 |
姓名12 | 123 |
--------------------------------------------------------------------------------
崗位名:執法監察B
記錄數 0:
--------------------------------------------------------------------------------
崗位名:清掃
記錄數 3:
姓名13 | 152 |
姓名14 | 152 |
姓名15 | 152 |
--------------------------------------------------------------------------------
崗位名:品質體系
記錄數 1:
姓名16 | 160 |
--------------------------------------------------------------------------------
崗位名:外協件檢驗B
記錄數 2:
姓名17 | 206 |
姓名18 | 206 |
--------------------------------------------------------------------------------
崗位名:機電配件檢驗C
記錄數 2:
姓名19 | 207 |
姓名20 | 207 |
--------------------------------------------------------------------------------
崗位名:調研秘書D
記錄數 1:
姓名21 | 216 |
--------------------------------------------------------------------------------
崗位名:政策研究B
記錄數 0:
--------------------------------------------------------------------------------
崗位名:打字複印C
記錄數 1:
姓名22 | 280 |
--------------------------------------------------------------------------------
崗位名:庫房管理
記錄數 4:
姓名23 | 485 |
姓名24 | 485 |
姓名25 | 485 |
姓名26 | 485 |
--------------------------------------------------------------------------------
崗位名:財務分析
記錄數 0:
--------------------------------------------------------------------------------
崗位名:綠化技術管理A
記錄數 1:
姓名27 | 560 |
--------------------------------------------------------------------------------
崗位名:綠化技術管理B
記錄數 3:
姓名28 | 592 |
姓名29 | 592 |
姓名30 | 592 |
--------------------------------------------------------------------------------
崗位名:總值班調度D
記錄數 3:
姓名31 | 627 |
姓名32 | 627 |
姓名33 | 627 |
--------------------------------------------------------------------------------
崗位名:生產調度L
記錄數 2:
姓名34 | 628 |
姓名35 | 628 |
--------------------------------------------------------------------------------
崗位名:環境檢測化驗A
記錄數 1:
姓名36 | 651 |
--------------------------------------------------------------------------------
崗位名:環境檢測化驗B
記錄數 2:
姓名37 | 652 |
姓名38 | 652 |
--------------------------------------------------------------------------------
崗位名:資產管理A
記錄數 2:
姓名39 | 665 |
姓名40 | 665 |
--------------------------------------------------------------------------------
崗位名:能源外購與外聯
記錄數 1:
姓名41 | 667 |
--------------------------------------------------------------------------------
崗位名:能源監察與仲裁
記錄數 5:
姓名42 | 682 |
姓名43 | 682 |
姓名44 | 682 |
姓名45 | 682 |
姓名46 | 682 |
--------------------------------------------------------------------------------
崗位名:東門警衛F-I
記錄數 7:
姓名47 | 747 |
姓名48 | 747 |
姓名49 | 747 |
姓名50 | 747 |
姓名51 | 747 |
姓名52 | 747 |
姓名53 | 747 |
--------------------------------------------------------------------------------
崗位名:南門警衛G-I
記錄數 5:
姓名54 | 749 |
姓名55 | 749 |
姓名56 | 749 |
姓名57 | 749 |
姓名58 | 749 |
--------------------------------------------------------------------------------
崗位名:物資門警衛I
記錄數 1:
姓名59 | 751 |
--------------------------------------------------------------------------------
崗位名:西門警衛H,I
記錄數 2:
姓名60 | 753 |
姓名61 | 753 |
--------------------------------------------------------------------------------
崗位名:地變看車點警衛B
記錄數 1:
姓名62 | 757 |
--------------------------------------------------------------------------------
崗位名:南外門警衛
記錄數 3:
姓名63 | 759 |
姓名64 | 759 |
姓名65 | 759 |
--------------------------------------------------------------------------------
崗位名:專用線門警衛B-D
記錄數 7:
姓名66 | 761 |
姓名67 | 761 |
姓名68 | 761 |
姓名69 | 761 |
姓名70 | 761 |
姓名71 | 761 |
姓名72 | 761 |
--------------------------------------------------------------------------------
崗位名:後勤服務B
記錄數 3:
姓名73 | 763 |
姓名74 | 763 |
姓名75 | 763 |
--------------------------------------------------------------------------------
崗位名:經營預算計劃
記錄數 0:
--------------------------------------------------------------------------------
崗位名:資產經營管理
記錄數 1:
姓名76 | 805 |
--------------------------------------------------------------------------------
崗位名:金相檢驗與分析
記錄數 2:
姓名77 | 806 |
楊影 | 806 |
--------------------------------------------------------------------------------
崗位名:巡守員
記錄數 1:
姓名78 | 807 |
--------------------------------------------------------------------------------
崗位名:管庫
記錄數 3:
姓名79 | 808 |
姓名80 | 808 |
姓名81 | 808 |
--------------------------------------------------------------------------------
崗位名:北京項目部業務主辦A
記錄數 2:
姓名83 | 809 |
姓名83 | 809 |
--------------------------------------------------------------------------------
崗位名:晒圖工C-J
記錄數 3:
姓名84 | 810 |
姓名85 | 810 |
姓名86 | 810 |
二、shape{sql1} as a1 compute a1 by groupfieldlist
他的工作方式是:將sql1的查詢結果根據groupfieldlist進行分組,每組單獨成立一個字記錄集。父記錄集的第一個欄位存放對應的子記錄集的指標,父記錄集的其他欄位儲存相應的groupfieldlist的值。
例子如下:
<%
Set Db = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
mmm="driver={SQL Server};server=192.1.1.21;uid=sa;pwd=myself;database=gwjp2"
db.Provider="MSDataShape"
db.Open mmm
rs.Open "shape{select dwname, gwlevel from tzl order by dwname } as ddd compute ddd by dwname,gwlevel",db,3,1
Response.Write rs.RecordCount
Response.Write "<hr>"
do while not rs.EOF
tt=""
for i=1 to rs.Fields.count-1
tt= tt & " " & rs(i)
next
set qq=rs(0).Value
response.write "<font color=ff0000>" & tt & " --------- " & qq.recordcount & "<br></font>"
do while not qq.eof
for i=0 to qq.fields.count-1
Response.Write qq(i) & "===="
next
Response.Write "<br>"
qq.movenext
loop
Response.Write "<hr>"
rs.MoveNext
loop
%>
執行結果為:
24
--------------------------------------------------------------------------------
xx公司 生產製造部 13 --------- 2
xx公司 生產製造部====13====
xx公司 生產製造部====13====
--------------------------------------------------------------------------------
xx公司 生產製造部 35 --------- 2
xx公司 生產製造部====35====
xx公司 生產製造部====35====
--------------------------------------------------------------------------------
xx公司 生產製造部 39 --------- 2
xx公司 生產製造部====39====
xx公司 生產製造部====39====
--------------------------------------------------------------------------------
xx公司 市場一部 9 --------- 1
xx公司 市場一部====9====
--------------------------------------------------------------------------------
xx公司 市場一部 14 --------- 1
xx公司 市場一部====14====
--------------------------------------------------------------------------------
xx公司 市場一部 37 --------- 1
xx公司 市場一部====37====
--------------------------------------------------------------------------------
xx公司 市場一部 40 --------- 1
xx公司 市場一部====40====
--------------------------------------------------------------------------------
xx公司 市場一部 45 --------- 1
xx公司 市場一部====45====
--------------------------------------------------------------------------------
xx公司 資產運營部 9 --------- 1
xx公司 資產運營部====9====
--------------------------------------------------------------------------------
xx公司 資產運營部 39 --------- 2
xx公司 資產運營部====39====
xx公司 資產運營部====39====
--------------------------------------------------------------------------------
xx公司 資產運營部 41 --------- 1
xx公司 資產運營部====41====
--------------------------------------------------------------------------------
xx公司 綜合保障部 9 --------- 1
xx公司 綜合保障部====9====
--------------------------------------------------------------------------------
xx公司 綜合保障部 14 --------- 4
xx公司 綜合保障部====14====
xx公司 綜合保障部====14====
xx公司 綜合保障部====14====
xx公司 綜合保障部====14====
--------------------------------------------------------------------------------
xx公司 綜合保障部 15 --------- 1
xx公司 綜合保障部====15====
--------------------------------------------------------------------------------
xx公司 綜合保障部 17 --------- 6
xx公司 綜合保障部====17====
xx公司 綜合保障部====17====
xx公司 綜合保障部====17====
xx公司 綜合保障部====17====
xx公司 綜合保障部====17====
xx公司 綜合保障部====17====
--------------------------------------------------------------------------------
xx公司 綜合保障部 18 --------- 3
xx公司 綜合保障部====18====
xx公司 綜合保障部====18====
xx公司 綜合保障部====18====
--------------------------------------------------------------------------------
品質保證部 計量處 15 --------- 1
品質保證部 計量處====15====
--------------------------------------------------------------------------------
品質保證部 品質管理處 26 --------- 2
品質保證部 品質管理處====26====
品質保證部 品質管理處====26====
--------------------------------------------------------------------------------
品質保證部 品質管理處 41 --------- 1
品質保證部 品質管理處====41====
--------------------------------------------------------------------------------
企業管理部 資訊中心 41 --------- 1
企業管理部 資訊中心====41====
--------------------------------------------------------------------------------
研發中心 城軌客車開發部 9 --------- 1
研發中心 城軌客車開發部====9====
--------------------------------------------------------------------------------
研發中心 檔案館 9 --------- 1
研發中心 檔案館====9====
--------------------------------------------------------------------------------
研發中心 檔案館 16 --------- 1
研發中心 檔案館====16====
--------------------------------------------------------------------------------
研發中心 檔案館 18 --------- 1
研發中心 檔案館====18====
總結:上面的例子非常膚淺,主要是用於入門之用,實際上這些層次可以非常複雜,我們這裡一般用不到那麼複雜的。如果需要,可以查閱一些資料,但是我嘗試編寫複雜的層次,但是沒有成功,遇到了一些以前沒有見到又沒有辦法解決的問題。