首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

保存之后非空字段偶尔出现‘’解决思路

2012-03-11 
保存之后非空字段偶尔出现‘’问题现象:针对两个表的保存:pp_productpo(主表)和pp_pomain(子表)的保存,偶尔

保存之后非空字段偶尔出现‘’
问题现象:针对两个表的保存:pp_productpo(主表)和pp_pomain(子表)的保存,偶尔出现非空字段ccode值保存结果中有''
但不是每次都出现,也不是经常出现,所以难以观察出问题所在。

程序结构如下:


//变量声明

//数据合理性判断:

//取操作员编号与操作时间

dw_1.accepttext()

if dw_1.accepttext()<0 then
messagebox('错误!','输入数据出错!')
return
end if

//////////////////////////
//已下是对订单新增状态的判断。(在我的程序中,订单分两种情况:订单新增和订单追加)

IF ls_modify_new = 'N' THEN

if ll_isfirst = 1 then
select top 1 ccode into :ls_code
from pp_productpo
where ccode = :ls_prodcode_ue
using sqlca;
 
if sqlca.sqlcode <> 0 then
messagebox('提示','当前追加的订单号在数据库中不存在,请核对后重新输入!')
return
end if


end if

elseif ll_isfirst = 0 then
select top 1 ccode into :ls_code
from pp_productpo
where ccode = :ls_prodcode_ue
using sqlca;
 
if sqlca.sqlcode = 0 then

messagebox('提示','当前新增的订单号在数据库中已存在,订单号重复,请核对后重新输入!')
return
end if

END IF

/////////////////////////////////

//////////////
ls_ccode = dw_1.getitemstring(1,'prodcode_ue')
if isnull(ls_prodcode_ue) or len(trim(ls_prodcode_ue)) = 0 then
messagebox('提示','请检查订单号')
return
end if

//这里是锁表,这是根据我的一个朋友的一段例程写的,现在我在解决这些问题的时候搜索过很多次没有找到这种写法的依据。
//ID和MAINID都是主键。整型,非自增量。

nn:
update pp_productpo
set id = id
where id in(select top 1 isnull(id,'') from pp_productpo )
using sqlca;
if sqlca.sqlcode = 0 then 
else
goto nn
end if


update pp_pomain
set mainid = mainid
where mainid in(select top 1 isnull(mainid,'') from pp_pomain )
using sqlca;
if sqlca.sqlcode = 0 then 
else
goto nn
end if


if ls_modify_new = 'N' then

if ll_isfirst = 0 then

//新增订单,取得订单主表的主键值,先增加主表的值。

///////////插入主表的值
insert PP_ProductPO (id,cCode,dDate,cMaker,ccuscode)//,cCuscode,cCusname,gs_jg,cinvname,IsSched,Stddetail,externalfold,drawingno,cuscinvcode,moldno)
values (:ll_newid_po,:ls_ccode,:dd_dmakedate,:ls_cmaker,:ls_ccuscode)//,:ls_cCuscode,:ls_kh_name,:ls_gs_jg,:ls_cinvname,:ls_IsSched,:ls_Stddetail,:ls_externalfold,:ls_drawingno,:ls_cuscinvcode,:ls_moldno)
using sqlca;

  if sqlca.sqlcode = 0 then
else

messagebox('数据库错误!','脚本错误14u:#'+string(sqlca.sqldbcode)+':'+sqlca.sqlerrtext)
rollback using sqlca;
return
end if
elseif ll_isfirst = 1 then
select id into :ls_old_poid
from PP_ProductPO where cCode = :ls_prodcode_ue
using sqlca;
end if
//插入表体的内容。

/////////////////////

//

if sqlca.sqlcode = 0 then
commit using sqlca;

messagebox('信息!','保存成功!')
dw_1.setitem(1,'mainid',ll_newid_pomain)
dw_1.setitem(1,'id',ll_newid_po)

ls_modify_new = 'Q'
dw_1.object.datawindow.readonly = 'yes'
dw_2.object.datawindow.readonly = 'yes'

///////////////////////////////////////////////////



else

messagebox('数据库错误!','脚本错误N23:#'+string(sqlca.sqldbcode)+':'+sqlca.sqlerrtext)
rollback using sqlca;
return
end if



///////////////////////////////

数据库相关表结构的设计:pp_productpo主表,主键ID,整型,非自增量;ID,cCode字段非空;pp_pomain字表:主键mainid。
以上两个表相关的触发器已经删除,仍然出现上述故障现象:
针对两个表的保存:pp_productpo(主表)和pp_pomain(子表)的保存,偶尔出现非空字段ccode值保存结果中有''
但不是每次都出现,也不是经常出现,所以难以观察出问题所在。

我怀疑过是变量生存周期的缘故,因为在insert语句前有一个select查询判断订单号在数据库中是否存在。但是我用两个不同的变量去取订单号的值,一个去查询,一个去保存,也不行,

也怀疑过锁表语法出现问题,但是这种锁表语法我怎么也没有找到写法的依据,

由于在实际操作中这个问题不是频繁出现,所以很难判断问题究竟出在哪里,所以在这里请教各位,先谢了!











[解决办法]

C/C++ code

if ll_isfirst = 1 then  select top 1 ccode into :ls_code  from pp_productpo  where ccode = :ls_prodcode_ue  using sqlca;    if sqlca.sqlcode <> 0 then     messagebox('提示','当前追加的订单号在数据库中不存在,请核对后重新输入!')     return  end ifend if
[解决办法]
ls_ccode = dw_1.getitemstring(1,'prodcode_ue')
if isnull(ls_prodcode_ue) or len(trim(ls_prodcode_ue)) = 0 then 
--if isnull(ls_prodcode_ue) or trim(ls_prodcode_ue) = "" then 

messagebox('提示','请检查订单号')
return
end if

热点排行