我
我真的是青蛙
Unregistered / Unconfirmed
GUEST, unregistred user!
以下是一个COM+服务器里的审核方法。COM+为需要事务模式。
以下这个方法必须要保证在同一个事务里,其中任何 项失败或出错都要回滚。
可是下面这代码为什么不能回滚事务???
function TLYSVR.BuyInCheck(var Param: OleVariant;
TypeFlag: WordBool): OleVariant;
var
s:string;
TmpQry:TMySQLQuery;
tmparray:array of Variant;
i:integer;
begin
result:='';
if TypeFlag then
s:='+' else
s:='-';
TmpQry:=CreateQuery(false);
try
try
if varisarray(param) then
begin
tmparray:=param;
for i:=0 to high(tmparray)do
begin
if tmparray[3]<>'' then
begin
if TmpQry.Active then
TmpQry.Close ;
TmpQry.SQL.Clear ;
TmpQry.SQL.Add('select joh_bill from j_oorder_h where joh_checked=1 and joh_bill='+#39+tmparray[3]+#39);
TmpQry.Open ;
if TmpQry.IsEmpty then
begin
result:='订货单号:'+tmparray[3]+'不存在或没有审核';
raise Exception.Create('Error');
end else
begin
//更新该订货单中的完成数量
if TmpQry.Active then
TmpQry.Close ;
TmpQry.SQL.Clear ;
TmpQry.SQL.Add('select * from j_oorder_d where jod_pno='+#39+tmparray[0]+#39+
' and jod_brand='+#39+tmparray[1]+#39+' and jod_bill='+#39+
tmparray[3]+#39 );
TmpQry.Open ;
if TmpQry.IsEmpty then
begin
result:='产品:'+tmparray[0]+',品牌'+tmparray[1]+'在订货单'+
tmparray[3]+'中没有找到';
raise Exception.Create('Error');//是不是此处自定义错误,不能使事务回滚????????
end else
begin
//开始更新该订货单中的完成数量
TmpQry.Close ;
TmpQry.SQL.Clear ;
TmpQry.SQL.Add('update j_oorder_d set jod_finishcount=jod_finishcount'+s+inttostr(tmparray[2])+
' where jod_bill='+#39+tmparray[3]+#39+' and jod_pno='+#39+
tmparray[0]+#39+' and jod_brand='+#39+tmparray[1]+#39);
TmpQry.ExecSQL;
end;
end;
end;
//更新订货单完成,以下开始更新库存中的总数量与现货数量 以及成本价
if TmpQry.Active then
TmpQry.Close ;
TmpQry.SQL.Clear ;
TmpQry.SQL.Add('update proinfo set strcount=strcount'+s+inttostr(tmparray[2])+
',xhcount=xhcount'+s+inttostr(tmparray[2])+
',inprice=(strcount*inprice'+s+inttostr(tmparray[4])+
')/(strcount'+s+inttostr(tmparray[2])+')'+
' where '+
' pro_no='+#39+tmparray[0]+#39+' and pro_brand='+#39+tmparray[1]+#39);
TmpQry.ExecSql;
end;
end;
setComplete;
except
result:=result+'.审核失败';
SetAbort;
end;
finally
if TmpQry.Active then
TmpQry.Close ;
TmpQry.Free ;
end;
end;
以下这个方法必须要保证在同一个事务里,其中任何 项失败或出错都要回滚。
可是下面这代码为什么不能回滚事务???
function TLYSVR.BuyInCheck(var Param: OleVariant;
TypeFlag: WordBool): OleVariant;
var
s:string;
TmpQry:TMySQLQuery;
tmparray:array of Variant;
i:integer;
begin
result:='';
if TypeFlag then
s:='+' else
s:='-';
TmpQry:=CreateQuery(false);
try
try
if varisarray(param) then
begin
tmparray:=param;
for i:=0 to high(tmparray)do
begin
if tmparray[3]<>'' then
begin
if TmpQry.Active then
TmpQry.Close ;
TmpQry.SQL.Clear ;
TmpQry.SQL.Add('select joh_bill from j_oorder_h where joh_checked=1 and joh_bill='+#39+tmparray[3]+#39);
TmpQry.Open ;
if TmpQry.IsEmpty then
begin
result:='订货单号:'+tmparray[3]+'不存在或没有审核';
raise Exception.Create('Error');
end else
begin
//更新该订货单中的完成数量
if TmpQry.Active then
TmpQry.Close ;
TmpQry.SQL.Clear ;
TmpQry.SQL.Add('select * from j_oorder_d where jod_pno='+#39+tmparray[0]+#39+
' and jod_brand='+#39+tmparray[1]+#39+' and jod_bill='+#39+
tmparray[3]+#39 );
TmpQry.Open ;
if TmpQry.IsEmpty then
begin
result:='产品:'+tmparray[0]+',品牌'+tmparray[1]+'在订货单'+
tmparray[3]+'中没有找到';
raise Exception.Create('Error');//是不是此处自定义错误,不能使事务回滚????????
end else
begin
//开始更新该订货单中的完成数量
TmpQry.Close ;
TmpQry.SQL.Clear ;
TmpQry.SQL.Add('update j_oorder_d set jod_finishcount=jod_finishcount'+s+inttostr(tmparray[2])+
' where jod_bill='+#39+tmparray[3]+#39+' and jod_pno='+#39+
tmparray[0]+#39+' and jod_brand='+#39+tmparray[1]+#39);
TmpQry.ExecSQL;
end;
end;
end;
//更新订货单完成,以下开始更新库存中的总数量与现货数量 以及成本价
if TmpQry.Active then
TmpQry.Close ;
TmpQry.SQL.Clear ;
TmpQry.SQL.Add('update proinfo set strcount=strcount'+s+inttostr(tmparray[2])+
',xhcount=xhcount'+s+inttostr(tmparray[2])+
',inprice=(strcount*inprice'+s+inttostr(tmparray[4])+
')/(strcount'+s+inttostr(tmparray[2])+')'+
' where '+
' pro_no='+#39+tmparray[0]+#39+' and pro_brand='+#39+tmparray[1]+#39);
TmpQry.ExecSql;
end;
end;
setComplete;
except
result:=result+'.审核失败';
SetAbort;
end;
finally
if TmpQry.Active then
TmpQry.Close ;
TmpQry.Free ;
end;
end;