最完美的解决方法自己编写代码可以产生精确的报错信息及检查出新输入数据内的重复问题 由于whenvalidateitem 不能使用go_item()first_record等而whennewiteminstance却允许所以可以这样处理 以基本表(id主键name remark行每页界面) 在id(主键)的下一导航项设置为check_uniqueness_button check_uniqueness_button为这个块内的一个按钮它的whennewiteminstance担任检查该行的重复情况的功能代码见本贴附录 另外手工按check_uniqueness_button也会执行这段代码产生手工检查重复情况的功能 附录代码 declare temprecord number; tempval varchar(); temp_count number :=; BEGIN go_item(base_tableid); temprecord := :systemcursor_record; tempval := :base_tableid; first_record; if :systemcurrent_value is not null then 如果有记录开始运算 loop if :base_tableid = tempval and :systemcursor_record <> temprecord then temp_count := temp_count + ; message(代码有重复请检查第 || :systemcursor_record || 行代码:|| :base_tableid ||名称: ||:base_tablename); message(代码有重复请检查第 || :systemcursor_record || 行代码:|| :base_tableid ||名称: ||:base_tablename); end if; next_record; if :systemcurrent_value is null then exit; end if; end loop; if temp_count = then message(该行代码没有重复); end if; go_record(temprecord); go_item(base_tablename); else message(光标所有行没有代码为空请先将光标放在有数值的地方); message(光标所有行没有代码为空请先将光标放在有数值的地方); end if; END; 附录 check_record_uniqueness 可以检查一个数据块(Data Block)内主键有无重复的记录 使用方法举例 Block 上先设定一个item是主键 在主键字段的 whenvalidateitem trigger 上加入如下代码 check_record_uniqueness; if not form_sucess then clear message; message(数据有重复!); end if; 以上代码可以使用户每输入一条记录时系统自动检查主键有无重复 优点速度快代码简单 缺点只能应用于主键 最致命的缺点经测试后我发现它只能检查新输入的数据与已存盘的数据有无重复如果新输入的记录与未存盘的记录重复它不会报警! 使用建议 只可用于比较简单的场合及用户每次输入的资料数目比较少的情况如果用户大批量输入如每次输入几十条甚至上百条使用check_record_uniqueness便会心惊胆跳了因为谁也不能保证 新输入的数据内会否有重复 如果不是应用于主键如果每次用户输入量可能比较大建议自行编写查重复的代码 本文为原创by armok |