成熟丰满熟妇高潮XXXXX,人妻无码AV中文系列久久兔费 ,国产精品一国产精品,国精品午夜福利视频不卡麻豆

您好,歡迎來到九壹網(wǎng)。
搜索
您的當前位置:首頁ActiveX數(shù)據(jù)對象之事務(wù)控制在VB和DELPHI中的應(yīng)用

ActiveX數(shù)據(jù)對象之事務(wù)控制在VB和DELPHI中的應(yīng)用

來源:九壹網(wǎng)

摘要 事務(wù)控制是數(shù)據(jù)庫應(yīng)用系統(tǒng)中的關(guān)鍵技術(shù)之一,本文一開始先對事務(wù)控制的概念以及微軟的 ActiveX 數(shù)據(jù)對象( ADO )的事務(wù)控制做了簡介,之后以一個具體的實例給出ActiveX數(shù)據(jù)對象的事務(wù)控制在VB和DELPHI中的使用方法。 關(guān)鍵詞 ActiveX數(shù)據(jù)對象(ADO);事務(wù)

摘要 事務(wù)控制是數(shù)據(jù)庫應(yīng)用系統(tǒng)中的關(guān)鍵技術(shù)之一,本文一開始先對事務(wù)控制的概念以及微軟的 ActiveX數(shù)據(jù)對象(ADO)的事務(wù)控制做了簡介,之后以一個具體的實例給出ActiveX數(shù)據(jù)對象的事務(wù)控制在VB和DELPHI中的使用方法。

關(guān)鍵詞 ActiveX數(shù)據(jù)對象(ADO);事務(wù)控制;VB;DELPHI

1 引言

在數(shù)據(jù)庫的應(yīng)用中,有時會遇到以單元保存或取消對源數(shù)據(jù)所做的一系列更改。例如在貨幣轉(zhuǎn)帳時,必須從帳戶中減去某個數(shù)額并將其對等數(shù)額添加到另一個帳戶。無論其中的哪個更新失敗,都將導致帳戶收支不平衡。再如,在進行商品庫存管理時,當發(fā)生購進或售出商品時,一方面要在商品的銷售表中保存該商品的銷售記錄,另一方面,還要在商品庫存中對該種商品的庫存進行調(diào)整。無論其中的哪個更新失敗,都將導致商品收支不平衡。在這種情況下,必須通過事務(wù)控制來保證操作的一致性。

2 ActiveX數(shù)據(jù)對象事務(wù)控制

2.1 ActiveX數(shù)據(jù)對象(ADO)簡介

Microsoft ActiveX Data Objects(ADO)是Microsoft開發(fā)的數(shù)據(jù)訪問對象,它可使用戶通過何OLE DB Provider 訪問數(shù)據(jù)庫服務(wù)器中的數(shù)據(jù)。ADO趨向于提供一種穩(wěn)定的接口,來使用戶利用多種不同的數(shù)據(jù)源包括從非關(guān)系型數(shù)據(jù)源(包括文本文件、電子郵件等)到ODBC關(guān)系型數(shù)據(jù)庫。所以它是對ODBC的擴充。

ADO的主要優(yōu)點是使用簡單,快速,內(nèi)存消耗量低,磁盤的占有量少,在關(guān)鍵

情況下網(wǎng)絡(luò)的通信量最少,前端與數(shù)據(jù)存儲之間的層次最少,是一種輕便質(zhì)優(yōu)的接口。

2.2 ActiveX數(shù)據(jù)對象(ADO)事務(wù)控制

BeginTrans、CommitTrans和RollbackTrans是ADOConnection部件供數(shù)據(jù)庫應(yīng)用程序在運行時調(diào)用開始事務(wù)、控制并保存或放棄所做數(shù)據(jù)修改的方法。

l BeginTrans 開始一個事務(wù)

當開始一個事務(wù)時,后來所有讀寫數(shù)據(jù)庫的操作都發(fā)生在這次事務(wù)的環(huán)境中,直到本次事務(wù)通過調(diào)用CommitTrans或RollbackTrans來顯示的終止為止。還以商品管理為例,當購進或售出商品時,在商品數(shù)據(jù)庫記錄上必須發(fā)生兩個修改:

  A、購進或銷售的記錄必須記錄在銷售表中;

  B、在商品庫存中對該類商品的庫存進行調(diào)整。

        如果出于某種原因,其中的一個操作不能被完成,那么任何一個操作都不應(yīng)該發(fā)生。因為這些操作是相關(guān)的,它們發(fā)生在同一個事務(wù)中。

l RollbackTrans 取消事務(wù)中的修改并終止當前事務(wù)

        為了取消對數(shù)據(jù)庫所做的修改,必須用RolllbackTrans方法返回一個事務(wù)。RollbackTrans方法取消當前事務(wù)中對數(shù)據(jù)庫所做的修改并終止當前事務(wù)。

l CommitTrans  提交一個事務(wù)

        為了做永久性的修改,必須CommitTrans方法提交事務(wù),這將保存用戶對數(shù)據(jù)庫所做的修改并結(jié)束當前事務(wù)。

在VB 6.0中,ADO成為它與各種數(shù)據(jù)源的缺省接口,ADO數(shù)據(jù)訪問方式是現(xiàn)在和未來VB乃至Microsoft的各種應(yīng)用軟件進行數(shù)據(jù)訪問與應(yīng)用的主流。

而在DELPHI中,基于DBE(Borland Database Engine的簡稱,即Borland數(shù)據(jù)庫引擎)的數(shù)據(jù)庫訪問方式是DELPHI的標準的、傳統(tǒng)的方式;基于ADO技術(shù)的數(shù)據(jù)庫訪問方式,這是DELPHI 5.0新增的功能。DELPHI 5.0 提供了一整套ADO組件,封裝了ADO框架的所有功能。

下面以商品庫存管理來分別闡明ADOConnection的事務(wù)控制在VB和DELPHI中的應(yīng)用。

3 商品庫存管理中的數(shù)據(jù)庫

該數(shù)據(jù)庫GoodsManagement用Microsoft的SQL Server創(chuàng)建,包括三個用戶數(shù)據(jù)表,用戶表Users、庫存表Goods、進銷表InOutGoods,每個數(shù)據(jù)表的表結(jié)構(gòu)如下:

l 用戶表Users

字段名        數(shù)據(jù)類型        長度

用戶名        VARCHAR 8

用戶類型 VARCHAR 10

用戶口令 VARCHAR 6

    主鍵為: 用戶名

    注:

      用戶類型有一般用戶和系統(tǒng)管理員兩種,其中一般用戶只能進行銷售商品,碉系統(tǒng)管理員還可以增加或刪除用戶,由于本文章只是闡述ADOConnection的事務(wù)控制,所以也就涉及到用戶管理。

l 庫存表Goods

字段名        數(shù)據(jù)類型        長度

商品名        VARCHAR 14

商品描述 VARCHAR 16

商品庫存 SMALLINT 2

主鍵為:商品名

l 進銷表InOutGoods

字段名        數(shù)據(jù)類型        長度

進銷 VARCHAR 2

商品名稱 VARCHAR 14

商品數(shù)量 SMALLINT 2

商品價格 MONEY 8

操作人員 VARCHAR 8

操作時間 DATETIME 8

主鍵為:(操作人員,操作時間)

    外鍵為:操作人員,對應(yīng)于Users表的用戶名

4 ADO事務(wù)控制應(yīng)用〈〈商品庫存管理〉〉在VB中的實現(xiàn)

4.1 數(shù)據(jù)環(huán)境設(shè)計器

           

\

圖1 數(shù)據(jù)環(huán)境設(shè)計器

數(shù)據(jù)環(huán)境設(shè)計器中主要控件的屬性如下:

控件名        控件類型        重要屬性設(shè)置

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數(shù)據(jù)對象如何實現(xiàn)事務(wù)管理。

 Dim intNum1, intNum2 As Integer

?

  ‘開始一個事務(wù)

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且為進的所有記錄的進貨數(shù)量之和

With DE.rsStrSQL

.Open "select sum(商品數(shù)量) from InOutGoods where 進銷='進'" & " and 商品名稱='" & TxtName.Text & "'"

intNum1 = .Fields(0).Value

.Close

End With

‘求進銷表中商品名為TxtName.Text且為銷的所有記錄的進貨數(shù)量之和

With DE.rsStrSQL

.Open "select sum(商品數(shù)量) 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

  ‘調(diào)整商品庫存中該商品的庫存量

DE.Cn.Execute "update Goods set 商品庫存=" & (intNum1 - intNum2) & " where 商品名='" & TxtName.Text & "'"

 ‘向數(shù)據(jù)庫提交事務(wù)

D【本文來自鴻網(wǎng)互聯(lián) (http://www.68idc.cn)】E.Cn.CommitTrans  

?

5 ADO事務(wù)控制應(yīng)用〈〈商品庫存管理〉〉在DELPHI中的實現(xiàn)

5.1 系統(tǒng)中的數(shù)據(jù)模塊

\

數(shù)據(jù)模塊窗體主要控件的屬性如下:

控件名        控件類型        重要屬性設(shè)置

ADOCn       ADOConnection對象   ConnectSource :(同前)

  ADODatasetGoods 數(shù)據(jù)集部件ADODataset   ConnectionName:ADOCN  

CommandText:Goods

ADODatasetInOutGoods 數(shù)據(jù)集部件ADODataset ConnectionName:ADOCN  

CommandText:Goods

ADODataset1 數(shù)據(jù)集部件ADODataset ConnectionName:ADOCN  

CommandText:Goods

DataSourceGoods  DataSource控件   Dataset:ADODatasetGoods

DataSourceInOutGoods  DataSource控件 Dataset:ADODatasetInOutGoods

5.2 進庫管理模塊的代碼

下面就以其中的一個程序段“進庫管理”來說明ADO數(shù)據(jù)對象如何實現(xiàn)事務(wù)管理。

var

strSQL:string;

intNum1,intNum2,intRecordsAffected:integer;

begin

?

//啟動事務(wù)控制

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且為進的所有記錄的進貨數(shù)量之和

strSQL:='select sum(商品數(shù)量) from InOutGoods where 進銷=''進''

and 商品名稱='''+editName.text+'''';

with DM.ADODataSet1 do begin

Close;

CommandText:=strSQL;

Open;

end;

intNum1:=DM.ADODataSet1.Fields[0].Value ;

//求進銷表中商品名為editName.text且為銷的所有記錄的進貨數(shù)量之和

strSQL:='select sum(商品數(shù)量) 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 ;

?

Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號-2

違法及侵權(quán)請聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市萬商天勤律師事務(wù)所王興未律師提供法律服務(wù)