我是在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中的表
解决方案 »
- 我安装了oracle 9i怎么没有SQL*Net Easy Configuration组件
- 急:在RHEL 4下面安装Oracle 10g,报OUI-10118错误:加载安装组件时products.xml文件不存在或者读取失败
- oracle新手,几个简单的问题
- ORACLE中如何建立表不记日志
- 如何取每个月中的最大日期记录
- 我在安装oracle client的管理员安装时 碰到了这样一个问题 谢谢了
- 初学Oracle,高手指点下.
- 是子查询快还是连接查询快
- 紧急求救: SP2-0738: 限制的命令 "edit" 不可用
- java调oracle结果集问题?
- sql 在*后面加东西
- 这个函数怎么写?求助
if (SQLCODE != 0 && SQLCODE != 1403) {
printf("更新 rz_fp_hy_input 错误 [%d]\n",SQLCODE);
printf("SQLERRMSG = [%s]\n",SQLERRMSG);
}