楼主: smile_lan

三层体系结构中查询处理的问题?

[复制链接]
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
31#
发表于 2001-11-9 19:35 | 只看该作者

第8个文档也是最后一个文档:Delphi5EB.r06上传了

第8个文档也是最后一个文档:Delphi5EB.r06上传了

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
32#
发表于 2001-11-9 19:43 | 只看该作者

我正在制作《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》的相关电子文档

我正在制作《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》的相关电子文档,主要是讨论ADO和CURSOR。
大概下星期一可以完成

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
33#
发表于 2001-11-10 09:38 | 只看该作者

《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》的相关电子文档完成扫描

最初由 sqlcode 发布
[B]这个文档真是很不错的,我看了前面一部分. web这一段讲的很精彩.我正在开始做基于WEB的多层应用. 真是太及时了,虽然用的不是DELPHI,但是可借鉴的东西很多. [/B]

  看到我的东东对sqlcode有帮助我真是很高兴,如果sqlcode有兴趣看看我的这部分文档,相信sqlcode会更有收获的。
《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》的相关电子文档完成扫描。
  我扫描了这本书的第四章的绝大部分内容,除了一部分讲述ADO控件的内容(大概10页左右)。原来打算ocr的,可是我的TH-OCR7.5不能调用twin32.dll,没办法和扫描仪联接,所以
目前只有每页的jpg图片,我在windows自带的Photo Editor中看100%比例的效果还不错,比较清楚,和书上的清晰度差不多。  
在这里,现贴上第四章的第一页,CH04P187.JPG

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
34#
发表于 2001-11-10 09:45 | 只看该作者

P188=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

P188=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》    我不知道你的程序设计习惯是什么?但是我的习惯是如果要使用一项新的技
术,就一定要好好地了解它,尤其是像ADO这种存取数据的技术,它将是影响一
个应用系统执行效率非常重要的因素之一。
    在上一章中说明了如何使用Delphi的ADOExpress组件来开发数据库应用系统。
你会发现使用ADOExpress组件非常容易,程序员可以很容易地使用ADOExpress开
发数据库应用系统、主从架构应用系统或分布式多层应用系统。但是有经验的程
序员会希望开发出来的应用系统能够非常有效率地执行,而不只是能够正常地执
行而已。我们要如何才能开发出有效率的ADO应用系统呢?
    本章内容的重点就是讨论ADO的深入技术以及一些重要的概念,这些技术和
概念对于程序员如何有效率地使用ADO有非常重要的影响。此外,本章的内容对
于理清许多不正确的概念也非常有帮助。例如,我在许多Internet/Intranet上的论坛
中曾看到许多人询问为什么他开发的ADO应用系统非常没有效率,随后就有人回
答并且建议如何使用ADO来增加效率。在这些回答之中,有一些是正确的,但是
大多数却不一定正确,有的甚至会让ADO应用系统执行得更没有效率。这些不尽
正确的回答有一部分是因为回答的人对于ADO也没有很深入的了解,另外一部分
原因便是当程序员在使用ADO开发单机应用系统、主从架构应用系统或多层应用
系统时需要使用的ADO技术都必须进行一些不同的设定,而不是使用相同的ADO
技术和设定来开发所有类型的应用系统。
    在程序员能够彻底掌握ADO技术并且了解如何调整ADO的执行效率之前,程
序员必须先了解ADO如何处理数据,以及如何修改数据。简单地说,就是程序员
必须熟悉ADO处理数据的流程。例如, ADO如何存取数据? ADO如何把用户修改
的数据更新回数据库中? Delphi如何封装ADO组件?在了解了这些问题之后,程
序员就能够对于ADO有一个清楚的认识,也就可以知道如何正确地使用ADO并且
调整应用系统的执行效率了。因此就让我们从ADO如何存取客户端需要的数据以
及如何管理数据开始深入讨论ADO技术。
4-1   ADO的Cursor Engine
    Cursor是一种数据结构,主要用来维护从数据源取得的结果数据集。在数据库



使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
35#
发表于 2001-11-10 09:47 | 只看该作者

P189=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

P189=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

中有许多不同的Cursor类型,而且当数据库和开发工具结合在一起时又会产生多种
不同的Cursor类型。在前面的章节中已经介绍了许多在Delphi中的各种不同的
Cursor类型,本小节的内容主要是深入讨论ADO提供的Cursor能力。
    在ADO的对象架构之中,Connectionobject主要用来连接数据源。一旦和数据
源建立了连接之后,Recordset对象便开始负责存取和维护从数据源取得的数据。
程序员可以使用Next、Prior、Locate和Lockup等方法在Recordset对象维护的数据
集中移动目前的记录,或搜寻特定的记录。因此我们说Recordset是一个提供COM
接口的Cursor对象,Recordset提供了简便的方法允许程序员存取维护在Cursor中的
数据。
    ADO提供了许多不同的Cursor。每一种Cursor都提供了接口,让程序员存取
Cursor维护的数据集,但是不同类型的Cursor提供了不同的存取数据的方法,也拥
有不同的执行行为。不同的Cursor不但影响或限制了程序员如何存取它维护的数据,
也会深深地影响应用程序存取数据的行为以及执行效率。此外,由于ADO是一个
通用的数据存取技术,能够存取各种不同的数据源,因此每一种数据源提供的
ADO驱动程序虽然可以让程序员设定希望使用的Cursor类型,但是ADO驱动程序
可能因为它提供的功能限制,而在真正的存取数据时改变程序员设定的Cursor类型。
例如,程序员可能对于一个ADO驱动程序设定使用动态Cursor,但是由于ADO驱
动程序没有提供动态Cursor的功能,因此可能会把Cursor类型改为Keyset Cursor。
    由于Cursor对于应用程序存取数据的行为和执行效率都有很大的影响,因此程
序员必须对于Cursor有基本的认识和了解,才能够在应用程序中根据用户的需求使
用适当的Cursor类型。因此,本小节的目的就在于详细讨论ADO提供的Cursor类型,
以及各种不同的Cursor执行行为。
4-1-1 Client·Side Cursor和Server-Side Cursor
    ADO的Cursor可以根据Cursor存在的地方以及Cursor的类型来加以区别。在本
小节中将以Cursor存在的地方来说明Cursor的功能和意义。
    如果以Cursor存在的地方来区分Cursor,那么ADO的Cursor可以分为:

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
36#
发表于 2001-11-10 09:48 | 只看该作者

P190=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

P190=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
37#
发表于 2001-11-10 09:50 | 只看该作者

P191=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

P191=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

    一般来说,当应用程序使用Client-Side Cursor之后,得到的Cursor类型将会是
Static Cursor。稍后会说明Static Cursor的意义和属性。当然,应用程序也可以要求
使用Forward-only Cursor。稍后也会说明Forwardonly Cursor的意义和属性。
    虽然Clientside Cursor维护的数据集和数据源中的数据已经没有实体的连接,
但是Client-Side Cursor的数据仍然可以由应用程序修改再更新回数据源中。在稍后
讨论ADO如何处理数据修改的章节中会详细说明。
      Server-Sine Cursor
    所谓Serve。Side Cursor是指Cursor维护在数据源机器的ADO缓存中或由数据源
本身自行维护。当Recordset对象使用查询语句向数据源发出存取数据的命令之后,
这些由数据源处理Recordset对象查询语句之后取得的数据便会储存在数据源的
ADO缓存中或储存在数据源本身的缓存中,只把由Recordset对象指定的Cachesize
大小的数据笔数传递回客户端。例如,如果客户端应用程序中的Recordset对象的
Cachesize为10,那么ADO引擎便会把Ic笔数据传递给客户端的ADO引擎,并且储
存在客户端的ADO缓存中让应用程序处理。如果客户端应用程序要侧览第 11笔数
据,那么由于第 11笔数据没有存在于客户端的ADO缓存中,客户端的ADO  Cursor
引擎便会再向服务器端的AD05;擎要求传递下Ic笔数据。
    能够通过ADO存取的数据源有许多种,即使数握源都是数据库,也会因为数
据库的不同而有差异。因此在ADO的Server-Side Cursor中,不同的ADO驱动程序
会使用不同的方式来实现。这些不同的实现方式除了因为数据库的属性不同之外,
对于应用程序的执行效率也有重大的影响,因此让我们进一步讨论Server.Side
Cursor的实现细节。
    Server七ide Cursor的实现主要分为两类,第一种是由服务器端的ADO驱动程序
来维护Server-Side的Cursor。例如图4-2就显币了这种实现方式的Se。er-Side Cursor。
    在这种Server-Side Cursor架构中,当数据源处理了客户端要求的SQL命令之
后,便会把符合的数据传递到服务器端的ADO缓存中。接下来就由服务器端的
ADO引擎负责所有的工作。例如把客户端Recordset对象指定的Cachesize笔数的数
据传递到客户端。而当客户端需要存取不存在的数据时,再由服务器端的ADO引
邵责传递这些数据给客户端。

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
38#
发表于 2001-11-10 09:52 | 只看该作者

P192=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

P192=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
39#
发表于 2001-11-10 09:54 | 只看该作者

P193=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

P193=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

户端的ADO缓存中。这种架构的ADO驱动程序在开发上比较简单,因为它可以依
靠数据源的Cursors!擎来处理数据的存取。
    通常,使用这种架构的数据源都属于真正的RDBMS,因为RDBMS可以提供
这些高级的功能。目前, Microsoft的SQL Server就可以提供这种架构的Server-Side
Cursor。许多使用MS SQL Server的程序员都认为由于MS SQL Server提供了这种
Server·Side Cursor,因此使用它会非常有效率。但是这却不一定是正确的,在稍后
讨论执行效率的章节中你就会知道这些详细的信息。
    在说明了以存在位置区分Cursor之后,接着继续讨论以执行行为不同来区分的
Cursor。不过要注意的是,下面讨论的各种Cursor可以是Client-Side Cursor,也可
以是Server-Side Cursor。
4- 1- 2StaticCursor
    Static Cursor的执行行为是当数据源处理了客户端的SQL命令并且回传结果数
据集之后,这些数据集的数据就由ADO的Cursor引擎来处理。其他用户对于数据
库中数据的修改将不会反映在已经处理过的Static Cursor数据集中。简单地说,
Static Cursor的数据集就像是数据库中数据的快照一样,是一组静态的数据集。一
旦传递到ADO引擎之后,就和数据库中的数据没有连接的关系了。
    Static Cursor的数据集能够让客户端应用程序在这些数据中任意地移动,例如
移动到前一笔,或是移动到最后一笔。这些工作都由ADO引擎来处理。Static
Cursor的架构图如图44所示。
        ·  StatiC Cursor

使用道具 举报

回复
论坛徽章:
52
IT宝贝
日期:2010-11-04 16:48:222013年新春福章
日期:2013-02-25 14:51:24版主4段
日期:2013-03-09 02:21:03Jeep
日期:2013-12-04 15:37:392014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
40#
发表于 2001-11-10 09:57 | 只看该作者

P194=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

P194=>第四章——深入了解ADO=>《Delphi5.x ADO/MTS/COM+ 高级程序设计篇》

    许多人认为Static Cursor数据集是只读的,因此在需要修改数据的情形下是不
适合的。这并不完全正确,因为Static Cursor数据集虽然基本上是属于只读类型的
Cursor,但是在ADO中我们仍然可以修改使用Static Cursor类型的数据集。例如,
使用ADO的BatchUpdate,或使用MIDAS的TClientDataset组件,此外ADOExpress
封装的TADODataset、 TADOQuery和TADOTable都可以在使用Static Cursor的情形
中修改数据。
    一般来说,在使用Client-Side Cursor的应用程序中,大概都是使用Static
Cursor的数据集,这当然是因为Client-Side Cursor和Static Cursor的执行什为非常
相配的关系,因为这两种数据集在数据源处理完之后都不再和数据库中的数据有
直接的连接关系。事实上,当应用程序选择使用Client七ide Cursor时再搭配Static
Cursor是非常不错的组合,因为这样不但有效率,而且也有充足的功能来满足客户
端应用程序对于处理数据的要求。如果程序员适当设定ADO的Cachesize属性值,
只把适当的数据由数据源传递到客户端的ADO缓存中,那么不管是在主从架构或
分布式多层应用系统中都会拥有良好的表现。除非应用程序只需要一个只能够向
前测览的数据集,那就是稍后要介绍的Forwardonly Cursor,否则建议各位应该
尽量使用这种组合来开发ADO应用程序。
4叫毛   Fooard-Only Cursor
    Forward-only Cursor应该算是历史最早的Cursor类型了。这种Cursor在实现上
非常简单,同时提供了最好的执行效率。 Forwardonly Cursor的执行行为是当数
据源处理了SQL命令并且产生了结果数据集之后,也会由ADO引擎负责处理。但
是在这种数据集中,应用程序只能由前往后制览或处理数据,而不能够由后面的
数据往前再存取已经存取过的数据。图45显示了Forwardonly Cursor的执行属性。
    从上图可以看到,对于客户端已经存取过的数据,这些数据对于ADO引擎来
说就已经是不存在的数据了,因此客户端应用程序如果使用ADO的MovePrevious。
MoveFirst或ADOExpress的Prior以及First等方法回到已经存取过的数据,那么ADO
引擎就会产生错误的例外。
    虽然Forward-only Cursor具有良好执行效率的属性,但是Forward only Cursor
只提供限定功能的创览数据的能力也是它较少被程序员使用的主要原因之一。不
过,如果程序员结合在服务器端使用Forwardonly Cursor,而在客户端使用轻量


使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表