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中的实现
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 ; ?
?