• 判断画布中有重复纪录


    临时表解决:

    情景:输入条码,需要从一数据源A表查询数据,将查询结果显示在基于line表的block上面。

    假设BLOCK是基于表line,然后新建临时表line_tmp,并新建唯一索引。

    item:barcode 和 indate,其中barcode是条码,indate是条码之后紧接的一个item。

    新增数据 :

    barcode(post-change):

    先将条码匹配的数据查询出来,insert于line_tmp;

    indate(when-new-item-instance):

     这个触发器每刷一次条码就会触发一次,且紧接着barcode(post-change)。

     从line_tmp查询数据,然后一行一行copy到block上。

    在block级的post-insert或update后,delete临时表line_tmp数据。

    更改数据:

    首先查询出block数据,在post-query将block数据装入临时表。

    重复上面新增数据的步骤。


     以下转载

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

  • 相关阅读:
    ios 适应屏幕
    用于重新编译的工具和命令
    SSRS 的简单使用(二)
    SSRS 的简单使用(一)
    优化SqlServer--数据压缩
    优化SQLServer——表和分区索引
    关于tempdb的一些注意事项
    关于事务的隔离级别和处理机制的理解
    SQL Server中的锁的简单学习
    sqlserver还原数据库失败,sql2008备份集中的数据库备份与现有的xxx数据库不同
  • 原文地址:https://www.cnblogs.com/liuweicong39/p/2530677.html
Copyright © 2020-2023  润新知