




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在VB中利用DataShape技术构建层次记录集一、引言 在开发数据库应用程序的过程中,经常会遇到以层次结构显示相关记录的情况。如显示公司组织结构中各个部门员工的分布,又比如显示所有客户在一段时期内的详细购货记录条目。一般,这些数据在数据库中都是以两张单独的数据表存在的,因此在把实际数据按要求呈现给用户前,首先需要建立这两张数据表之间的连接,而常规的方法都是使用SQL语句中的Join语法实现。在建立连接之后,再通过循环、递归等算法完成界面呈现。 表面上看,这样的实现方式确实满足了功能的要求,但是仔细分析后就会发现,这并不是一种有效的实现方式。第一,假设你希望获取的是一个客户购货清单,在使用Join语句后会发现返回的记录中包含了大量重复的客户名记录,在网络环境下,这些重复记录会增加大量的网络流量;第二,当你获得这些记录集后,还需要构造合理的算法呈现记录,如果算法不佳再加上显示的记录数量大,在客户端会造成一定的延时。因此我们需要对上述实现方式加以改进,而最佳的方法就是直接使用数据定型技术。 二、概述 数据定型(DataShape)技术是ADO内置的一项数据服务,其最大的特点是可以在数据检索过程中直接生成清晰的层次结构,并以关联记录集(Recordset)的形式返回检索结果。由于层次结构的构造在检索过程中完成,因此返回的记录集中只包含了唯一的有效记录(如客户名称),加上该记录的关联信息直接以记录集的形式返回,在显示结果时只需要遍历记录集的记录即可完成结果的呈现。 三、使用数据定型技术 要在应用程序中使用数据定型(DataShape)技术,首先需要在数据连接字符串中增加一个属性。原先,我们在建立连接对象时构造的连接字符串的形式如下所示: strConn = “Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=NWIND.MDB”; 而使用数据定型(DataShape)技术的连接字符串的形式为: strConn = “Provider = MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=NWIND.MDB” 从上述两个连接字符串可以看到,数据定型(DataShape)技术需要使用两个提供者,一个是服务提供者“MSDataShape”,用来执行数据定型服务;第二个是数据提供者SQLOLEDB.1;用来完成常规的数据操作。为了有效区分两类数据提供者,在调用中分别采用了“Provider”属性和“Data Provider”属性加以区分,这也是ADO中建议的调用方式。 在设置了正确的数据连接字符串之后,下面就需要构造数据定型语句了。在ADO提供的数据定型(DataShape)技术中包含了三种不同的返回记录集形式: 关系型层次记录集:这种形式返回标准的父记录集及相关的子记录集; 参数型层次记录集:这种形式和关系型层次记录集类似,也是返回标准的父记录集和相关的子记录集,只是子记录集的检索只有在明确指定父记录后才执行。 汇总型层次记录集:这种形式的记录集除了返回匹配父记录的子记录集之外,在父记录集中还可以包括由汇总函数生成的数据(如合计的销售额)。 下面,就以关系型层次记录集为例,向大家说明如何在数据库应用程序利用数据定型(DataShape)技术实现层次记录集。 四、构建数据定型语句 要应用数据定型技术,仅仅声明连接字符串是不够的,还需要依照数据定型语法构建操作语句。 下面,我们先来看一个已经构建好的关系型层次记录集的数据定型语句: “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 APPEND (Select * from Orders AS Orders”的大括号中分别以标准的SQL语句返回Customers表和Orders表的记录集,第二部分“RELATE CustomerID TO CustomerID”申明两个数据表之间的关联字段,并完成连接的建立。 这里特别需要说明几点: AS关键字后面表示的是记录集的别名,尽管语法本身不要求必须提供别名,但是在实际使用过程中还是建议使用别名,尤其是最后一个AS关键字,如果需要访问子记录集,这个别名是关键的,否则必须获取系统自动生成的记录集名称,才能正确访问其中的记录。 用于建立两个数据表之间的关联字段必须同时包含在之前的查询语句中,即关联字段的名称可以不同,但是该字段必须出现在之前的SQL语句中,否则Shape语句将报错。 显然,与SQL语句相比,数据定型语句要复杂的多,一下子很难掌握编写的技巧。不过没有关系,VB6.0已经内置了一个很好的工具,可以帮助我们以图形化的方式轻松的创建所学数据定型语句,这就是Data Environment。 1、添加Data Environment 在VB6.0的IDE下,从“工程”菜单中,选择“添加 Data Environment”。如果“工程”菜单下没有出现“添加 Data Environment”菜单项,则在“工程”菜单中,单击“引用.”,然后从“引用.”对话框中,选择“Data Environment 1.0”,接着单击“确定”。 2、设置Connection对象 在数据环境设计器窗口下用鼠标右键单击“Connection1”,从右键快捷菜单中选择“属性”,之后在“数据链接属性”的“提供程序”标签下选择“Microsoft Jet 4.0 OLE DB Provider”,接着切换到“连接”标签,在“选择或输入数据库名称”文本框内输入Northwind所在的路径“C:Program FilesMicrosoft Visual StudioVB98NWIND.MDB”,单击确定。 3、建立父命令对象 在Data Environment的工具栏上单击“添加命令”按钮,然后在新建的“Command1”对象上单击右键,选择“属性”,接着在“通用”标签下选中“SQL 语句”,并输入“Select CustomerID, CustomerName from Customers”,单击“确定”; 4、建立子命令对象 再次在Data Environment的工具栏上单击“添加命令”按钮,然后在新建的“Command2”对象上单击右键,选择“属性”,接着在“通用”标签下选中“SQL 语句”,并输入“Select * from Orders”,然后切换到“关联”标签,选中“与父命令对象相关联”,并在“父命令”下拉列表中选择“Command1”,接着在“父字段”和“子字段/参数”两个下拉列表中选择“CustomerID”,单击“添加”,再单击“确定”。 5、浏览数据定型语句 到上一步为止,已经成功创建了一个标准的数据定型语句,接下来在“Command1”上单击鼠标右键,然后选择“层次结构信息”即可浏览生成的Shape语句。 本例生成的语句如下: “SHAPE Select CustomerID, CustomerName from Customers AS Command1 APPEND (Select * from Orders AS Command2 RELATE CustomerID TO CustomerID) AS Command2” 至此,我们已经通过Data Environment成功创建了数据定型语句,只要将上面生成的数据定型语句复制到应用程序就可以使用了。 五、显示层次记录集 数据定型语句构建成功之后,接着就需要考虑如何呈现的问题了。通常的形式不外乎树型和表格两种,树型格式一般用来显示索引类的数据,如部门与员工信息;而表格则多用来显示明细记录,如客户及购买记录。针对这两种情形,我们可以分别使用Treeview和MSHFlexGrid来实现。 (一)、用Treevew显示层次记录集 首先,在VB下单击“工程”、“部件”,然后在“部件”窗口的下拉列表中选中“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 = MSDataShape 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, CategoryID 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 ProductNode = 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内置了显示层次记录集的功能,因此,我们只要按照之前介绍的在VB下建立一个Data Enviorment,然后将MSHFlexGrid的Datasource设置为该Data Enviorment就可以了。当然,我们也可以通过将ADO Data控件的RecordSource设置为Data Shape语句,然后将MSHFlexGrid的Data source设置为ADO Data控件,同样可以显示层次记录集。下面,就给出一段用ADO Data控件配合MSHFlexGrid显示层次记录集的示例: 首先,在VB下单击“工程”、“部件”,然后在“部件”窗口的下拉列表中选中“Microsoft Hierarchical FlexGrid Control 6.0”,单击“确定”。接着将MSHFlexGrid控件从工具箱拖到表单上,并输入以下代码: Private Sub Form_Load() With Adodc1 .ConnectionString = Provider=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:Program FilesMicrosoft Visual StudioVB98NWIND.MDB .RecordSource = SHAPE SELECT CustomerID, ContactName, CompanyName, Address, Phone FROM Customers AS CmdCustomers APPEND (SELECT CustomerID, OrderID, OrderDate, ShipAddress, ShipCity, ShipName, ShippedDate FROM Orders AS CmdOrders RELATE CustomerID TO CustomerID) AS CmdOrders
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中分子与细胞课件
- 高三物理最后一课课件
- 高三家长会课件
- 高一政治课件资本主义
- 知识产权保护劳动合同补充协议书变更
- 《离婚冷静期间婚姻法律咨询与代理服务合同》
- 汽车美容店租赁合同经营许可及监管协议
- 智能家居研发合伙协议退伙技术成果转化协议
- 智能制造工程合同签订关键要素及法律风险防范
- 离婚诉讼中子女抚养费及扶养费调整协议书
- 【一例重症肺炎的个案护理案例报告6000字(论文)】
- 员工培训体系优化研究
- 冯友兰-人生的境界课件
- 传热学全套PPT完整教学课件
- 部编版六年级道德与法治上册第5课《国家机构有哪些》优秀课件
- 高中心理健康教育北师大版高二全册第6课《温故知新》省级名师优质课教案比赛获奖教案示范课教案公开课教案
- 瑞美检验医生工作站操作手册
- 欧美电影文化(上海工程技术大学)【智慧树知到】网课章节答案
- 双人心肺复苏
- 全过程工程咨询服务大纲
- T-GDPA 3-2021 奥利司他胶囊质量标准
评论
0/150
提交评论