hur.cn - 华软网

 热门搜索

如何检测数据库中的数据冲突?

  作者:未知    来源:网络    更新时间:2018/11/9
rt。。。
就是在pb窗口中修改表中数据时统一列出现相同数据时会给出messagebox报错 或是不能点开到其余列(除非修改的数据和列里的原数据无冲突)
请高手指教 谢谢
------华软网友回答------
要做一个考试排考管理系统 统一班级不能在统一时间内出现两科考试。。。这个要检测冲突

另有其余地方需要检测冲突的
------华软网友回复------
不单单是需要到数据库中检测,需要两种检测
1.数据库检测
用select语句检查已保存到表中的数据是否和刚刚输入的数据是否相等
2.datawindow检测
用for next对datawindow循环检查dw中有没有和刚输入的数据重复的数据(由于可能输入的数据还没有保存到数据库中)

你能够把这两种检测封装成两个公用函数来调用。
------华软网友回复------
sql语句这样写能够到达检测冲突的目的么?
  select count(*)
  into :ll_count
  from pk_kaoshikaochang
  where 时间编号=:ll_sj and 考场编号=:ll_kc;
  if ll_count>0 then
   continue
  end if
------华软网友回复------
这个要看表了,原则是根据表主键来检测重复值
------华软网友回复------
where后面的两个条件是设的主键。。。

long ll_row,ll_i,ll_j,ll_sj,ll_kc,ll_rs,ll_count
string ll_jsm,ll_zt

FOR ll_i = 1 to dw_1.rowcount()
ll_sj=dw_1.getitemnumber(ll_i,"时间编号")
for ll_j=1 to dw_2.rowcount()
ll_kc=dw_2.getitemnumber(ll_j,"考场编号")
ll_rs=dw_2.getitemnumber(ll_j,"考场人数")
ll_jsm=dw_2.getitemstring(ll_j,"教室名")
ll_zt=dw_2.getitemstring(ll_j,"是否占用")
     select count(*)
   into :ll_count
   from pk_kaoshikaochang
   where 时间编号=:ll_sj and 考场编号=:ll_kc;
   if ll_count>0 then
   continue
   end if
ll_row=dw_3.insertrow(0)
      dw_3.scrolltorow(ll_row)
dw_3.setitem(ll_row,"时间编号",ll_sj)
dw_3.setitem(ll_row,"考场编号",ll_kc)
dw_3.setitem(ll_row,"考场人数",ll_rs)
dw_3.setitem(ll_row,"教室名",ll_jsm)
dw_3.setitem(ll_row,"是否占用",ll_zt)
next
NEXT
------华软网友回复------
这样是否是实现了冲突检测呢??? 感觉不太对。。。
------华软网友回复------
daixf_csdn(圣殿骑士) 有没有空帮我看下设计呢?现在就只需先实现其中一个windows下能实现冲突检测就行 由于下午要检查了。。。
------华软网友回复------
dw下的检测冲突该怎么写?
------华软网友回复------
dw下检测用FIND命令
------华软网友回复------
itemchanged事件和itemerror事件如何运用???
------华软网友回复------
引用
 wangsw1976() ( ) 信誉:100  2006-05-26 11:36:00  得分: 0  
 
 
   dw下检测用FIND命令
  
 

能写段简单的语句我参照下么?
------华软网友回复------
用的是pb9.0 英文版的help看不太懂。。。
------华软网友回复------
还未解决呀:再给你增补一下:
itemchanged事件中的代码
string ls_columnname
long ll_row,ll_rowcount,ll_rown
ll_row=getrow()
if getrow=0 then return
ls_columnname=getcolumnname()
choose case ls_columnname
case '你要判断的字段名'
ll_rowcount=rowcount()
ll_rown=find('字段条件达式',1,ll_row -1)+find('字段条件达式',ll_row+1,ll_rowcount)
if ll_rown>0 then 
messagebox('提醒','数据重复,请重新输入')
return 1
//以下是数据表中的数断,用SQL就能够实现,自己写吧

end choose
------华软网友回复------
谢谢楼上的朋友 我去试试。。。
------华软网友回复------
照旧不得其法 没完全理解。。。

string ls_columnname,ls_bj
long ll_row,ll_rowcount,ll_rown,ll_sjbh,getrow,ll_count
ll_row=getrow()
if getrow=0 then return
ls_columnname=getcolumnname()
 choose case ls_columnname
 case "时间编号"
ll_rowcount=rowcount()
ll_rown=find("ll_sjbh",1,ll_row -1)+find("ll_sjbh",ll_row +1,ll_rowcount)
   if ll_rown>0 then 
    messagebox("提醒!","数据重复,请重新输入!")
   return 1
 end choose
 
 select count(*) 
into :ll_count
from pk_kechengkaoshianpai
where 时间编号=:ll_sjbh and 班级=:ls_bj;
if ll_count>0 then
messagebox("提醒!","该班级在该时间已安排考试!")
end if

end if



------华软网友回复------

string ls_columnname,ls_bj
long ll_row,ll_rowcount,ll_rown,ll_sjbh,getrow,ll_count
ll_row=getrow()
if getrow=0 then return
ls_columnname=getcolumnname()
 choose case ls_columnname
 case "时间编号"
ll_rowcount=rowcount()
ll_rown=find("ll_sjbh",1,ll_row -1)+find("ll_sjbh",ll_row +1,ll_rowcount)
   if ll_rown>0 then 
    messagebox("提醒!","数据重复,请重新输入!")
   return 1
   end if
 end choose

select count(*) 
into :ll_count
from pk_kechengkaoshianpai
where 时间编号=:ll_sjbh and 班级=:ls_bj;
if ll_count>0 then
messagebox("提醒!","该班级在该时间已安排考试!")
end if

------华软网友回复------
这段看看能实现什么功能?

long ll_count,ll_i,ll_row,ll_sj
string ls_bj
ll_i=1
if dwo.name = "时间编号" THEN
ll_sj=dw_1.getitemnumber(ll_i,"时间编号")
ls_bj=dw_1.getitemstring(ll_i,"班级")
end if
select count(*) 
into :ll_count
from pk_kechengkaoshianpai
where 时间编号=:ll_sj and 班级=:ls_bj;
if ll_count>0 then
messagebox("提醒!","该班级在该时间已安排考试!")
end if

else
     dw_1.setitem(ll_row,"时间编号",ll_sj) 
     dw_1.setitem(ll_row,"班级",ls_bj) 
END IF
------华软网友回复------
高手帮助看看啊 实现不了啊。。。
------华软网友回复------
选中某行,由字段名“时间编号”统计出和该行字段名“班级”为相同数据(也就是统一个班级)的所有数据,再在里头检查时间编号是否相同,相同就messagebox报错,这个循环该怎么写?请指教,谢谢感动不尽。。。

如果把第二列中的“时间编号”2改成1的话就冲突了,messagebox报错就行

以下表:
时间编号 | 考场编号 | 教室名 |   班 级   | 考场人数 |  课  程   名
   1          1        F201     022015        30        高等数学
   2          2        D301     022015        29        大学英语      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。