ActiveX控件是什么?
发布网友
发布时间:2022-04-14 12:04
我来回答
共3个回答
懂视网
时间:2022-04-14 16:25
摘要 事务控制是数据库应用系统中的关键技术之一,本文一开始先对事务控制的概念以及微软的 ActiveX 数据对象( ADO )的事务控制做了简介,之后以一个具体的实例给出ActiveX数据对象的事务控制在VB和DELPHI中的使用方法。 关键词 ActiveX数据对象(ADO);事务
摘要 事务控制是数据库应用系统中的关键技术之一,本文一开始先对事务控制的概念以及微软的 ActiveX数据对象(ADO)的事务控制做了简介,之后以一个具体的实例给出ActiveX数据对象的事务控制在VB和DELPHI中的使用方法。
关键词 ActiveX数据对象(ADO);事务控制;VB;DELPHI
1 引言
在数据库的应用中,有时会遇到以独立单元保存或取消对源数据所做的一系列更改。例如在货币转帐时,必须从帐户中减去某个数额并将其对等数额添加到另一个帐户。无论其中的哪个更新失败,都将导致帐户收支不平衡。再如,在进行商品库存管理时,当发生购进或售出商品时,一方面要在商品的销售表中保存该商品的销售记录,另一方面,还要在商品库存中对该种商品的库存进行调整。无论其中的哪个更新失败,都将导致商品收支不平衡。在这种情况下,必须通过事务控制来保证操作的一致性。
2 ActiveX数据对象事务控制
2.1 ActiveX数据对象(ADO)简介
Microsoft ActiveX Data Objects(ADO)是Microsoft开发的数据访问对象,它可使用户通过何OLE DB Provider 访问数据库服务器中的数据。ADO趋向于提供一种稳定的接口,来使用户利用多种不同的数据源包括从非关系型数据源(包括文本文件、电子邮件等)到ODBC关系型数据库。所以它是对ODBC的扩充。
ADO的主要优点是使用简单,快速,内存消耗量低,磁盘的占有量少,在关键
情况下网络的通信量最少,前端与数据存储之间的层次最少,是一种轻便质优的接口。
2.2 ActiveX数据对象(ADO)事务控制
BeginTrans、CommitTrans和RollbackTrans是ADOConnection部件供数据库应用程序在运行时调用开始事务、控制并保存或放弃所做数据修改的方法。
l BeginTrans 开始一个事务
当开始一个事务时,后来所有读写数据库的操作都发生在这次事务的环境中,直到本次事务通过调用CommitTrans或RollbackTrans来显示的终止为止。还以商品管理为例,当购进或售出商品时,在商品数据库记录上必须发生两个修改:
A、购进或销售的记录必须记录在销售表中;
B、在商品库存中对该类商品的库存进行调整。
如果出于某种原因,其中的一个操作不能被完成,那么任何一个操作都不应该发生。因为这些操作是相关的,它们发生在同一个事务中。
l RollbackTrans 取消事务中的修改并终止当前事务
为了取消对数据库所做的修改,必须用RolllbackTrans方法返回一个事务。RollbackTrans方法取消当前事务中对数据库所做的修改并终止当前事务。
l CommitTrans 提交一个事务
为了做永久性的修改,必须CommitTrans方法提交事务,这将保存用户对数据库所做的修改并结束当前事务。
在VB 6.0中,ADO成为它与各种数据源的缺省接口,ADO数据访问方式是现在和未来VB乃至Microsoft的各种应用软件进行数据访问与应用的主流。
而在DELPHI中,基于DBE(Borland Database Engine的简称,即Borland数据库引擎)的数据库访问方式是DELPHI的标准的、传统的方式;基于ADO技术的数据库访问方式,这是DELPHI 5.0新增的功能。DELPHI 5.0 提供了一整套ADO组件,封装了ADO框架的所有功能。
下面以商品库存管理来分别阐明ADOConnection的事务控制在VB和DELPHI中的应用。
3 商品库存管理中的数据库
该数据库GoodsManagement用Microsoft的SQL Server创建,包括三个用户数据表,用户表Users、库存表Goods、进销表InOutGoods,每个数据表的表结构如下:
l 用户表Users
字段名 数据类型 长度
用户名 VARCHAR 8
用户类型 VARCHAR 10
用户口令 VARCHAR 6
主键为: 用户名
注:
用户类型有一般用户和系统管理员两种,其中一般用户只能进行销售商品,碉系统管理员还可以增加或删除用户,由于本文章只是阐述ADOConnection的事务控制,所以也就涉及到用户管理。
l 库存表Goods
字段名 数据类型 长度
商品名 VARCHAR 14
商品描述 VARCHAR 16
商品库存 SMALLINT 2
主键为:商品名
l 进销表InOutGoods
字段名 数据类型 长度
进销 VARCHAR 2
商品名称 VARCHAR 14
商品数量 SMALLINT 2
商品价格 MONEY 8
操作人员 VARCHAR 8
操作时间 DATETIME 8
主键为:(操作人员,操作时间)
外键为:操作人员,对应于Users表的用户名
4 ADO事务控制应用〈〈商品库存管理〉〉在VB中的实现
4.1 数据环境设计器
图1 数据环境设计器
数据环境设计器中主要控件的属性如下:
控件名 控件类型 重要属性设置
CN ADOConnection对象 ConnectSource如下:
Provider=SQLOLEDB.1;Password=SA;Persist Security Info=True;User ID=sa;
Initial Catalog=GoodsManagement
Goods ADOCommand对象 ConnectionName:CN
CommandText:Goods
InOutGoods ADOCommand对象 ConnectionName:CN
CommandText:Goods
StrSQL ADOCommand对象 ConnectionName:CN
CommandText:Goods
4.2 进库管理模块的代码
下面就以其中的一个程序段“进库管理”来说明ADO数据对象如何实现事务管理。
Dim intNum1, intNum2 As Integer
?
‘开始一个事务
DE.Cn.BeginTrans
With DE.rsInOutGoods
‘写入购进商品的记录
.AddNew
.Fields(0).Value = "进"
.Fields(1).Value = TxtName.Text
.Fields(2).Value = CInt(TxtNumber.Text)
.Fields(3).Value = CInt(TxtPrice.Text)
.Fields(4).Value = G_userName
.Fields(5).Value = CStr(Now)
. .Update
End With
If DE.rsStrSQL.State = adStateOpen Then
DE.rsStrSQL.Close
End If
‘求进销表中商品名为TxtNumber.Text且为进的所有记录的进货数量之和
With DE.rsStrSQL
.Open "select sum(商品数量) from InOutGoods where 进销='进'" & " and 商品名称='" & TxtName.Text & "'"
intNum1 = .Fields(0).Value
.Close
End With
‘求进销表中商品名为TxtName.Text且为销的所有记录的进货数量之和
With DE.rsStrSQL
.Open "select sum(商品数量) from InOutGoods where 进销='销'" & " and
商品名称='" & TxtName.Text & "'"
If .RecordCount = 1 And IsNull(.Fields(0).Value) Then
intNum2 = 0
Else
intNum2 = .Fields(0)
End If
.Close
End With
‘调整商品库存中该商品的库存量
DE.Cn.Execute "update Goods set 商品库存=" & (intNum1 - intNum2) & " where 商品名='" & TxtName.Text & "'"
‘向数据库提交事务
D【本文来自鸿网互联 (http://www.68idc.cn)】E.Cn.CommitTrans
?
5 ADO事务控制应用〈〈商品库存管理〉〉在DELPHI中的实现
5.1 系统中的数据模块
数据模块窗体主要控件的属性如下:
控件名 控件类型 重要属性设置
ADOCn ADOConnection对象 ConnectSource :(同前)
ADODatasetGoods 数据集部件ADODataset ConnectionName:ADOCN
CommandText:Goods
ADODatasetInOutGoods 数据集部件ADODataset ConnectionName:ADOCN
CommandText:Goods
ADODataset1 数据集部件ADODataset ConnectionName:ADOCN
CommandText:Goods
DataSourceGoods DataSource控件 Dataset:ADODatasetGoods
DataSourceInOutGoods DataSource控件 Dataset:ADODatasetInOutGoods
5.2 进库管理模块的代码
下面就以其中的一个程序段“进库管理”来说明ADO数据对象如何实现事务管理。
var
strSQL:string;
intNum1,intNum2,intRecordsAffected:integer;
begin
?
//启动事务控制
DM.ADOCn.BeginTrans;
//向进销表插入一条记录
with DM.ADODataSetInOutGoods do begin
insert;
fields[0].Value:='进';
fields[1].Value:= editName.text;
fields[2].AsString:=editNumber.text;
fields[3].AsString:=editPrice.text;
fields[4].Value:=G_UserName;
fields[5].AsString :=DateTimeToStr(now);
Post;
end;
//求进销表中商品名为editName.text且为进的所有记录的进货数量之和
strSQL:='select sum(商品数量) from InOutGoods where 进销=''进''
and 商品名称='''+editName.text+'''';
with DM.ADODataSet1 do begin
Close;
CommandText:=strSQL;
Open;
end;
intNum1:=DM.ADODataSet1.Fields[0].Value ;
//求进销表中商品名为editName.text且为销的所有记录的进货数量之和
strSQL:='select sum(商品数量) from InOutGoods where 进销=''销''
and 商品名称='''+editName.text+'''';
with DM.ADODataSet1 do begin
Close;
CommandText:=strSQL;
Open;
end;
if (DM.ADODataSet1.RecordCount=1) and
DM.ADODataSet1.Fields[0].Value=null) then
IntNum2:=0
else
intNum2:=DM.ADODataSet1.Fields[0].value;
strSQL:='update Goods set 商品库存='+intToStr(intNum1-intNum2)
+' where 商品名='''+editName.Text+'''';
DM.ADOCn.Execute (strSQL,intRecordsAffected,[eoExecuteNoRecords]) ;
DM.ADOCn.Execute(strSQL,intRecordsAffected,[eoExecuteNoRecords]) ;
DM.ADOCn.CommitTrans ;
?
热心网友
时间:2022-04-14 13:33
一、ActiveX的由来
ActiveX最初只不过是一个商标名称而已,它所涵盖的技术并不是各自孤立的,其中多数都与Internet和Web有一定的关联。更重要的是,ActiveX的整体技术是由Microsoft的COM(Component Object Model,组件对象模型)构筑的。但不要误认为ActiveX是定义了所有包含基于COM的技术。COM与Microsoft Office和Windows以及Microsoft现在所做的一切都有关联,但显然这些产品并不是ActiveX家族中的成员。
ActiveX是从Microsoft的复合文档技术——OLE成长起来的。OLE最初发布的版本,只是瞄准复合文档,但在后续版本OLE2中,导入了 COM。COM是应OLE设计者的需求而诞生的。其基本的出发点是想让某个软件通过一个通用的机构为另一个软件提供服务。因而,COM的第一个使用者是 OLE2。实际上,COM与复合文档间,没有多大关系。后来,COM就作为与复合文档完全无关的技术,开始被广泛使用。这样一来,Microsoft就开始"染指"通用平台技术。但COM不是产品,它需要一个商标名称。不巧,市场专家们选用了"OLE"作为商标名称。于是,使用COM的技术都开始贴上了 OLE的标签。当然,这些技术中的绝大部分与复合文档没有关系。Microsoft要想向人们解释:"OLE不单单是指复合文档!",这要花费相当的精力和时间。
于是,在1996年春,Microsoft改变了主意,选择了ActiveX作为新商标名。ActiveX是指宽松定义的、基于COM的技术集合,而OLE仍然仅指复合文档。当然,最重要的核心还是COM。
让对象模型完全独立于编程语言,这是一个非常新奇的思想。从C++和Java的对象上,我们就能有所了解。但所谓COM对象究竟是什么?为了便于理解,可以把COM看作是某种(软件)打包技术,即把它看作是使软件的不同部分,按照一定的面向对象的形式,组合成可以交互的过程和一组支持库。COM对象可以用 C++、Java和VB等任意一种语言编写,并可以DLL或作为不同过程工作的执行文件的形式来实现。使用COM对象的客户端,无需关心对象是用什么语言写的,也无需关心它是以DLL、还是以另外的过程来执行的。从客户端来看,无任何区别。
这样一个通用的处理技巧非常有用。例如,由用户协调运行的两个应用,可以将它们的共同作业部分,作为COM对象间的交互来实现(当然,现在的OLE复合文档也能做到)。为在浏览器中执行而从Web服务器下载的代码,浏览器可把它看作是COM对象。即是说,COM技术也是一种打包可下载代码的标准方法 (ActiveX控件执行这种功能)。
甚至连应用与本机OS进行交互的方法,也可以用COM来指定(Windows和Windows NT用的新API,多数是作为COM对象来定义的)。COM虽然起源于复合文档,但却可有效地适用于许多软件问题。
二、ActiveX王国
Active平台是Microsoft的世界观。其基本思想是:使用ActiveX控件,来构筑包括从与用户交互和适应COM的事务处理监视器到Web服务器、全部实现自动化的机构。Active平台包括两大部分:Active Server和Active Client。
Active Server实际上是中间层。使用组件或Active服务器页面,来提供用于业务逻辑和主要应用处理的场所。ActiveServer的技术,其核心是NT Server、Microsoft事务处理服务器、数据管理服务、目录服务、Web服务以及网络服务。
事务处理服务器是把线程产生和数据库多重化等传统的TP监控功能与Microsoft的基于组件的编程模型结合起来。数据管理服务等Active平台的其他组件是用OLE DB和ODBC,访问DB2、Oracle、SQL Server等的数据源。目录服务是在DCOM(Distributed COM,分布式COM)的周围,提供目录服务层,这样使远程对象在网络上能相互搜索。Web服务以Internet信息服务器为中心进行构筑,它为服务器上的Web应用开发,提供脚本生成(Scripting)机构。网络服务以DCOM为中心进行构筑,通过以同步MS-RPC为中介的网络,使之能够连接控件。
Active Client是一种交叉平台。Microsoft的技术纵然是独家所有,但也希望将这种技术向多个OS开放。具体实施计划是使用脚本引擎(Scripting Engine)。这种脚本引擎是由标准的HTML和带有Microsoft特色的Java虚拟机(JVM)、Microsoft的VBScript与JScript所构成的。Active Client组装进了Microsoft的IE 3.0和4.0,通过ActiveX,可以变成用户的C/S应用的一部分。
从清一色采用Windows的企业用户来看,Active平台可以提供坚固的、具有可缩放性的服务器应用开发平台。ActiveServer在TP监视器这类高端产品的场合,也利用常见的一些工具和技术。因此,小型工作组和Intranet应用不会超越Active Server的能力。Active平台的目标机虽是异种机环境,但由于过分依赖IE,所以不能驱动客户端。尽管在一些非Windows平台上也推出了Explorer,但最好的支持、最新版本的Explorer还是在Windows上。
三、ActiveX的进展
1.向分布计算扩充
COM的最初版本假定COM对象及其客户端是在同一个机器上运行(可以在同一个进程内,也可以在不同的进程内),DCOM是ActiveX家族中的重要成员。后来,它在Windows 95中也能使用。DCOM对于客户端制作COM对象、进行交互的方法没有做任何改变。
客户端使用完全相同的代码,可以访问本地以及远程对象。但许多场合下,客户想使用少数的DCOM附件。DCOM备有分布式安全保密机制,提供认证和数据加密。在1998年要发布的Windows NT 5.0中,要将Kerberos等安全保密协议,追加到DCOM中。DCOM已能够利用域名服务等简洁的目录服务,以用于搜寻在其他机器上的COM对象。NT 5.0要追加对Active Directory的支持。Active Directory是基于域名服务和轻型目录访问协议的。
DCOM的劲敌,此前一直是OMG(Object Management Group)的CORBA(Common Object Request Broker Architecture)。它被组装进了Iona的Orbix和Visigenic的VisiBroker等产品中。不久前,另一种支持分散对象的技术 ——Java的远程方法调用出台了。无论是CORBA,还是DCOM,都能在多种语言写的对象间进行通信。而RMI却不同,它只限于在由Java实现的对象间进行通信。显然,这是个制约。但RMI使用起来非常简单。另外,RMI的开发者可以用Java来设计协议规范。因此,在语言的功能上,可以做得浑然一体。若写一个只处理两三个客户端的DCOM服务器,还是比较简单的。但是,要构筑一个高效处理几百、几千个客户端的DCOM服务器,则相当之难。
为了便于编写可缩放的DCOM服务器,Microsoft发布了事务处理服务器(MTS)。MTS在支持事务处理的同时,也提供自动生成线索和智能对象的重复使用等服务。MTS使可缩放服务器的制作变得相当简单。即使是无需事务处理的应用,使用MTS也有好处。实际上,Microsoft鼓励人们用VB来写MTS应用。这与开发业务服务器的传统手法不同,所有的MTS应用,都是作为一个以上的COM对象来编写,且必须以DLL来实现。一般情况下,客户端看不到MTS。客户端只管一如既往地制作、使用COM对象即可。
2.组件的标准化
基于组件的应用开发,其方法和组装电子装置一样,可以用已制作好的组件部件来构筑应用。桌面用的、基于COM的组件叫做ActiveX控件。所谓ActiveX控件不过是遵从一定的标准、与客户端交互的COM对象而已。
例如,ActiveX控件必须通过Automation (即使用dispinterfaces)来公开方法。用这个被标准化的交互功能,可以在多个不同的上下文中,使用同一个控件。在这个标准接口的"幕后", ActiveX控件几乎是什么都能执行。现在,许多软件公司都能提供实现各种功能的控件。
ActiveX控件是作为DDL编写的,为此,必须装载到某个容器中。ActiveX控件的原型容器是VB,除此之外,还有多种容器可供选择。目前,一个非常重要的控件容器是Microsoft的Web浏览器Internet Explorer。
现在所谓ActiveX控件的那些内容,是实现许多方法所必须的。已经把它们从机器的本地硬盘移到了VB等容器中。几百KB和几MB的控件,似乎没有什么大区别。但要将控件装载到Web浏览器时,很可能要通过速度很慢的电话线。现在,控件的大小已经是非常关键的问题。一旦要执行超过了某个限度以上的控件,就会延长下载时间。因此,Microsoft规定:在ActiveX控件中,只能执行绝对必要的功能。
Apple和IBM推行的OpenDoc,曾是ActiveX控件的主要竞争对手。现在OpenDoc的赞助企业,已正式宣告中止资助。大部分与 Microsoft对抗的企业,转而支持JavaBeans(基于Java的组件结构)。ActiveX控件,基本上都是和Windows*在一起、以二进制机器代码发放的,而JavaBeans却不同,它在哪儿都能执行。这当然是有代价的。显而易见,只要不牺牲可移植性,就不可能完全、彻底地利用本地环境。要编写从公共Internet上能下载的组件时,应优先选择JavaBeans。
桌面组件市场在持续、急速增长。其中绝大部分是以ActiveX控件构筑的(目前JavaBeans仍然是少数)。但服务器组件的标准化要落后一些。在桌面上,Web浏览器、VB以及PowerBuilder这些编程环境,作为容器是强有力的。但服务器容器又该当如何呢?作为服务器上的组件容器, 事务处理服务器是一个较好的选择。
Microsoft的竞争对手,千方百计要阻止MTS和NT称霸市场。他们正在快马加鞭地制订服务器上的组件标准,其中最有前途的是Enterprise JavaBeans。它是JavaBeans的扩充,并定义了事务处理服务器接口。Enterprise JavaBeans的支持者们,希望独立软件厂商不是将服务器组件作为COM组件来编写,而是要作为Beans来编写。
四、ActiveX的构筑工具
随着ActiveX控件的推广,ActiveX控件的开发工具逐日增加。由于ActiveX不依赖于语言,所以传统的开发工具基本上都能构筑、配备ActiveX控件。最常用的有Delphi、PowerBuilder以及Visual Basic、Visual C++、Visual J++等。
1. 基本概况
用3GL开发ActiveX控件的方法有:①MFC (Microsoft Foundation Class,Microsoft基础类),②ATL(ActiveX Template Library,ActiveX模板库),③BaseCtrl Framework等。MFC最经典,采用MFC,可以使开发者不去关心接口,而是集中精力关注对象的动作。缺点是控件的规模较大且执行时DLL必须与容器同时存在。ATL可利用模板生成代码。就是说,库和DLL无需与控件一起推出。在ATL中,需要从作为模板存在的几个基本类派生类。ATL也有缺点,即接口的处理较难,应用中必要的接口,必须分别制作。另外,ATL不支持类向导(Class Wizard)。遗憾的是,没有使对象描述语言(Object Description Language)和接口定义语言文件、与用户代码自动同步的向导。BaseCtrl是个简便型库。与ATL非常相似,但无模板。实际上,由于 BaseCtrl过于简便,Microsoft并不支持它。在BaseCtrl中,带有几个万能控件(Skeleton Control)。BaseCtrl提供容易理解的ActiveX开发模型,但与ATL相比并不简单,且灵活性也不及ATL。目前看来,对于 ActiveX控件开发者来说,BaseCtrl是个"苦涩"的选择。
2. 开发工具
可制作ActiveX控件的、最初的工具是Microsoft的Visual C++。它可为ActiveX开发者提供最多的控件。Visual J++也可以制作ActiveX控件。
Borland推出的两个工具(JBuilder和IntraBuilder)也非常令人瞩目。但是,用Borland的工具能制作ActiveX组件的, 只有Delphi 3.0和C++ Builder。Borland把Delphi的ActiveX开发功能,叫作Active Inside。它是将任意的Delphi Window做成ActiveX的形式。Active Inside备有配备在Web上的新控件。Delphi可以将控件链接到COM和DCOM。
PowerBuilder 5.0是改造成能用于ActiveX开发的、客户机/服务器开发工具。 PowerBuilder可以将Data Window(PowerBuilder应用开发的核心部分)作为ActiveX控件来配备。以使现在的PowerBuilder开发者,能使用 PowerScript编程语言等某些熟悉的功能。具有制作ActivX控件最好工具的,当属Microsoft。例如,若用Visual Basic 5.0,开发者就可使用可视化编程环境和本机的Visual Basic for Application语言,来开发控件。
五、ActiveX
的未来的确,Windows和Windows NT的世界,是ActiveX技术的最佳环境。但无论Microsoft如何卖力推进它的OS,也不能使所有的企业都变成清一色的Windows。因此, Microsoft要设法使COM、DCOM以及ActiveX家族的一部分,也能在其他OS上使用。现在,在Macintosh中,已经支持 ActiveX,其中也包含对ActiveX控件的支持。Software AG正在把这些技术移植到多个Unix和IBM的OS/390上。DEC和HP也打算将这些技术在自己的系统上使用,他们也是用移植Microsoft代码的办法来实现的。
COM已成为Windows 95和Windows NT环境下基础软件的重要部分,但它的未来还有许多不确定的因素。例如,Microsoft是否能将COM作为多平台技术,让其继续存在发展下去?为了使 NT服务器能适合已有的企业,就必须要使DCOM等分布式服务也能在非Microsoft平台上应用。要解决这些问题, 需花费相当长的一段时间。另外, 基于CORBA的产品和Java的RMI,已成功地运行在多OS环境下。多平台DCOM出台得越晚,CORBA和RMI就领先越多。ActiveX控件和 JavaBeans的竞争前景如何?无论使软件运行在Web浏览器上也好,还是在另外的地方运行也好,总之,组件式软件(ComponentWare)将是下一个软件开发的热点。
参考资料:http://publish.it168.com/2006/0322/20060322009501.shtml?positioncode=1720
热心网友
时间:2022-04-14 14:51
ActiveX控件以前称为 OLE 控件或 OCX 控件是组件 (或对象) 打包别人编程功能.以便您可以重用 Web页或在其他程序中插入。 例如, 随 InternetExplorer 一起提供 ActiveX 控件可用于增强 Web页具有复杂格式功能和动画。
ActiveX 控件结合了Java 程序和 Netscape 插件优点,还可以用许多编程语言, 包括所有Microsoft编程和在数据库语言编写程序中使用ActiveX控件。
使用ActiveX控件可快速实现小型的组件重用、代码共享。
除此之外,为了满足更多地需求,也出现集成于各种开发环境的ActiveX控件,由第三方提供,如ComponentOne Studiofor ActiveX、ActiveReportsCOM、TX Text Control ActiveX等。这些ActiveX控件有助于开发出商业级的Windows应用程序。应该根据实际情况,合理使用。