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条,关闭窗体再进来就只一条记录)!!
经试这多次都是这样,但是,如果数据一直都正确,就会全部写入数据库。1\请给出解决方法,最好是原基础上修改
2、说明原因
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条,关闭窗体再进来就只一条记录)!!
经试这多次都是这样,但是,如果数据一直都正确,就会全部写入数据库。1\请给出解决方法,最好是原基础上修改
2、说明原因
解决方案 »
- 为何点主窗体(全屏显示的)时,其它已经show出来的窗体被挡住?
- 如何处理数据库的NULL值?
- 请高手指点我用webbrowser作的软件,支持多个网页任意区域信息的任意组合的浏览器
- DLL的声明很着急
- 各位大侠,请给点写游戏外挂的思路,最好有源代码...先谢谢!
- 如何用DELPHI程序控制网眼啊?
- 求救quickrep报表的问题,急,先谢过
- 如何在我的程序中运行windows的注册程序 regsvr32?
- 怪怪的问题
- 在三层结构下如何提交一个主从表的记录!(在MIDAS区人气不旺,希望在这里得到解决)
- 在三方控件TcxvirtualTreeList中如何取得節點指針的地址,在線等,急!知者請進,
- 哪位gg jj用过teechart,帮俺简单提示一下: 我有个三列n行的数组!在三维坐标上画一根线
////////////////////////
一、表结构
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;
adoMain.Post
else if adoMain.LockType =ltBatchOptimistic then
begin
adoMain.post;//加上这个试试
adoMain.UpdateBatch(arAll);
end;
还是不行
还是只保存了最后一条记录
/////////////////
另外,我测试了
adoMain.CancelBatch(arAll); ----> 是adoMain.UpdateBatch(arAll);
adoMain.CancelBatch(); -->>adoMain.UpdateBatch();
/////////////////
另外,我测试了
adoMain.CancelBatch(arAll); ----> 是adoMain.UpdateBatch(arAll);
adoMain.CancelBatch(); -->>adoMain.UpdateBatch();