VB 版 (精华区)

发信人: zxfsnow (希望的春天), 信区: VB
标  题: 深入ADO7
发信站: 哈工大紫丁香 (2000年06月05日12:36:58 星期一), 转信

发信人: ming (drwxr-x---), 信区: VB
标  题: 深入ADO(7)
发信站: 虎踞龙盘东南站 (Tue Nov  2 10:37:41 1999), 转信

分层目录结构指针和数据成形
  如果你处理数据,那么很可能你需要将它从多个表中提取出来。在大多数情况下,你

使用JOIN命令合并相关表中的数据,特别是在你访问关系型数据库的情况下。任何由J

ION命令形成的记录集总是包含了多余的信息。例如,如果你对一个作者的所有书籍感

兴趣的话,你可以合并Authors和Title Author表(我在这里指的是Biblio和PUBS数据

库)。在返回的记录集中,关于作者的信息在每一行中无效地重复。
  你合并的嵌套次数越多或越复杂,消除多余信息对于你来说就越重要,分层目录结构

指针允许你以基于树形的逻辑来组织你的记录集。该过程也叫做数据成形,并且它可以

以两种方式来实现。你可以用类似于SQL的成形语言,或者你可以通过使用Visual Stu

dio 6.0的相应的高级工具。我将在后面提供一个例子。现在我们来看看成形语言。
  就某方面来说,成形语言显得跟SQL语言类似。
  SHAPE {select au_ID, Author from authors}
  APPEND ( {select ISBN from [title author]} AS chapter RELATE au_id TO au

_id)
  一般说来,SHAPE命令定义记录集,APPEND子句添加一个子记录集到它当中去。换而

言之,记录集可以作为一个域的其他任何数据类型使用。(见图6)。父记录集和子记

录集是通过域与域间的关系实现连接,该关系同样需要一个名称。
                     Parent Recordset
              Au_ID      Author      Chapter
                                         |
                      Child Recordset    |
                                         |
                                       ISBN
                图6: APPEND 记录集
  作为数据成形的结果,父记录集附加了新的一列。每行中的新的域都是指向定义在A

PPEND从句中所定义的记录集。子记录集只列举那些au_id值跟父记录集中相同的域的是

匹配的记录。在前面的代码中,如果给出一个作者的ID,那么存在一个记录集,在它当

中有一个叫Chapter的附加的域,它的Value属性是指向一个子记录集,该子记录集中有

来自于Title Autor表的所有所请求的域,在本例中,是ISBN。图7举例说明了一些用于

分层目录结构记录的定位的Visual Basic源代码。注意我是怎样通过名称来访问Chapt

er域。为了得到实际的子记录集,还需要另外一个步骤:调用Value属性。
  SHAPE命令也可以嵌套。这意味着你能用其他的SHAPE命令作为APPEND的内部命令。跟

SHAPE语法打交道如同手工书写SQL查询一样也是件烦人的事情。幸运的是,Visual St

udio 6。0给你提供了高级的工具它可以显著地简化SHAPE查询地定义。我将简要地说明

这一点。
  APPEND不是唯一一个你可以附在SHAPE命令上的从句。 你还可以改用一个COMPUTE从

句来代替。COMPUTE能让你对已有的行执行统计功能,或按一个或更多的域进行分组。

其预定义的函数有SUM, AVG, MAX和MIN。在最后的记录集里就给出了父行的这些操作

的结果。而且,该记录集也包含了一个引用域,它指向由COMPUTE处理的原始行所在实

际表。是不是觉得不太明白?让我们来看看一个例子。
  假设你有个客户定单表。一天,你想知道每个姓是以A开头的客户的定单的总数。
  SHAPE {select custID, last name
   from orders
   where last name like 'A%''}
   COMPUTE (SUM(amount)) AS chapter
   BY custID
  图8说明了结果记录集。你有用户的ID,姓,和订单的总数,除了客户定单的列表引

用外,其它的都是形式非常简单的。
                   Parent Recordset
         CustID    LastName   SUM  Chapter
                                      |
                    Child  Recordset  |
                                   Order #1
                                   Order #2
                                   Order #3
                                   Order #4
                                      .
                                      .
                                      .
                                      .
                                   Order #n
  图8:COMPUTE 记录集
  为在较底的层次上(也就是说,没有用专用工具的情况下)实现数据成形功能,你得

指定你的提供者为MSDataShape。
  Dim cnn As New ADODB.Connection
   cnn.Provider = “MSDataShape”
   cnn.Open “Biblio”

--

  每一刻都存在,不一样的精彩


--

 以科计为本,以产业报国!
  超越自我,飞跃无限!
  

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.235.249]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.531毫秒