—窗口组件类的对象,由它们的拥有者负责其显示,而且它们还能触发一些和鼠标活动相关的事件。图形控件最典型的例子是Tlabel和TspeedButton。由此可以看出图形组件的功能很弱,有读者会问图形组件的用处何在呢?其实使用图形组件的最大好处在于节省资源,正是因为它们的功能较弱,所以使用的系统资源就要少。在一个应用程序中,如果能在不影响其功能的前提下合理大量地使用图形组件,将会大减少程序对系统资源的消耗。
非可视组件是与可视组件相并列的另一类组件,非可视组件在程序运行中是不可见的(除各种对话框组件之外,事实上有人认为对话框组件不能归入非可视组件,应该是另一种介于可视与非可视之间的组件)。
最后要说明一下,常说的控件实际上是一种组件。也就是说组件这个概念要大于控件,控件在内涵上包含于组件中。控件由Windows系列操作系统提出并使用,而组件是Borland和其它厂商在对Windows控件做了必要的扩展之后提出来的概念,它们是在不同时期由不同的厂商提出的概念。
§3.2 数据库组件介绍
用VB6开发数据库应用,重点是和各种数据库组件打交道,能和数据库挂钩的组件对象有5种,它们是:Session(数据库会话)、Database(数据库)、Dataset(数据集)、DataSource(数据源)、Data control(数据控制组件,也叫data-controls即数据感知组件)。其中前面4种统称为数据访问(Data SQL)组件。这些组件的相互关系如图3-2所示。对图中的各种名词说明如下:
(1) TSession
Tsession所处的类层次:
TObject→TPersistent→TComponent→TSession
TSession用于在一个应用程序里在全局上管理一组数据库连接。TSession有三个主要用法。
第一是标准用法。在实际编程的时候,VB6会自动产生一个全局可访问的TSession对象——Session。该默认的TSession对象会为数据库应用程序处理所有标准的数据库连接。在程序运行时,应用程序可以通过访问默认的TSession对象的属性、方法、事件来控制它。
第二是用在Paradox多重网络文件中。如果要编写Paradox的网络数据应用程序,那么数据库表就完全可以位于不同的网络位置上,这便是所谓的Paradox多重网络文件,此时便会产生多个向数据库表的连接(每个网络位置一个),这样就要为每一个连接建立一个Tsession对象。
第三是用在多线程数据应用程序中。最后一种情况是在多线程并发的访问一个数据库情况下,必须为每一个线程创建一个Tsession对象。如果在一个应用程序中有多个Tsession对象,我们就可以通过TsessionList对象来管理它们。同样,VB6也会为每一个数据库应用程序创建一个默认的TsessionList对象——Sessions。
(2) Tdatabase
Tdatabase所处的类层次:
TObject→TPersistent→TPomponent→TSession→TCustomConnection→TDatabase
当一个基于BDE的数据库应用程序需要一个永久数据库连接时,需要定制向一个数据库服务器的连接时,需要事务控制和特殊的数据库别名时就得用到Tdatabase对象。特别是当连接到一个远程的SQL数据库服务器时,如果要利用BDE进行数据库事务处理,那么,TDatabase对象的威力就体现出来了。在一个应用程序中为每一个数据库连接显示的声明Tdatabase对象要根据需要而定,不是必需的。对一个数据库连接,如果没有显示的声明并实例化TDatabase对象,系统就会产生一个带有默认属性的TDatabase对象。
这种数据就跟通过TTable部件获得的数据一样,用户可以通过数据浏览部件来编辑修改这些数据,并且当调用Post方法或当焦点离开当前的数据浏览部件时,用户对数据的修改自动地被写回到数据库中。
u 非活动的数据(只读数据)
用户通过数据浏览部件是不能修改其中的数据。在缺省情况下,通过TQuery部件获得的查询结果数据是只读数据,要想获得“活动”的数据,在应用程序中必须要设置TQuery部件的RequestLive属性值为True,然而并不是在任何情况下(通过设置RequestLive的属值True)都可以获得“活动”的数据的,要想获得“活动”的数据,除了将TQuery部件的RequestLive属性设置为True外,相应的SQL命令还要满足以下条件。
本地SQL语句查询情况下,要得到可更新的数据集,SQL语句的限制为:
n 查询只能涉及到一个单独的表
n SQL语句中不能包含ORDER BY命令
n SQL语句中不能含聚集运算符SUM或[1] [2] 下一页