利用datashape技术构建层次记录集

上传人:第*** 文档编号:32828074 上传时间:2018-02-12 格式:DOC 页数:6 大小:43.50KB
返回 下载 相关 举报
利用datashape技术构建层次记录集_第1页
第1页 / 共6页
利用datashape技术构建层次记录集_第2页
第2页 / 共6页
利用datashape技术构建层次记录集_第3页
第3页 / 共6页
利用datashape技术构建层次记录集_第4页
第4页 / 共6页
利用datashape技术构建层次记录集_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《利用datashape技术构建层次记录集》由会员分享,可在线阅读,更多相关《利用datashape技术构建层次记录集(6页珍藏版)》请在金锄头文库上搜索。

1、 在 VB 中利用 DataShape 技术构建层次记录集一、引言 在开发数据库应用程序的过程中,经常会遇到以层次结构显示相关记录的情况。如显示公司组织结构中各个部门员工的分布,又比如显示所有客户在一段时期内的详细购货记录条目。一般,这些数据在数据库中都是以两张单独的数据表存在的,因此在把实际数据按要求呈现给用户前,首先需要建立这两张数据表之间的连接,而常规的方法都是使用 SQL 语句中的 Join 语法实现。在建立连接之后,再通过循环、递归等算法完成界面呈现。 表面上看,这样的实现方式确实满足了功能的要求,但是仔细分析后就会发现,这并不是一种有效的实现方式。第一,假设你希望获取的是一个客户购

2、货清单,在使用 Join 语句后会发现返回的记录中包含了大量重复的客户名记录,在网络环境下,这些重复记录会增加大量的网络流量;第二,当你获得这些记录集后,还需要构造合理的算法呈现记录,如果算法不佳再加上显示的记录数量大,在客户端会造成一定的延时。因此我们需要对上述实现方式加以改进,而最佳的方法就是直接使用数据定型技术。 二、概述 数据定型(DataShape )技术是 ADO 内置的一项数据服务,其最大的特点是可以在数据检索过程中直接生成清晰的层次结构,并以关联记录集(Recordset)的形式返回检索结果。由于层次结构的构造在检索过程中完成,因此返回的记录集中只包含了唯一的有效记录(如客户名

3、称) ,加上该记录的关联信息直接以记录集的形式返回,在显示结果时只需要遍历记录集的记录即可完成结果的呈现。 三、使用数据定型技术 要在应用程序中使用数据定型(DataShape)技术,首先需要在数据连接字符串中增加一个属性。原先,我们在建立连接对象时构造的连接字符串的形式如下所示: strConn = “Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=NWIND.MDB”; 而使用数据定型(DataShape)技术的连接字符串的形式为: strConn = “Provider = MSDataShape;Data Provider=Micro

4、soft.Jet.OLEDB.4.0;Data Source=NWIND.MDB” 从上述两个连接字符串可以看到,数据定型(DataShape)技术需要使用两个提供者,一个是服务提供者“MSDataShape” ,用来执行数据定型服务;第二个是数据提供者SQLOLEDB.1;用来完成常规的数据操作。为了有效区分两类数据提供者,在调用中分别采用了“Provider ”属性和“Data Provider”属性加以区分,这也是 ADO 中建议的调用方式。 在设置了正确的数据连接字符串之后,下面就需要构造数据定型语句了。在 ADO 提供的数据定型(DataShape )技术中包含了三种不同的返回记录集

5、形式: 关系型层次记录集:这种形式返回标准的父记录集及相关的子记录集; 参数型层次记录集:这种形式和关系型层次记录集类似,也是返回标准的父记录集和相关的子记录集,只是子记录集的检索只有在明确指定父记录后才执行。 汇总型层次记录集:这种形式的记录集除了返回匹配父记录的子记录集之外,在父记录集中还可以包括由汇总函数生成的数据(如合计的销售额) 。 下面,就以关系型层次记录集为例,向大家说明如何在数据库应用程序利用数据定型(DataShape)技术实现层次记录集。 四、构建数据定型语句 要应用数据定型技术,仅仅声明连接字符串是不够的,还需要依照数据定型语法构建操作语句。 下面,我们先来看一个已经构建

6、好的关系型层次记录集的数据定型语句: “SHAPE Select CustomerID, CustomerName from Customers AS Customers APPEND (Select * from Orders AS Orders RELATE CustomerID TO CustomerID) AS Orders” 从上面的语句可以看到,数据定型语句和我们日常使用的 SQL 语法非常相似,这个示例中的数据定型语句由两部分组成,第一部分“SHAPE Select CustomerID, CustomerName from Customers AS Customers APPE

7、ND (Select * from Orders AS Orders”的大括号中分别以标准的 SQL 语句返回 Customers 表和 Orders 表的记录集,第二部分“RELATE CustomerID TO CustomerID”申明两个数据表之间的关联字段,并完成连接的建立。 这里特别需要说明几点: AS 关键字后面表示的是记录集的别名,尽管语法本身不要求必须提供别名,但是在实际使用过程中还是建议使用别名,尤其是最后一个 AS 关键字,如果需要访问子记录集,这个别名是关键的,否则必须获取系统自动生成的记录集名称,才能正确访问其中的记录。 用于建立两个数据表之间的关联字段必须同时包含在

8、之前的查询语句中,即关联字段的名称可以不同,但是该字段必须出现在之前的 SQL 语句中,否则 Shape 语句将报错。 显然,与 SQL 语句相比,数据定型语句要复杂的多,一下子很难掌握编写的技巧。不过没有关系,VB6.0 已经内置了一个很好的工具,可以帮助我们以图形化的方式轻松的创建所学数据定型语句,这就是 Data Environment。 1、添加 Data Environment 在 VB6.0 的 IDE 下,从“工程”菜单中,选择“添加 Data Environment”。如果“工程”菜单下没有出现“添加 Data Environment”菜单项,则在“ 工程”菜单中,单击“引用.

9、” ,然后从“引用.”对话框中,选择“Data Environment 1.0”,接着单击“确定” 。 2、设置 Connection 对象 在数据环境设计器窗口下用鼠标右键单击“Connection1” ,从右键快捷菜单中选择“属性” ,之后在“数据链接属性”的“提供程序”标签下选择“Microsoft Jet 4.0 OLE DB Provider”,接着切换到“连接”标签,在“选择或输入数据库名称”文本框内输入 Northwind 所在的路径“C:Program FilesMicrosoft Visual StudioVB98NWIND.MDB”,单击确定。 3、建立父命令对象 在 Da

10、ta Environment 的工具栏上单击“添加命令”按钮,然后在新建的“Command1”对象上单击右键,选择“属性” ,接着在“通用”标签下选中“SQL 语句” ,并输入“Select CustomerID, CustomerName from Customers”,单击“确定” ; 4、建立子命令对象 再次在 Data Environment 的工具栏上单击“添加命令”按钮,然后在新建的“Command2”对象上单击右键,选择 “属性” ,接着在“ 通用”标签下选中“SQL 语句” ,并输入“Select * from Orders”,然后切换到“关联”标签,选中“与父命令对象相关联”

11、 ,并在“父命令”下拉列表中选择“Command1” ,接着在“ 父字段”和“子字段/ 参数”两个下拉列表中选择“CustomerID ”,单击“添加” ,再单击“确定” 。 5、浏览数据定型语句 到上一步为止,已经成功创建了一个标准的数据定型语句,接下来在“Command1”上单击鼠标右键,然后选择“层次结构信息”即可浏览生成的 Shape 语句。 本例生成的语句如下: “SHAPE Select CustomerID, CustomerName from Customers AS Command1 APPEND (Select * from Orders AS Command2 RELAT

12、E CustomerID TO CustomerID) AS Command2” 至此,我们已经通过 Data Environment 成功创建了数据定型语句,只要将上面生成的数据定型语句复制到应用程序就可以使用了。 五、显示层次记录集 数据定型语句构建成功之后,接着就需要考虑如何呈现的问题了。通常的形式不外乎树型和表格两种,树型格式一般用来显示索引类的数据,如部门与员工信息;而表格则多用来显示明细记录,如客户及购买记录。针对这两种情形,我们可以分别使用 Treeview 和MSHFlexGrid 来实现。 (一) 、用 Treevew 显示层次记录集 首先,在 VB 下单击“工程” 、 “部

13、件” ,然后在“部件”窗口的下拉列表中选中“Microsoft Windows Common Controls 6.0”,单击“确定” 。接着将 Treeview 控件从工具箱拖到表单上,并输入以下代码: Sub datashape() Dim cnn As New ADODB.Connection Dim rsCategory As New ADODB.Recordset Dim rsProduct As New ADODB.Recordset Dim ProductNode As Node Dim CategoryNode As Node cnn.Provider = MSDataShap

14、e cnn.Open Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:Program FilesMicrosoft Visual StudioVB98NWIND.MDB TreeView1.Nodes.Add , , , 产品列表 rsCategory.StayInSync = False rsCategory.Open SHAPE SELECT CategoryID, CategoryName FROM Categories AS CmdCategory APPEND (SELECT ProductID, ProductName, Ca

15、tegoryID FROM Products AS CmdProduct RELATE CategoryID TO CategoryID) AS CmdProduct, cnn While Not rsCategory.EOF Set CategoryNode = TreeView1.Nodes.Add(1, tvwChild, C & rsCategory(CategoryID), rsCategory(CategoryName) Set rsProduct = rsCategory(CmdProduct).Value While Not rsProduct.EOF Set ProductN

16、ode = TreeView1.Nodes.Add(CategoryNode, tvwChild, P & rsProduct(ProductID), rsProduct(ProductName) rsProduct.MoveNext Wend rsCategory.MoveNext Wend rsProduct.Close Set rsProduct = Nothing rsCategory.Close Set rsCategory = Nothing cnn.Close Set cnn = Nothing End Sub (二) 、用 MSHFlexGrid 显示层次记录集 与 Treeview 相比,MSHFlexGrid 在显示层次记录集时更加的方便,由于 MSHFlexGrid 内置了显示层次记录集的功能,因此,我们只要按照之

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号