複数のフィールドを持つデータ書き込みを確認

  • 作成者:ayuan0625
  • 編集回数:13次
  • 最終更新:FRInternational 于 2021-12-20
  • 一.概要

    1.機能

    帳票の書き込みにおいてデータを入力するとき、書き込まれたデータがデータベースに存在しないように確保するために、2つ以上のフィールドを介してデータの一意性を検証します。

    2.実現方法

    帳票の設計では、検証しようとする複数のフィールドを1つのフィールドに結合し、データベース内の対応するフィールドに対しても同じ方法で結合します。書き込み属性においてビルトイン書き込み検証式が設定し、結合後のフィールドが重複しているか検証します。重複があれば、ユーザにアラートメッセージを送り、書き込みを遮断します。

    二.例示

    次の例において、製品名と単価を共同主キーとして使用して、書込値がデータベースの既存データと重複しているかを判断します。

    1.データ準備

    データセットds1を新規作成します。SQL文:select *,(ProductName||ProductUnitPrice)as aa from Products

    (ProductName||ProductUnitPrice)とは、製品名と単価を1つのフィールドにつなぎ合わせることを意味します。この文法はSQLiteデータベースに適しており、MySQLなど他のデータベースは、データベースのマニュアルをご確認ください。

    01.png

    2.テンプレートの設計

    1.下図のとおりにテーブルを設計し、セルA2~G2にテキストウィジェットを追加します。

    セルH2に式:CONCATENATE(B2, C2)を挿入します。これは、書き込むときにセルB2とC2の内容をつなぎ合わせることを意味します。

    02.png

    2.フロントエンドで書き込むときに複数の行を追加できるように、A2セルの展開方向縦方向に設定する必要があります。

    03.png

    3.フロントエンドで複数のレコードを追加する場合、新しい行にはH2セルの式を保持されるため、H2セルの行の挿入方式元の値に設定する必要があります。

    04.png

    4.H2セルは重複データの判定にのみ使用され、表示する必要がないため、設定後にH列を非表示にすることができます。

    05.png

    3.書き込み属性の設定

    テンプレート-帳票書き込み属性-書き込みをクリックし、ビルトインSQLを追加し、下図の示すように、書き込み属性を設定します。

    06.png

    テンプレート-帳票書き込み属性-データ検証をクリックし、ビルトイン検証を追加し、下図の示すように、検証式を設定します。

    数式: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.プレビュー

    帳票を保存し、書き込みプレビューをクリックし、データベースと重複している製品名と単価を入力すると、データ検証の際にエラーメッセージが表示されます。

    07.gif

     


    Attachment List


    Theme: FineReport データ書き込み
    既に最初
    既に最後
    • Helpful
    • Not helpful
    • Only read