急....数据审核的问题?????????????
是这样的,有两个数据库,一个是成果库,一个是当前库。成果库主要存放审核后的数据;而当前库主要用于当前用户录入数据的保存。
其中,当前库又分三个组,每个组包括2个以上的用户,那么每个用户都可以对同一条数据进行录入。最后,通过程序对这三个组录入的数据进行对比审核。如果审核通过,审核后的数据保存到成果库中;如果审核没有通过,提示录入用户对数据进行修改,对修改后的数据再进行审核,审核通过后入成果库。
希望各位同行提点好的设计思路和方法,谢谢!如果有现成的代码也行,再次万分感谢!
E-mail:oceanaut@163.com
问题点数:50、回复次数:7Top
1 楼oceanaut(海阔天空)回复于 2002-05-11 16:38:15 得分 0
大家都很忙吗?抽空儿看看我的这个问题好吗?谢谢!!!!!!!Top
2 楼mars884813(一帆)回复于 2002-05-11 16:48:38 得分 0
我这里的审核是这样做的:
就在原来的表上审核,还用原来的数据窗口。审核的时候把需要审的记录找出来,进入审核模式后将缓冲区中的该条数据清空,审核员录入一遍。保存的时候在代码中发现错误(与数据库中的原始值对比:dw.object.data[row,col]= dw.object.data.Original[row,col]),错误发现后审核员确定到底是录入员错误还是审核员错误,根据审核员的回答在作处理。倘若录入员和审核员都出错,则需要重新审核。
Top
3 楼oceanaut(海阔天空)回复于 2002-05-11 16:58:35 得分 0
谢谢mars884813(一帆)能不能说的在具体一点儿,如果愿意,可以将你的源代码传给我看看。oceanaut@163.comTop
4 楼mars884813(一帆)回复于 2002-05-11 17:10:26 得分 0
这样吧,贴出来共享好了。
我来找找。Top
5 楼mars884813(一帆)回复于 2002-05-11 17:17:42 得分 50
自定义一个数据窗口,用到两个函数uf_clear()(清空),uf_check(审核)
//====================================================================
// [PUBLIC] Function uf_check 在 uo_datawindow inherited from datawindow
//--------------------------------------------------------------------
// 说明:对数据窗口中的数据根据原始值进行校验
//--------------------------------------------------------------------
// 参数1:[value] boolean mustkeyonly
// 说明:只校验关键列(与关键列校验对应)
//--------------------------------------------------------------------
// 返回: (INTEGER) 0不对,1正常
integer li_yesno,li_i,li_row
integer li_columns,li_rowcount
string ls_name,ls_colname,ls_msg
integer li_flag
li_rowcount=this.rowcount( )
li_columns=integer(this.object.datawindow.column.count)
for li_row=1 to li_rowcount
for li_i=1 to li_columns
if mustkeyonly then //关键列
if not lower(this.describe("#"+string(li_i)+".Criteria.Required"))="yes" then //需校验
continue;//不是关键列跳过
end if
end if
if this.describe("#"+string(li_i)+".Key")="yes" then//关键列不清空
continue;
end if
//进行清空
THIS.uf_setnull(li_row,li_i)
next
next
return 1
Top
6 楼mars884813(一帆)回复于 2002-05-11 17:21:21 得分 0
//====================================================================
// [PUBLIC] Function uf_check 在 uo_datawindow inherited from datawindow
//--------------------------------------------------------------------
// 说明:对数据窗口中的数据根据原始值进行校验
//--------------------------------------------------------------------
// 参数1:[reference] string msg
// 说明:提示信息
// 参数1:[value] boolean mustkeyonly
// 说明:只校验关键列(与关键列校验对应)
//--------------------------------------------------------------------
// 返回: (INTEGER) 1正常,0操作错,-1审核
//变更日志:改成操作员错可跳过
// :加入对增加和删除的校验
integer li_yesno,li_i,li_row,j
integer li_columns,li_rowcount
string ls_name,ls_colname,ls_msg,ls_msg1
integer li_flag
uo_xnkh luo_xn
if pos(is_query[1,1],'deleted' )=0 then //未检查过
for j=1 to this.deletedcount( )
//得到DELETE语句
if this.GetItemStatus( j, 0,delete!)=notmodified! or this.GetItemStatus( j, 0,delete!)=datamodified! then
if this.tag<>'' then
ls_msg=this.tag+' '
end if
ls_msg=ls_msg+' 数据被删除,'
ls_msg1=ls_msg+'~r~n请确认是否是操作员错误?'
li_flag=messagebox('信息提示',ls_msg1,Exclamation!, yesno!, 2)
if li_flag=1 then
//操作员错应另做处理,在函数外取录入员进行操作(原值错,确认新值),并将错误信息返回
msg=ls_msg
is_query[1,1]=is_query[1,1]+'deleted'
return 0
else
//审核错,确认老值
this.object.data[li_row,li_i]= this.object.data.Original[li_row,li_i]
//审核错则记录审核员效能
//操作错效能定为45
//登记效能记录
luo_xn.uf_xnjl_add(45,gi_emp_id,gi_emp_id,ls_msg)
//增加月考核表(只增加一个总量)
luo_xn.uf_xnkh_add(string(gdt_cur_date,'yyyy.mm'),45,gi_emp_id,1)
return -1
end if
end if
next
end if
li_flag=1
li_rowcount=this.rowcount( )
li_columns=integer(this.object.datawindow.column.count)
for li_row=1 to li_rowcount
for li_i=1 to li_columns
if mustkeyonly then //关键列
if not lower(this.describe("#"+string(li_i)+".Criteria.Required"))="yes" then //需校验
continue;//不是关键列跳过
end if
end if
//进行校验
if TRIM(STRING(this.object.data.Original[li_row,li_i]))<>TRIM(STRING(this.object.data[li_row,li_i])) then
ls_colname=this.describe("#"+string(li_i)+".name")
if li_row<=upperbound (is_query,1) then //判断是否作过已记录标志
if pos(is_query[li_row,li_i],'checked')>=1 then
continue;
end if
end if
if this.tag<>'' then
ls_msg=this.tag+' '
end if
ls_msg=ls_msg+'第'+string(li_row)+'行:['+this.describe(ls_colname+"_t.text")+"]数据审核时数据不对!"
ls_msg=ls_msg+'~r~n原值:'+string(this.object.data.Original[li_row,li_i])
ls_msg=ls_msg+'~r~n审核:'+string(this.object.data[li_row,li_i])
ls_msg1=ls_msg+'~r~n请确认是否是操作员错误?'
li_flag=messagebox('信息提示',ls_msg1,Exclamation!, yesno!, 2)
if li_flag=1 then
//操作员错应另做处理,在函数外取录入员进行操作(原值错,确认新值),并将错误信息返回
msg=ls_msg
if li_row<=upperbound (is_query,1) then //作标志位记录该项目已标志过
is_query[li_row,li_i]=is_query[li_row,li_i]+'checked'
end if
return 0
else
//审核错,确认老值
this.object.data[li_row,li_i]= this.object.data.Original[li_row,li_i]
//审核错则记录审核员效能
//操作错效能定为45
//登记效能记录
luo_xn.uf_xnjl_add(45,gi_emp_id,gi_emp_id,ls_msg)
//增加月考核表(只增加一个总量)
luo_xn.uf_xnkh_add(string(gdt_cur_date,'yyyy.mm'),45,gi_emp_id,1)
return -1
end if
end if
next
next
return 1
问题是在处理审核多条记录的时候(比如少录入或多录入了一条)的时候,上述方法没有很好的解决。特别是审核的时候多录入一条的情况现在还无法处理。有劳你给想想办法。Top
7 楼oceanaut(海阔天空)回复于 2002-05-11 17:22:37 得分 0
谢谢!
但不知道,怎样设计这样的程序比较合理。因为牵扯到2个数据库。最好能给出一个设计方案。
这个问题要到5月15日上交。先写了。Top




