聯立多欄位校驗是否與資料庫中資料重複

1. 概述

1.1 問題描述

使用者在填報報表中錄入資料時,希望可以透過兩個或多個欄位來驗證資料的唯一性,確定填入的資料在資料庫中不存在。

1.2 解決思路

報表設計時將需要校驗的多個欄位連接起來作為一個欄位,然後對資料庫中的相應欄位也做同樣連接處理。填報屬性中設定內建提交校驗公式,驗證這兩個連接起來的欄位是否一致,如果一致則代表資料重複。

2. 範例

以下範例用產品名稱和單價作為聯合主鍵,來判斷輸入值是否和資料庫中已有資料重複。

2.1 資料準備

建立資料集 ds1,輸入 SQL 查詢語句:select *,(產品名稱||單價) as aa from S產品

(產品名稱||單價)表示將產品名稱與單價連接成一個欄位。該文法適用於Sqlite資料庫,其它資料庫的連接文法可百度查詢。

1723453711162106.jpg

2.2 設計範本

1)如下圖設計表格,A2~G2 儲存格新增正文元件。

H2 儲存格插入公式:CONCATENATE(B2, C2),表示在填報時將 B2 和 C2 儲存格的填入的內容連接在一起。

1723453771562451.jpg

2)為了前端填報時可以新增多條記錄,需要設定 A2 儲存格縱向擴展,如下圖所示:

1723453849204095.png

3)前端新增多條記錄時,需要新增的列保留 H2 儲存格中的公式,所以要將 H2 儲存格的插入欄策略設定為原值,如下圖所示:

1723454245753352.png

4)H2 儲存格僅用於判斷重複資料,不需要展示,所以設定完成後可以隱藏 H 欄。

1723454304852159.jpg

2.3 填報屬性設定

點選範本>報表填報屬性>提交」,新增一個內建SQL,按下圖所示設定填報屬性

1723454382391947.jpg

點選範本>報表填報屬性>資料校驗」,新增一個內建校驗,按下圖所示設定校驗公式:

公式為:INARRAY(H2,if(COUNT((ds1.group(aa)))>1,ds1.group(aa),ARRAY(ds1.group(aa))))=0,含義為取出 ds1 中連接好的aa 欄位作為一個陣列,之後遍歷判斷每一行的 H2 是否在陣列中存在,存在的話就是重複資料。

公式解譯:

公式說明
ds1.group(aa)對 ds1 中的 aa 資料欄資料分類匯總,當個數為 1 的時候,回傳值為字串;>1 傳回陣列
ARRAY(ds1.group(aa))將 ds1.group(aa) 匯總的資料轉換為陣列格式
if(COUNT((ds1.group(aa)))>1,ds1.group(aa),ARRAY(ds1.group(aa)))如果匯總後資料個數<1,將字串轉換為陣列
INARRAY(H2,if(COUNT((ds1.group(aa)))>1,ds1.group(aa),ARRAY(ds1.group(aa))))傳回 H2 中連接的聯合主鍵在已有資料陣列中的位置,如果不存在傳回 0

1723454653642953.png

2.4 效果查看

1)PC 端

儲存報表,點選填報預覽,輸入與資料庫中重複的產品名稱和單價,資料校驗時會提示報錯資訊。

动画2.gif

2)行動端

同時支援 App 端和 H5 端,效果如下圖所示:
1723513303871008.gif

3. 已完成範本

附件列表


主題: 填報應用
  • 有幫助
  • 沒幫助
  • 只是瀏覽
中文(繁體)

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

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

不再提示

9s后關閉

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

反馈已提交

网络繁忙

反饋已提交

網絡繁忙