反饋已提交

網絡繁忙

資料庫自增長ID填報

一、概述

1
問題描述。
  1. 資料庫自增長 ID 填報是指在 FineReport 範本中進行資料填報的時候,不需要設定和綁定 ID 資料欄。在往資料庫中插入資料的時候,資料庫會自動為每筆資料生成一個增量的ID。

2
實現思路。
  1. 自增長 ID 的實現主要依賴資料庫的設定,需要先在資料表中建立對應的自增ID欄位。具體建立方式每種資料庫可能會有差別,可以在Google搜尋相關資料。

  2. 本文將簡單介紹幾種常見資料庫的自增 ID 設定方式。

注:使用者也可透過安裝【序列號函式插件】,實現生成序列號。主要用於填報生成主鍵功能。

       該插件無需依賴資料庫的型別,方便報表切換資料庫,在任意資料庫都可以使用。

       詳情請參見:序列號函式插件

二、SQL Server 資料庫

  1. 在 SQL Server 資料庫中,提供了標識,可以透過設定標識、標識種和標識增量來實現 SQL Server 主鍵的自增長。

1
自增長ID設定。
  1. 假設在 SQL Server 資料庫中存在下面一張資料表,我們需要將其 ID 欄實現自增長,就可以在欄屬性中設定是標識,修改標識增量和標識種,如下圖所示。

  2. 也可以使用 SQL 語句來建立,【identity(1,1)】指定 ID 由 1 開始,每次增長 1。

create table KHK (
id int identity(1,1) primary key,
kh varchar(20)
)

2
範本製作。
  1. 建立資料連結:建立一個資料連結,連結至該資料庫,建立資料連結的方法詳細請參照 B03-05 權限設定-資料連結

  2. 範本設定:建立一張範本,新增資料集【SELECT * FROM dbo.[KHK]】。在範本設計主體頁面第一列分別新增兩個文字元件和一個 插入列 的按鈕元件,並在第三列中將資料欄拖曳至對應儲存格中,如下圖1。

  3. 填報屬性設定:點選【範本】→【報表填報屬性】,增加一個【內建 SQL】,如下圖2。

注:如果只有新增資料的需求,那麼不需要綁定自增id欄位,否則提交可能會報錯【當 IDENTITY_INSERT 設定為 OFF 時,不能為表 'KHK' 中的標識欄插入顯式值】。

3
效果預覽。
  1. 點選【填報預覽】,在 Web 端進行資料填報,如下圖1所示。

  2. 在 KH 標題下面的元件中插入2筆資料,點選【提交】按鈕,將資料提交入庫,重新整理頁面,可以看到下圖2藍色區域部分多了 2 筆資料,即剛剛填報資料的資料,並且 ID 欄也進行了自增長。

三、Oracle 資料庫

1
自增長ID設定。
  1. 在 Oracle 資料庫中,提供了序列的功能,可以透過 Oracle 的序列及觸發器,實現主鍵的自增長。

  2. 建立序列。

    CREATE SEQUENCE seq_name -- 盡量使用統一前綴命名,方便管理    
        INCREMENT BY 1   -- 自增步長 這裏設定為 1  
        START WITH 1     -- 計數起點 這裏設定為 1  
        NOMAXVALUE       -- 不設定最大值 可選項 MAXVALUE|MINVALUE  
        NOCYCLE          -- 一直累加,不循環    
        CACHE 10;   -- 如果追求效率 可設定快取 如果在 Oracle 當機或者斷電等非正常中斷服務的情況 可能會造成序列不連繼續的情況出現,如果不使用緩存,則這裏寫NOCACHE
  3. 建立觸發器。

    CREATE OR REPLACE TRIGGER TRG_name  --觸發器名稱  
    BEFORE INSERT ON "tbl_name" -- 在向 tbl_name 表插入資料之前觸發  
    FOR EACH ROW-- 表示該觸發器為一個列級觸發器  
    BEGIN -- 觸發器開始 -- 以下代碼表示觸發器的行為  
     SELECT seq_name.nextval INTO :new.ID FROM dual ; -- seq_name.nextval傳回的是序列的下一個值, 將該值設為新值插入到 tbl_name 表中的主鍵列 tbl_id 中去.  
    END ; -- 觸發器結束

2
範本實現。
  1. 其範本實現與 SQL Server 資料庫一緻,這裏不再贅述。

四、常見問題

1
問題現象。
  1. 使用資料庫自增長 ID 進行資料填報時,可能會發生下圖所示報錯:當 IDENTITY_INSERT 設定為 OFF 時,不能為表 'KHK' 中的標識欄插入顯式值。

2
問題原因。
  1. 出現該報錯原因是,自增長ID的機制是插入資料時,自動給這筆資料一個編號,而不需要人為填入。這時候如果在填報屬性中給這個自增長欄位綁定了值,那麼就會導緻上述的沖突報錯。例如下圖所示,id為自增長欄位,給id綁定了值就會出現報錯。

3
解決方案。
  1. 方案一(適用於只需要新增資料,無更新和刪除需求的場景)。

    移除填報屬性中的自增長 ID 欄位。

  2. 方案二(適用於需要同時實現新增,更新和刪除需求的場景)。

    將以下的內容寫入記事本檔案中,並將檔案另存為insertIgnoreColumn.properties,put 命令【%FR_HOME%\WEB-INF\resources】資料夾下。該檔案作用為在新增資料時,忽略掉自增長id欄位。檔案內容為:【KHK.ignoreColumns=id】。

  3. 說明:KHK:填報資料的資料表名稱,需要按照實際場景修改。

    ID:自增長 ID 的欄位欄名稱,需要按照實際場景修改。

注:如果有多個資料表需要使用自增長 ID,那麼直接在此配置檔案中換欄寫入即可。新增或修改配置檔案都需要重啓web伺服器才會生效。

附件列表


主題: 填報應用
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙