ASP3.0给我们带来的新技术之一---Data Shaping技术

Data shaping(又可以被称为分层记录集)
如果你对ACCESS非常熟悉的话,它就类似与其中的子表。在你使用VB
进行数据库开发的时候是你的最佳选择。
这种技术有很强大的运用场合,特别适应与OLTP等企业级运用程序的开发。
它允许你使用一种树状结构来表现你的数据,所以它特别适合与
来给用户显示有关联的数据表格形式。
简单的来说,就是它有一个母表(Recordset)然后
该母表中的某个字段中可以再容纳一个子表(Recordset)
当然一般来说,该子表中的某一个字段(例如主索引)和母表中的该字段
是关联的(relationship),这样当你执行一个查询后,结果将返回一个
多记录集.这种Data shaping技术给我们带来的好处如下:
1。性能上的提高,只要合理运用该技术,就能够大大提高
ASP连接数据库程序的性能.你也不必再为同时显示复杂的
相互关联的数据表单而发愁了。
2。编程上的大大简化:由于它引入的分层记录集结构,
使用树状视图来显示记录,你会发现你使用Data Shaping技术显示出来
的数据非常的美观。
还是以前的方法,废话少说,让代码来发言把:
本例子将使用SQL Server中带的例子数据库pubs

如何使用Data Shaping编程:
准备工作如下:
1。你应该安装有MSDataShape OLEDB Provider(在MDAC2。0版本以上均带该数据源提供者)
2。你应该会编写Shape语言,注意这不是一般的SQL语句,具体的语法你可以查看
ACCESS中的帮助文件。
几个必须注意的地方
(I)建立一个MSDataShape OLEDB Provider的ConnectionString如下(呵呵,看来我的那篇
数据库连接手册又可以加点新小编了):
'这是一个很普通的连接字符串,呵呵,其中的Kanga其实就是SQL Server在微软内部的代号
strConn = "Provider=SQLOLEDB;Data Source=Kanga;" &_
" Initial Catalog=pubs;User Id=sa;Passwprd="
'好,现在加入MSDataShape OLEDB Provider部分
strConn = "Provider=MSDataShape; Data " & strConn
好了,现在你已经设置数据的提供者为MSDataShape,
注意哦其中的数据源提供者是你真正的DSN部分。
(II)Shape语言
Shape语法你可以在ADO的帮助中可以找到详细的描述,我也不罗嗦
一般最常用的语句如下:
SHAPE {parent command} [AS parent alias]
APPEND ({child command} [AS child alias]
RELATE parent_column TO child_column) [AS parent_column_name]
一个最简单的例子如下:
SHAPE {SELECT * FROM Publishers}
APPEND ({SELECT * FROM Titles}
RELATE Pub_ID TO Pub_ID) AS rsTitles
上面的语句将Titles表作为Publishers的一个子表关联在一起,那么怎么访问它
的数据了,语法如下:
Set rsTitles = rsPublishers("rsTitles").Value
现在的rsTitles就是一个记录集,它就是子表中的数据
ASPShape.ASP文件代码如下:
<%
Dim rsPublishers
Dim rsTitles
Dim strShapeConn
Dim strShape
Dim strConn

strConn = "Provider=SQLOLEDB;Data Source=Kanga;" &_
" Initial Catalog=pubs;User Id=sa;Passwprd="

Set rsPublishers = Server.CreateObject("ADODB.RecordSet")
strShapeConn = "Provider=MSDataShape; Data " & strConn
strShape = "SHAPE {SELECT * FROM Publishers}" & _
" APPEND ({SELECT * FROM Titles}" & _
" RELATE Pub_ID TO Pub_ID) AS rsTitles"


rsPublishers.Open strShape,strShapeConn
Response.Write "<UL>"
While Not rsPublishers.EOF
Response.Write "<LI>" & rsPublishers("Pub_Name")
Response.Write "<UL>"
'下面开始显示子表的数据
Set rsTitles = rsPublsihers("rsTitles").Value
While Not rsTitles.EOF
Response.Write "<LI>" & rsTitles("title")
rsTitles.MoveNext
Wend
Response.Write "</UL>"
rsPublishers.MoveNext
Wend
Response.Write "</UL>"

rsPublishers.Close
Set rsPublishers = Nothing
Set rsTitles = Nothing
%>
大家可以运行以上的代码然后观看它的结果,再和平常的
使用SQL查询出来的相比较一下。
附注:这个时候只要再附加一点DHTML的语句,就能够做成
树状结构的收起和展开效果(就是类似与资源管理器左边的那个效果)
呵呵,这方面掉掉可是非常在行的把。
呵呵,上面介绍的只是很简单的一个子表,下面简单介绍一下
多子表的情况。
如果你的数据表中只有一个子表的话,其实使用SQL也能够来完成的,
还不能够充分显示Data Shaping技术的优势,但是如果你的母表中
同时有多个字段和其他的表有关联的话,你就可以充分看到这个技术的
威力了。
下面给出一个两个子表的例子
SHAPE {SELECT * FROM Publishers}
APPEND ({SELECT * FROM Titles}
RELATE Pub_ID TO Pub_ID) AS rsTitles,
({SELECT * FROM Employee}
RELATE Pub_ID TO Pub_ID) AS rsEmployees
简单把,呵呵。
这个还不算什么,要知道。如果当你的数据表中的
子表还有子表时,(这就是所谓的层状结构的记录集嘛)
使用Data Shaping技术你会发现更加的方便。这也是为什么
我在开始的时候说的该技术特别适用与OLTP和企业级复杂的数据库开发的缘故了。
下面是一个两层子表的例子
SHAPE {SELECT * FROM Publishers}
APPEND (( SHAPE {SELECT * FROM Titles}
APPEND ({SELECT * FROM Sales}
RELATE Title_ID TO Title_ID) AS rsSales)
RELATE Pub_ID TO Pub_ID) AS rsTitles

其实,不仅可以在Data Shaping中使用SQL语句,还可以使用存储过程的。

----------------------------------------------------
编者注:此文发表于2000年,文中的代码未测试成功。
----------------------------------------------------

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


数组的定义 Dim MyArray MyArray = Array(1‚5‚123‚12‚98) 可扩展数组 Dim MyArray() for i = 0 to 10
\'参数: \'code:要检测的代码 \'leixing:html或者ubb \'nopic:代码没有图片时默认值
演示效果: 代码下载: 点击下载
环境:winxp sp2 ,mysql5.0.18,mysql odbc 3.51 driver 表采用 myisam引擎。access 2003  不同的地方: 
其实说起AJAX的初级应用是非常简单的,通俗的说就是客户端(javascript)与服务端(asp或php等)脚本语言的数据交互。
<% ’判断文件名是否合法 Function isFilename(aFilename)  Dim sErrorStr,iNameLength,i  isFilename=TRUE
在调用的时候加入判断就行了. {aspcms:navlist type=0 } {if:[navlist:i]<6} < li><a href=\"[navlist:link]\" target=\"_top\">[navlist:name]</a> </li>
导航栏调用 {aspcms:navlist type=0}     <a href=\"[navlist:link]\">[navlist:name]</a>
1.引入外部文件: {aspcms:template src=infobar.html} 2.二级下拉菜单 <ul class=\"nav\">
downpic.asp页面:  <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
Cookies是数据包,可以让网页具有记忆功能,在某台电脑上记忆一定的信息。Cookies的工作原理是,第一次由服务器端写入到客户端的系统中。以后每次访问这个网页,都是先由客户端将Cookies发送到服务器端,再由服务器端
很简单,在需要调用的地方用这种模式 {aspcms:content sort={aspcms:sortid} num=17 order=isrecommend}
网站系统使用ACCESS数据库时,查询时怎么比较日期和时间呢?为什么常常比较出来却是错误的呢?比如早的日期比迟的日期大?
str1=\"1235,12,23,34,123,21,56,74,1232\" str2=\"12\" 问题:如何判断str2是否存在str1中,要求准确找出12,不能找出str1中的1235、123、1232
实例为最新版本的kindeditor 4.1.5. 主要程序: <% Const sFileExt=\"jpg|gif|bmp|png\" Function ReplaceRemoteUrl(sHTML,sSaveFilePath,sFileExt)
用ASP实现搜索引擎的功能是一件很方便的事,可是,如何实现类似3721的智能搜索呢?比如,当在搜索条件框内输入“中国人民”时,自动从中提取“中国”、“人民”等关键字并在数据库内进行搜索。看完本文后,你就可以发
首先感谢ASPCMS官网注册用户xing0203的辛苦付出!一下为久忆YK网络转载原创作者xing0203的文章内容!为了让小白更加清楚的体验替换过程,久忆YK对原文稍作了修改!
数据库连接: <% set conn=server.createobject(\"adodb.connection\") conn.open \"driver={microsoft access driver (*.mdb)};dbq=\"&server.mappath(\"数据库名\")
第1步:修改plugins下的image/image.js 找到\'<input type=\"button\" class=\"ke-upload-button\" value=\"\' + lang.upload + \'\" />\',
asp函数: <% Const sFileExt=\"jpg|gif|bmp|png\" Function ReplaceRemoteUrl(sHTML,sSaveFilePath,sFileExt)