当前位置:主页>销售管理软件> 列表

怪怪怪!!事务处理的问题,出现一次出错后再用事务就出问题了 找生产管理软件

进销存软件版1楼: DataMod.adoConn.BeginTrans;
try
if adoMain.LockType =ltOptimistic then
adoMain.Post
else if adoMain.LockType =ltBatchOptimistic then
adoMain.UpdateBatch(arAll);
DataMOd.adoConn.CommitTrans;
except on E:Exception do
begin
DataMod.adoConn.RollbackTrans;
DBGridEhMain.Refresh;
if IsAborted=False then
begin
myShowErr(''保存数据时失败!原因:'' + #13 + E.Message );
end;
exit;
end;
end;

假设共有3条记录被新增,
如上,adoMain 是ltBatchOptimistic型的游标,只要我的数据出现过一次错误,被 Except 后的语句堆截获,那么,前面加入的两条记录不会被保存到数据库(DBGrid上有3条,关闭窗体再进来就只一条记录)!!
经试这多次都是这样,但是,如果数据一直都正确,就会全部写入数据库。
//////////////
补充说明:
////////////////////////
一、表结构
DepartNO(主键) DepartName

二、测试方法

1、先输入
DepartNO(主键) DepartName
01 计算机系
01 英语系

2、保存,系统提示出错
3、把英语系的 01 改为 02
4、再保存
系统提示保存成功。

5、关闭窗体,再进入,发现上一次新增的记录(不管新增多少条)系统总是只保存最后一条(如本例的02 英语系)。当然,以前的旧记录系统不会删除。

另外,我测试了
adoMain.CancelBatch(arAll);
adoMain.CancelBatch();

都一样的出现如题所说的问题。

adoMain是一个 adoDataset,语句为:
Select * from bs_Depart

adoMain.CursorType:=ctKeyset;
adoMain.LockType:=ltBatchOptimistic;
///////////
把事务放到 Try 里面也是一样的错

2楼: 我这样用事务的
procedure TCPK_RkcxForm.Button3Click(Sender: TObject);
begin
D1.ADOCCW.BeginTrans;//事务开始
TRY
ADOQRK.UpdateBatch();
EXCEPT
D1.ADOCCW.RollbackTrans;
MessageBox(Handle, ''数据保存失败,请检查错误'', ''系统提示'', MB_ICONEXCLAMATION);
EXIT;
END;
D1.ADOCCW.CommitTrans;//事务结束
MessageBox(Handle, ''数据已经成功保存'', ''系统提示'', MB_ICONASTERISK);
//事务控制,如成功,提交,否则回滚 .更新数据集
end; 如生产管理软件

3楼: 问题是:
您说的方法与我的方法并无本质差别.经测试,你说的方法也不行.
另外,测试发现,保存后,再次修改时保存,系统又会提示说"上一次修改影响....."的错误

4楼: 这是ado的bug,查查以前的帖子吧
我的方法是用clientdataset代替adodataset

5楼: 主要是记录的标志被改了,提交前本地保存一个副本
ADOConnection1.BeginTrans;
try
adotable1.SaveToFile(''temp.ADTG'');
adotable1.UpdateBatch();
ADOConnection1.CommitTrans;
except
ADOConnection1.RollbackTrans;
adotable1.Close;
adotable1.LoadFromFile(''temp.ADTG'');
end;

6楼: 回 chen_liang:
错误还是一样的存在!

进销存软件版7楼: 晕,我的是保存成功了,检查下你的代码

8楼: chen_liang:
你的调试不是按我的要求来的!!!
留下你的联系方式,MSN最好
我的是
jiangqinqin在hotmail.com 把"在"换成 @

9楼: 你仔细看一下你的程序,我是说你的程序总体,不是只这一部分!因为我的是保存成功了

10楼: bgzxclh请留下联系方式
我检测过了,也只可能这一段保存代码有问题了

11楼: 多人接受答案了。