> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# データベース チェックルール

> ABBYY FlexiCapture の Database Check ルール を使用して、抽出したfield値をデータベースと照合します。完全一致またはあいまい検索、データ セット、主キーを使用できます。

field値のデータベース チェックでは、認識されたfield値をデータベーステーブル内の値と比較します。抽出されたfield値がデータベース内の値の中に見つかった場合、チェックに合格します。そうでない場合、このルールはエラーを返します。

このルールを使用すると、抽出した値に対応するエントリがデータベース内に存在するかどうかを確認したり、fieldにタイプミスや誤りがあってもデータベース内であいまい検索を実行したり、field値をデータベース内の対応するrecordに置き換えたり、データベース内の特定の値をドキュメントのfieldにコピーしたりできます。

<div id="creating-a-database-check-rule">
  ## データベース チェック ルールの作成
</div>

データベース チェック ルールを作成するには、次の手順を実行します。

1. field プロパティ ダイアログ (field を右クリックしてショートカットメニューを開き、**Properties...** を選択) または Document Definition Properties ダイアログ (Document Definition エディターのメニューで **Document Definition →** Document Definition Properties... を選択) を開きます。
2. **Rules** タブに移動します。
3. **New Rule...** ボタンをクリックします。
4. ルールの型の一覧から **Database Check** を選択し、**OK** をクリックします。
5. ルール名を入力します。
6. 必要に応じて、**Show rule name in message to verifier** オプションを無効にします。このオプションを無効にすると、エラー メッセージは「ルール名: エラー メッセージ」ではなく「エラー メッセージ」として表示されます。
7. ルールの[重大度](/ja/flexi-capture/templates/rules#severity)を指定します。
8. 必要に応じて、このルールを適用する条件を指定します (既定では、ルールは無条件で適用されます) 。詳細については、[ルールの適用条件](/ja/flexi-capture/templates/rules#launchconditions)を参照してください。
9. ルールのタグを指定します。
10. 必要に応じて、**Enabled rule** オプションを無効にします。ルールは作成されますが、このオプションがユーザーによって有効になるまで適用されません。
11. **Next >** をクリックします。
12. 型と接続パラメーターを指定して、データ ソースへの接続を設定します。
    次のデータ ソースがサポートされています:

* **External Database (Simple)** 外部データベースへの接続は、Document Definition の各ルールごとに設定されます。
  * **External Database (Variable)** 外部データベースへの接続は、プロジェクトのプロパティ (**Project Properties → Environment Variables**) でのみ設定されます。この型のデータ ソースは、複数のルールで同時に使用できます。プロジェクトで別のデータベースを使用する場合、接続設定を変更する必要があるのはプロジェクトのプロパティだけです。
  * **データ セット** データ セットへの接続は、Document Definition のプロパティ (**Document Definition Properties → Data Sets**) でユーザーが設定します。
    **Tip.**  OLE DB Provider には、次のものを選択することをお勧めします:
  * SQL にエクスポートする場合は、OLE DB Provider for ODBC Drivers を使用してください
  * Oracle にエクスポートする場合は、Oracle Provider for OLE DB を使用してください (詳細については、[Oracle データベースへのエクスポート](/ja/flexi-capture/templates/export-bd#export-to-oracle)を参照してください)
    **Note:** データベースへの接続時に毎回パスワードを入力しないようにするには、**Allow saving password** オプションを選択するか、接続時にパスワードが不要になるようにデータベースを設定します (たとえば、Windows 認証を使用できます)。

13. ドロップダウンリストから必要なスキーマとデータベース テーブルを選択するか、データ セット型のソースへの接続を設定している場合は必要なデータ セットを指定します。
    **Note:** スキーマとして **Find in all schemas** が選択されており、指定したテーブルが既定のスキーマに含まれていない場合、次のエラー メッセージが表示されることがあります:
    \[Microsoft]\[ODBC SQL Server Driver]\[SQL Server]Invalid object name K1. \[Microsoft]\[ODBC SQL Server Driver]\[SQL Server]Statement(s) could not be prepared.
    このエラー メッセージが表示された場合は、そのテーブルを含むスキーマ名を明示的に指定する必要があります。
14. 比較対象の fields に値がない場合にルール チェックを省略するには、**Don't check if all fields are empty** オプションを選択します。これにより、ルールの検証が高速化されます。
15. Document Definition 内の fields とデータベース内の fields の間のリンクを設定します (以下の **Specifying fields to compare** を参照) 。
16. **Add...**、**Edit...**、**Delete** ボタンを使用して、fields 間のリンクを追加、編集、または削除します。
17. ソースとして **データ セット** を選択した場合は、**Field where to save record ID** ドロップダウンリストから、[主キー](/ja/flexi-capture/templates/rule-bd#primarykey)として機能する field を選択できます。

<Warning>
  A データ セット may be accessed directly from the データ フォーム via a control of type "Button". To add a button to the データ フォーム, select **Form → Insert Control → Button** in the Document Definition editor. When you add a button to the data from, the **Properties** dialog box opens. Click the **Format** tab, select **Database Lookup** in the **Type** drop-down list, and then select a previously created database check rule.
</Warning>

<div id="specifying-fields-to-compare">
  ### 比較するfieldの指定
</div>

**Rule Settings** タブの **Field links** グループでは、すでに設定されているfieldの比較を確認できます。データベース チェック ルールは、単一のfieldに対しても、[複数のfieldのセット](/ja/flexi-capture/templates/rule-bd#data-set)に対しても設定できます。

比較するfieldsを追加または変更する場合は、次の項目を指定する必要があります。

* **Document field** データベースのfieldと比較する Document Definition のfield
* **Database field** document field と比較するデータベース内のfield
* **Search** 比較の種類を指定します。
  * Exact document field の値は、データベースfieldの値と完全に一致している必要があります (ただし、検索では大文字と小文字は区別されません)
  * Fuzzy document field の値は、データベース内の値と部分的に一致していてもかまいません。この種類の比較に使用できるのはテキストの fieldのみです。

あいまい検索では、最も近い一致が見つかります。つまり、一致させるために追加、削除、または置換する文字数が最小の単語です。許容エラー数は元の単語の長さによって異なります。あいまい検索で一致する値が複数見つかった場合、Operator には次のエラーメッセージが表示されます: Too many records found. このエラーメッセージには、データベース内の近い一致の一覧も表示されるため、Operator はその一覧から正しい値を選択できます。

次の追加オプションを使用できます。

* **Don't search if field is empty** field が空の場合、その値はデータベース内の値と比較されません。

* Enter value from database あいまい検索でデータベース内に一致する値が見つかった場合、次の条件ではその値を自動的にfieldに入力できます。
  * field 内の値とデータベース内の値が異なる
  * field が空である。
    **注:** 完全一致検索では、Enter value from database オプションを選択しても意味はありません。2 つの値は同一になるためです。

* **Allow empty values in database** データベースチェックの結果や他の設定に応じて、このオプションの意味は次のようになります。
  * データベースfieldが空で、document field が空でない場合、field の値とデータベースの値は同一と見なされます
  * データベースfieldが空で、document field が空でなく、**Fill from database** が選択されている場合、空のデータベース値はfieldに入力されません。

## <a id="data-set" /><a id="primarykey" />データ セットの主キー

プロジェクトにデータ セット (外部データベースのローカル コピー) が含まれており、ドキュメントの処理時にそこから field 値を取得したい場合は、データベース チェック ルールを使用して、データ セット内のrecordの主キー (一意の identifier) となる field を指定できます。

これを行うと、データ フォーム上のデータはデータ セット内のデータに対応付けられます。recordを選択すると、すべての field にデータ セットの値が入力されます。データ フォーム上の値は編集できなくなります。編集しようとすると、次のいずれかの操作を行うよう求めるダイアログが表示されます。

* データ セットから別のrecordを選択する
* 既存のrecordを編集する

recordの追加または編集用ダイアログは、field を右クリックし、shortcut menu の \[Edit Data Set Record...] または \[Add Data Set Record...] をクリックして開くことができます。

入力済みの field のデータを **Delete** key を押して削除すると、そのルールに関連する他のすべての field のデータも削除されます。

変更を適用すると、ルールが再度チェックされます。

**主キーの動作**

1. ルールの対象となるすべての field で \[Enter value from database] オプションが有効になっている必要があります。この場合、主キーとして機能する field に値が入っていれば、プログラムは他の field の値を検索せず、代わりにデータベースの値をそれらの field に入力します。
2. 主キーとして機能する field に値が入っていない場合、プログラムは、**Field Link** ダイアログ ボックスで比較対象の field を指定したときに \[Search] オプションが有効になっていた他の field を調べます (上記の **比較するフィールドの指定** を参照) 。これらの field に対して一意のrecordが見つかると、データベースの値が使用されます (上記 1. と同様) 。

これで、ユーザーはすべての変更を受け入れるか、データ セットから別のrecordを選択するかを決めるだけで済みます。

**主キーを機能させるには、次の条件を満たしている必要があります。**

* ソースとして データ セット が選択されていること。
* データ セットで主キーが指定されていること。つまり、field に対して \[Primary key] オプションが有効になっていること。
* 主キーとして使用される field が、\[Rule Settings] タブの \[Field links] リストに含まれていないこと。

[ABBYY FlexiCapture for Invoices](/ja/flexi-capture/invoice-reader/ir-title-topic) セクションには、データ セットの詳細情報と、サンプル プロジェクトでの使用方法の説明があります。

[Using vendor and business unit databases](/ja/flexi-capture/invoice-reader/ir-db-connection)\*.\*を参照してください。

[Looking up vendors and business units in the database](/ja/flexi-capture/invoice-reader/ir-data-set-using)を参照してください。

<div id="doing-a-database-check-for-a-set-of-fields">
  ### 一連のfieldに対してデータベース チェックを行う
</div>

この場合、プログラムは一連のfieldの値に対応する一致文字列をデータベースから検索し、その一連のfield内の各値は、見つかった文字列の異なるcolumnに関連付けられます。

次の例を考えてみましょう。

document fieldである Fa、Fb、Fc を、次のようにデータベースのcolumnである Ta、Tb、Tc に関連付けます。

* **Fa** fieldの値が **Ta** の値と**完全に**一致する
* **Fb** の値が **Tb** の値と**あいまいに**一致する
* 指定された条件が満たされると、**Tc** fieldの値が **Fc** fieldにコピーされる

<Frame>
  <img src="https://mintcdn.com/abbyy/mpS3pcxC_lkohQUS/images/flexi-capture/Sample_compare_fields.png?fit=max&auto=format&n=mpS3pcxC_lkohQUS&q=85&s=6e3f73fad0506e7af76357ba805204b4" alt="document field a、b、c をデータベースのcolumn Ta、Tb、Tc と比較する図。1 つのデータベース行で TRUE の一致が成功した例と、異なる行にまたがって FALSE の一致が失敗した例を示しています。" width="387" height="461" data-path="images/flexi-capture/Sample_compare_fields.png" />
</Frame>

プログラムが、**Ta** columnの値が **Fa** fieldの値と完全に一致し、かつ **Tb** columnの値が **Fb** fieldの値とあいまいに一致するデータベース文字列を見つけた場合、データベース チェックは成功します。この文字列の **Tc** columnの値は **Fc** fieldにコピーされます。

そのような文字列が見つからない場合、たとえばプログラムが異なる文字列内で Ta = Fa と Tb = Fb を見つけたとしても、ruleはエラーを返します。

<Note>
  完全一致／あいまい一致／混在一致、自動入力なし、field数の指定なしなど、さまざまな組み合わせが可能です。
</Note>
