熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

[范例]怎樣判斷畫布中有重復記錄(Forms 6i)

2013-11-13 15:47:28  來源: Oracle 

  最完美的解決方法自己編寫代碼可以產生精確的報錯信息及檢查出新輸入數據內的重復問題
  
  由於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
From:http://tw.wingwit.com/Article/program/Oracle/201311/17307.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.