我是在delphi中通过ODAC组件更新数据的,更新的语句如下:UPDATE rz_fp_hy_input t SET t.rzjg_dm=:rzjgdm_,t.rzjg_sm=:rzjgsm_,t.RZSJ=sysdate where t.fprzsqid=:fprzsqid_其中:rzjgdm_,:rzjgsm_,:fprzsqid_都是通过组件的参数传递方法设置的值,已通过打印确保其值不为空。
当程序在运行一段时间后就会出现异常报错为:”ora-01403 not data found“.
我在plsql中测试过,即使没有满足条件(即fprzsqid不存在)的更新也是没有报错的。以下是代码语句:{检查是否重复认证}
recount := 0;
Form1.mmo_info.Lines.Add('检查是否重复认证');
OraQuery2_:= initQuery(data2Conn);
OraQuery2_.Close;
OraQuery2_.SQL.Clear; OraQuery2_.SQL.Add('select count(a.fprzsqid) co from skskj.SM_SKSKJDK_JG_ZB a where');
OraQuery2_.SQL.Add(' a.fphm=:fphm_');
OraQuery2_.SQL.Add(' and a.fp_dm=:fpDm_');
OraQuery2_.SQL.Add(' and a.rzjg_dm=:rzjgDm_');
OraQuery2_.Params.ParamByName('fphm_').Value:=tmphyfp.GetFp_hm;
OraQuery2_.Params.ParamByName('fpDm_').Value:=tmphyfp.GetFp_dm;
OraQuery2_.Params.ParamByName('rzjgDm_').Value:=tmprzjgdm;
OraQuery2_.Open; if not OraQuery2_.Eof then
begin
recount := OraQuery2_.FieldValues['co'];
end; if recount > 0 then
begin
//tmprzjgdm := '2';
Form1.mmo_info.Lines.Add('重复认证:'+ IntToStr(recount));
end;
Form1.mmo_info.Lines.Add('检查是否重复认证结束');end;OraQuery_ := initQuery(dataConn);
dataConn.StartTransaction;{跟新数据库发票认证信息}
OraQuery_.Close;
OraQuery_.SQL.Clear; //fprz_hwys_fpmx
OraQuery_.SQL.Text:='UPDATE rz_fp_hy_input t SET t.rzjg_dm=:rzjgdm_,t.rzjg_sm=:rzjgsm_,t.RZSJ=sysdate where t.fprzsqid=:fprzsqid_';
OraQuery_.Params.ParamByName('rzjgdm_').Value:=tmprzjgdm;
OraQuery_.Params.ParamByName('rzjgsm_').Value:=tmprzjgsm;
OraQuery_.Params.ParamByName('fprzsqid_').Value:=tmphyfp.GetFprzssqid;
OraQuery_.Execute;dataConn.Commit;
except
on E:Exception do
begin
form1.mmo_info.Lines.Add('数据库异常,更新数据失败');
form1.mmo_info.Lines.Add(e.Message);
data2Conn.Rollback;
dataConn.Rollback;
end;
end;
对于dataconn和data2conn解释下,按正常流程时间数据保存在data2conn中的表,但是由于有上述错误故在查询时间是访问data2conn,在插入式是使用的dataconn中的表
当程序在运行一段时间后就会出现异常报错为:”ora-01403 not data found“.
我在plsql中测试过,即使没有满足条件(即fprzsqid不存在)的更新也是没有报错的。以下是代码语句:{检查是否重复认证}
recount := 0;
Form1.mmo_info.Lines.Add('检查是否重复认证');
OraQuery2_:= initQuery(data2Conn);
OraQuery2_.Close;
OraQuery2_.SQL.Clear; OraQuery2_.SQL.Add('select count(a.fprzsqid) co from skskj.SM_SKSKJDK_JG_ZB a where');
OraQuery2_.SQL.Add(' a.fphm=:fphm_');
OraQuery2_.SQL.Add(' and a.fp_dm=:fpDm_');
OraQuery2_.SQL.Add(' and a.rzjg_dm=:rzjgDm_');
OraQuery2_.Params.ParamByName('fphm_').Value:=tmphyfp.GetFp_hm;
OraQuery2_.Params.ParamByName('fpDm_').Value:=tmphyfp.GetFp_dm;
OraQuery2_.Params.ParamByName('rzjgDm_').Value:=tmprzjgdm;
OraQuery2_.Open; if not OraQuery2_.Eof then
begin
recount := OraQuery2_.FieldValues['co'];
end; if recount > 0 then
begin
//tmprzjgdm := '2';
Form1.mmo_info.Lines.Add('重复认证:'+ IntToStr(recount));
end;
Form1.mmo_info.Lines.Add('检查是否重复认证结束');end;OraQuery_ := initQuery(dataConn);
dataConn.StartTransaction;{跟新数据库发票认证信息}
OraQuery_.Close;
OraQuery_.SQL.Clear; //fprz_hwys_fpmx
OraQuery_.SQL.Text:='UPDATE rz_fp_hy_input t SET t.rzjg_dm=:rzjgdm_,t.rzjg_sm=:rzjgsm_,t.RZSJ=sysdate where t.fprzsqid=:fprzsqid_';
OraQuery_.Params.ParamByName('rzjgdm_').Value:=tmprzjgdm;
OraQuery_.Params.ParamByName('rzjgsm_').Value:=tmprzjgsm;
OraQuery_.Params.ParamByName('fprzsqid_').Value:=tmphyfp.GetFprzssqid;
OraQuery_.Execute;dataConn.Commit;
except
on E:Exception do
begin
form1.mmo_info.Lines.Add('数据库异常,更新数据失败');
form1.mmo_info.Lines.Add(e.Message);
data2Conn.Rollback;
dataConn.Rollback;
end;
end;
对于dataconn和data2conn解释下,按正常流程时间数据保存在data2conn中的表,但是由于有上述错误故在查询时间是访问data2conn,在插入式是使用的dataconn中的表
if (SQLCODE != 0 && SQLCODE != 1403) {
printf("更新 rz_fp_hy_input 错误 [%d]\n",SQLCODE);
printf("SQLERRMSG = [%s]\n",SQLERRMSG);
}