ActiveX数据对象之事务控制在VB和DELPHI中的应用

 

 

    摘要      事务控制是数据库应用系统中的关键技术之一,本文一开始先对事务控制的概念以及微软的 ActiveX数据对象(ADO)的事务控制做了简介,之后以一个具体的实例给出ActiveX数据对象的事务控制在VBDELPHI中的使用方法。

    关键词    ActiveX数据对象(ADO);事务控制;VBDELPHI

 

 

1     引言 

在数据库的应用中,有时会遇到以独立单元保存或取消对源数据所做的一系列更改。例如在货币转帐时,必须从帐户中减去某个数额并将其对等数额添加到另一个帐户。无论其中的哪个更新失败,都将导致帐户收支不平衡。再如,在进行商品库存管理时,当发生购进或售出商品时,一方面要在商品的销售表中保存该商品的销售记录,另一方面,还要在商品库存中对该种商品的库存进行调整。无论其中的哪个更新失败,都将导致商品收支不平衡。在这种情况下,必须通过事务控制来保证操作的一致性。

 

 

2     ActiveX数据对象事务控制 

2.1  ActiveX数据对象(ADO)简介

       Microsoft ActiveX Data Objects(ADO)Microsoft开发的数据访问对象,它可使用户通过何OLE DB Provider 访问数据库服务器中的数据。ADO趋向于提供一种稳定的接口,来使用户利用多种不同的数据源包括从非关系型数据源(包括文本文件、电子邮件等)到ODBC关系型数据库。所以它是对ODBC的扩充。

ADO的主要优点是使用简单,快速,内存消耗量低,磁盘的占有量少,在关键

情况下网络的通信量最少,前端与数据存储之间的层次最少,是一种轻便质优的接口。
 

      2.2   ActiveX数据对象(ADO)事务控制

       BeginTransCommitTransRollbackTransADOConnection部件供数据库应用程序在运行时调用开始事务、控制并保存或放弃所做数据修改的方法。

l  BeginTrans 开始一个事务

当开始一个事务时,后来所有读写数据库的操作都发生在这次事务的环境中,直到本次事务通过调用CommitTransRollbackTrans来显示的终止为止。还以商品管理为例,当购进或售出商品时,在商品数据库记录上必须发生两个修改:

      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的事务控制在VBDELPHI中的应用。

 

 

3     商品库存管理中的数据库

该数据库GoodsManagementMicrosoftSQL 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数据环境设计器

    ActiveX数据对象之事务控制在VB和DELPHI中的应用

                  1 数据环境设计器

数据环境设计器中主要控件的属性如下:

控件名 控件类型 重要属性设置

CN                   ADOConnection对象  ConnectSource如下:

Provider=SQLOLEDB.1;Password=SA;Persist Security Info=True;User ID=sa;

Initial Catalog=GoodsManagement

    Goods                 ADOCommand对象 ConnectionNameCN

                                                                                CommandTextGoods          

       InOutGoods            ADOCommand对象      ConnectionNameCN

                                                                                CommandTextGoods          

      StrSQL                ADOCommand对象      ConnectionNameCN

                                                                                CommandTextGoods          

 

   4进库管理模块的代码

下面就以其中的一个程序段“进库管理”来说明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 & “‘”

‘向数据库提交事务

    DE.Cn.CommitTrans

                   ¼

 

5     ADO事务控制应用〈〈商品库存管理〉〉在DELPHI中的实现

51 系统中的数据模块 

ActiveX数据对象之事务控制在VB和DELPHI中的应用
                           
2 数据模块窗体

数据模块窗体主要控件的属性如下:

控件名 控件类型 重要属性设置

ADOCn ADOConnection对象 ConnectSource (同前)

        ADODatasetGoods     数据集部件ADODataset ConnectionNameADOCN

                                                                                          CommandTextGoods            

           ADODatasetInOutGoods  数据集部件ADODataset   ConnectionNameADOCN

                                                                                          CommandTextGoods            

             ADODataset1          数据集部件ADODataset    ConnectionNameADOCN

                                                                                          CommandTextGoods            

DataSourceGoods      DataSource控件      DatasetADODatasetGoods

DataSourceInOutGoods DataSource控件        DatasetADODatasetInOutGoods

 

5进库管理模块的代码

          下面就以其中的一个程序段“进库管理”来说明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 ;

                                   ¼

 

 

参考文献:

  [1](美) Jeffrey P. McManus · Database Access With Visual Basic 6 · 北京

机械工业出版社,1999.10

[2] (美) Steven Holzner · Visual Basic 6 Black Book · 北京 :机械工业出版社,1999.4

  [3]  莫卫东,白鹏,张晓,张福萍 · Visual Basic 6.0 高级编程技巧—-ADO数据访问篇·

西安:西安交通大学出版社,2000.1

  [4]  肖永顺,刘韬,李生海,黄军万,黄亮 · DELPHI 程序设计· 北京:人民邮电出版社2000.5

  [5]  房增华,徐远超 · Delphi 5 数据库编程实战与精通 · 北京:清华大学出版社2000.7

 

 

The  Application of the ActiveX Data Objects transaction control in Visual Basic & DELPHI

MA Gen-feng   SUN Yan  SONG Wei

           

  Abstract     Transaction control is one of the key technology in the database application system. Firstly, the thesis give  a  brief introduction to the  conception of the transaction control and the ADO transaction control of Microsoft, then it shows how to use the transaction control in VB & DELPHI by a illustration

    Key words   ActiveX数据对象(ADO)Transaction controlVBDELPHI

 

 

 

 

 

原文链接:https://www.cnblogs.com/wuyida/p/6300708.html

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/33103

(0)
上一篇 20小时前
下一篇 17小时前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml