一.概要
1.機能
帳票の書き込みにおいてデータを入力するとき、書き込まれたデータがデータベースに存在しないように確保するために、2つ以上のフィールドを介してデータの一意性を検証します。
2.実現方法
帳票の設計では、検証しようとする複数のフィールドを1つのフィールドに結合し、データベース内の対応するフィールドに対しても同じ方法で結合します。書き込み属性においてビルトイン書き込み検証式が設定し、結合後のフィールドが重複しているか検証します。重複があれば、ユーザにアラートメッセージを送り、書き込みを遮断します。
二.例示
次の例において、製品名と単価を共同主キーとして使用して、書込値がデータベースの既存データと重複しているかを判断します。
1.データ準備
データセットds1を新規作成します。SQL文:select *,(ProductName||ProductUnitPrice)as aa from Products。
(ProductName||ProductUnitPrice)とは、製品名と単価を1つのフィールドにつなぎ合わせることを意味します。この文法はSQLiteデータベースに適しており、MySQLなど他のデータベースは、データベースのマニュアルをご確認ください。
2.テンプレートの設計
1.下図のとおりにテーブルを設計し、セルA2~G2にテキストウィジェットを追加します。
セルH2に式:CONCATENATE(B2, C2)を挿入します。これは、書き込むときにセルB2とC2の内容をつなぎ合わせることを意味します。
2.フロントエンドで書き込むときに複数の行を追加できるように、A2セルの展開方向を縦方向に設定する必要があります。
3.フロントエンドで複数のレコードを追加する場合、新しい行にはH2セルの式を保持されるため、H2セルの行の挿入方式を元の値に設定する必要があります。
4.H2セルは重複データの判定にのみ使用され、表示する必要がないため、設定後にH列を非表示にすることができます。
3.書き込み属性の設定
テンプレート-帳票書き込み属性-書き込みをクリックし、ビルトインSQLを追加し、下図の示すように、書き込み属性を設定します。
テンプレート-帳票書き込み属性-データ検証をクリックし、ビルトイン検証を追加し、下図の示すように、検証式を設定します。
数式: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を返します。 |
4.プレビュー
帳票を保存し、書き込みプレビューをクリックし、データベースと重複している製品名と単価を入力すると、データ検証の際にエラーメッセージが表示されます。