Database1.StartTransaction
try
table.append;
table.fieldbyname('ss').asstring := '77';
table.post;
Query2.close;
Query2.clear;
Query2.sql.add('update table2 set xixi="aa"');
Query2.execsql;
Database1.Commit;
except
Database1.Rollback
showmessage('异常错误');
end;Database1的事务处理,很奇怪.每次点提交出现 "异常错误后",在点提交,事务处理部份有些提交,有些没提交。并不是全部回滚,或者全部提交的。这个要怎么处理。我在except里 把exception,show出来。提示是连数据库超时(大部分情况下连接是正常的)。可能是服务器忙或者什么共它异常。这种情况应该怎么处理啊?
try
table.append;
table.fieldbyname('ss').asstring := '77';
table.post;
Query2.close;
Query2.clear;
Query2.sql.add('update table2 set xixi="aa"');
Query2.execsql;
Database1.Commit;
except
Database1.Rollback
showmessage('异常错误');
end;Database1的事务处理,很奇怪.每次点提交出现 "异常错误后",在点提交,事务处理部份有些提交,有些没提交。并不是全部回滚,或者全部提交的。这个要怎么处理。我在except里 把exception,show出来。提示是连数据库超时(大部分情况下连接是正常的)。可能是服务器忙或者什么共它异常。这种情况应该怎么处理啊?
try
table.append;
table.fieldbyname('ss').asstring := '77';
table.post;
Query2.close;
Query2.clear;
Query2.sql.add('update table2 set xixi="aa"');
Query2.execsql;
Database1.Commit;
except
begin
Database1.Rollback;
On E: Exception do
showmessage(E.Message);
end;
end;
if Database1.InTransaction then
Database1.Rollback;
每次事务开始之前加这样一句,有点怕把其它的事务结回滚掉,存不存在这样的问题,同一电脑开多个相同程序
==============================================不存在,除非你还有一个程序专门给这些程序提供连接。即使是同一个程序,不同的Connection也不会互相干扰。
insert,update等。
另外
except
on E:Exception do
begin
Database1.Rollback
showmessage('异常错误,'+E.message);
end;
end;
if Database1.InTransaction then
判断如果是 InTransaction 是
先回滚掉,还是把 InTransaction := false;
...
except
On e: Exception do
ShowMessage(e.Message); //把异常信息show出来
end;
try
Query8.last;
while not Query8.bof do
begin
with Query2 do
begin
close;
sql.Clear;
sql.Add('update give set condition=''不合格流转结束'',sign=:p1,ssign=:p2,bhgfy=:p3,zjje=:p5,zjyy=:p6 where id=:p4');
case combobox1.ItemIndex of
0: parambyname('p1').AsString := '1' ;
1: parambyname('p1').AsString := '2' ;
end;
parambyname('p2').AsString := '不合格流转结束,处理为:'+combobox1.Text;
if strtofloat(edit20.Text) = fzd then //小与最低罚款金额按最低算,各记录平分
begin
parambyname('p3').AsString := sAver;
end
else
begin
parambyname('p3').AsString := formatfloat('0.00', Query8.fieldbyname('fy').AsFloat * 1.17 * rfbl);
end;
parambyname('p4').AsString := Query8.fieldbyname('id').AsString;
if not RxCalcEdit1.Visible then
begin
parambyname('p5').AsString := '0';
parambyname('p6').AsString := '';
end
else
begin
parambyname('p5').value := RxCalcEdit1.value;
parambyname('p6').AsString := Edit3.Text;
end;
execsql;
end;
Query8.Prior;
end; with Query2 do
begin
close;
sql.Clear;
sql.Add('update ttask set isCompeleted=''2'' where taskID='''+staskid+'''');
execsql; close; //ssign
sql.Clear; //待处理(已检验完) // //,url,realresult idetail,
sql.Add('insert into ttask (iGive,templateID,templateName,taskName,userID,NextUserID,nodeResult,isCompeleted,sTime,skind,sMoney,sbl,sAdv,zjje,zjyy,NextUser) values ('); //不合格则设标记为1
sql.Add(':p1,:p2,:p3,:p4,:p5,:p6,:p8,:p9,:p10,:p12,:p13,:p14,:p15,:p16,:p17,:p18)'); //:p7,:p11,
Parambyname('p1').AsString := sid;
Parambyname('p2').AsString := sdj;//Edit2.Text;
Parambyname('p3').AsString := '不合格单审批';
Parambyname('p4').AsString := '送财务扣款人员(不合流转结束)!';
Parambyname('p5').AsString := mainfrm.StatusBar.Panels[7].Text;
Parambyname('p6').AsString := combobox3.Text;
Parambyname('p8').AsString := memo4.Text;
Parambyname('p9').AsString := '1';
Parambyname('p10').AsString := sbegin;
//Parambyname('p11').AsString := sdetailid;
Parambyname('p12').AsString := '品管部经理';
Parambyname('p13').AsString := edit20.Text;
Parambyname('p14').AsString := combobox2.Text;
Parambyname('p15').AsString := ComboBox1.Text;
if not RxCalcEdit1.Visible then
begin
Parambyname('p16').AsString := '0';
Parambyname('p17').AsString := '';
end
else
begin
Parambyname('p16').value := RxCalcEdit1.Value;
Parambyname('p17').AsString := Edit3.Text;
end;
Parambyname('p18').AsString := sgh;
execsql; //处理日志
close;
sql.Clear;
sql.Add('insert into TRecord (operator, rq, dept, giveid, goodsno, things) values (:p1, :p2, :p3, :p4, :p5, :p6)');
ParamByName('p1').AsString := mainfrm.StatusBar.Panels[7].Text;
ParamByName('p2').AsString := sbegin;
ParamByName('p3').AsString := mainfrm.StatusBar.Panels[5].Text;
ParamByName('p4').AsString := sdj;//edit2.Text;
ParamByName('p5').AsString := Query8.fieldbyname('goodsno').AsString;//edit4.Text;
ParamByName('p6').AsString := '不合单流转结束,最终结果处理为:'+combobox1.Text+'!';
execsql;
close;
end;
loginfrm.Database1.Commit;
except
on e:exception do
begin
loginfrm.Database1.Rollback;
showmessage(e.Message);
exit;
end;
end;大部份时间是正常,但确实存在give 表的东西就是没有更改。其它确都提交了,不知道是什么原因?