时间: 2021-08-13 作者:daque
概括: 正文档引见了怎样借助xml谈话实行在web页面上的owc对数据库中的数据举行展现的本领。因为xml数据不妨超过风火墙,所以该办法不妨实行在internet上对数据举行展示。 在鉴于web的数据库领会运用中,往往借助owc控件贯串html实行对数据的表格和图表两种办法的展示。普遍运用常常沿用owc径直贯穿数据库的办法,这会使数据库贯穿口令表露在存户端,而使数据库的安定性贬低。正文引见的沿用xml动作owc和数据库之间数据调换介质的办法,不妨制止这种对数据库形成的不安定伤害。同声,这也能带来其余少许长处,比方:使欣赏器与web效劳器及数据库间的交互度数缩小,进而加速排序等操纵的相应速率,并缩小了效劳器的负载。 一、获得xml数据 将数据库中的数据变化为xml方法的本领很多,正文档然而多对此举行引见。从本能、通用性观点商量,这边咱们沿用了ado径直序列化(长久化persist)数据的办法,代码如次: <!--getdata.asp --> <% dim strconn strconn="provider=sqloledb.1;persist security info=false;user id=sa;initial catalog=test;data source=jlwz" ’----------读取数据---------------- dim conn,rs set conn=server.createobject("adodb.connection") set rs=server.createobject("adodb.recordset") conn.open strconn rs.open "select stat_date,call_num,call_fee from callstat",conn ’将ado变化为xml dom const adpersistxml=1 dim objxmldom set objxmldom=server.createobject("msxml2.domdocument.3.0") rs.save objxmldom,adpersistxml set rs=nothing %> 这种办法获得的的xml并不够简略,个中包括了schema消息。 纵然对于owc中的datasourcecontrol控件来说,不妨径直沿用这种情势的xml数据,但商量到数据从效劳器向存户端传输的功效,咱们运用xslt对这种xml数据举行了变化。为此,编写了如次的clean.xsl文献: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:s="uuid:bdc6e3f0-6da3-11d1-a2a3-00aa00c14882" xmlns:dt="uuid:c2f41010-65b3-11d1-a29f-00aa00c14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#rowsetschema"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="/"> <xsl:element name="data"> <xsl:for-each select="/xml/rs:data/z:row"> <xsl:element name="row"> <xsl:for-each select="@*"> <xsl:element name="{name()}"> <xsl:value-of select="."/> </xsl:element> </xsl:for-each> </xsl:element> </xsl:for-each> </xsl:element> </xsl:template> </xsl:stylesheet> 而后,在getdata.asp中经过如次代码对前方的xml数据举行变化: ’用xslt整理变化xml数据 dim strcleanxml,objxslt set objxslt=server.createobject("msxml2.domdocument") objxslt.load(server.mappath("clean.xsl")) strcleanxml=objxmldom.transformnode(objxslt) 此时,就获得了咱们想要的比拟简略的xml构造的字符串,不妨大略地将其response.write到存户端: <data> <row> <stat_date>2003-06-01</stat_date> <call_num>100</call_num> <call_fee>200</call_fee> </row> <row> <stat_date>2003-07-01</stat_date> <call_num>200</call_num> <call_fee>400</call_fee> </row> 。。。 </data> [page_break]二、运用owc控件和html表格展示xml数据 2.1 基础功效的实行 这边兴建了其余一个html页面。为了运用方才获得的xml数据,在html页面中,沿用xml 数据岛: <xml id="dbxml" src="getdata.asp" onreadystatechange="init()"></xml> 而后,不妨运用html表格的绑定功效展示数据: <table datasrc="#dbxml" style="width:100%;border-collapse: collapse;" border=1 cellpadding=0 cellspacing=0> <tr> <td><div type=text datafld=stat_date></div></td> <td><div type=text datafld=call_num></div></td> <td><div type=text datafld=call_fee></div></td> </tr> </table> 在方才的xml数据岛的onreadystatechange事变对应的init()因变量中,咱们经过如次代码实行owc的图表: <object id=cs1 style="width:400px;top:0px;height:280px" classid=clsid:0002e556-0000-0000-c000-000000000046 viewastext> </object> <script lanaguage=vbscript> sub init() if(dbxml.readystate="complete") then dim strxml set strxml=dbxml.xmldocument createchart strxml,cs1 end if end sub sub createchart(byref oxml,cspace) ’按照传入的xml天生图表 dim xdoc,xroot,ccnt dim ndx,cnode,txtdata,txtcat,txtdata2 set xdoc=dbxml.xmldocument set xroot = xdoc.documentelement ccnt = xroot.childnodes.length txtdata = "":txtcat = "" ’ 从xml数据中获得相映的子符串 for ndx = 0 to ccnt - 1 set cnode = xroot.childnodes(ndx) txtcat = txtcat & cnode.childnodes(0).text txtdata = txtdata & cnode.childnodes(1).text txtdata2=txtdata2 & cnode.childnodes(2).text if ndx <> (ccnt -1) then txtcat = txtcat & "," txtdata = txtdata & "," txtdata2 = txtdata2 & "," end if next ’---底下发端画图---------- ’增添数据序列1 set ch =cspace.charts.add() set s = ch.seriescollection.add() s.name="通话用度(元)" s.caption=s.name s.setdata c.chdimcategories,c.chdataliteral, txtcat s.setdata c.chdimvalues, c.chdataliteral, txtdata s.type=8 ’弧线图 ’设定功夫刻度轴方法 set axcategory = cspace.charts(0).axes(c.chaxispositioncategory) with axcategory .groupingunittype = c.chaxisunitmonth ’月 .groupingunit = 1 ’单元 .numberformat="short date" ’短日子 end with ’增添数据序列2 set s2 = ch.seriescollection.add() s2.name="通话度数(次)" s2.caption=s2.name s2.setdata c.chdimvalues, c.chdataliteral, txtdata2 ’题目 ch.hastitle = true ch.title.caption="通话情景月报" ch.title.font.color="black" ch.title.font.size=10 ch.title.font.bold=true ’chartspace属性 cspace.border=c.chlinedash cspace.hasselectionmarks=true cspace.allowfiltering=true ’承诺吩咐与分批 cspace.allowpropertytoolbox=true ’树立图例及场所 ch.legend.position=c.chlegendpositionright ch.haslegend=false ’分红各别的组,表露双坐标轴 s2.ungroup true set axincomeaxis = ch.axes.add(s2.scalings(c.chdimvalues)) axincomeaxis.position = c.chaxispositionright axincomeaxis.hasmajorgridlines=false s2.type=0 ’柱形图 end sub 如许,咱们就获得了数据表格和图表,其最后功效如次: 如许,借助于xml本领和ie绑定本领,咱们就实行了owc对数据库中数据的展现,而在存户端并没有表露任何数据贯穿消息。 2.2 其余功效 owc不妨很简单的实行将所见到的图表生存为当地图片,大洪量便了运用者。同声,owc供给了多种图表典型,如:饼图、弧线图、柱形图等,符合在各别的情景下展示数据。 即使借助com组件、以及对xsl的精巧应用,咱们这个页面能获得更好的本能和更强的功效。比方:对html表格的排序(拜见附属类小部件中的html源代码)、数据分页等。其余,咱们还不妨实行通用的数据考察、探求功效。