数据定型是定义一个定型记录集的过程,定性记录集我们可以认为是一个层次记录集,层次记录集分为三种:
关系层次,参数化层次,分组层次。
我认为这种技术的最大优点是:没有数据冗余,界面显示清晰简单,对于多层数据操作更便利
要向应用这个技术,需要将数据驱动连接字符串中的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====
总结:上面的例子非常肤浅,主要是用于入门之用,实际上这些层次可以非常复杂,我们这里一般用不到那么复杂的。如果需要,可以查阅一些资料,但是我尝试编写复杂的层次,但是没有成功,遇到了一些以前没有见到又没有办法解决的问题。