目次
索引 🔎︎

# データ

データ タブでは、フォームの関連データベースを参照するフォーム属性を指定します。

フォームの基になるデータソースを指定できるほか、ユーザーによるデータの編集を許容するかどうかを設定可能です。並べ替え機能とフィルター機能に加えて、サブフォームを作成するために必要なすべての属性が提示されます。

このコマンドの見つけ方

Open context menu of a selected form element - choose Form - Data tab.

Open Form Controls toolbar or Form Design toolbar, click Form icon - Data tab.

## SQLコマンドの解析

LibreOffice で SQL ステートメントを分析するかどうかを指定します。 「はい」に設定した場合、「内容」 リストボックスの隣の 「...」 ボタンをクリックできるようになります。 このボタンをクリックすると、データベースクエリーを図式で作成できるウィンドウが開きます。 ウィンドウを閉じると、作成したクエリーの SQL ステートメントが 「内容」 リストボックスに挿入されます。

## コンテンツ

フォームで使用する内容を指定します。内容は、既存のテーブルまたはクエリー (以前にデータベース内で作成したもの) を指定できるほか、SQL ステートメントで定義することもできます内容を入力する前に、内容の種類 で種類を指定する必要があります。

内容の種類 で「テーブル」または「クエリー」のいずれかを選択すると、このボックスには、選択したデータベース内で設定されているすべてのテーブルとクエリーの全リストが表示されます。

## サイクル

Tab キーを使ったナビゲーションの方法を指定します。 Tab キーを押すと、フォーム内で次の項目に移動できます。Shift キーを押しながら Tab キーを押すと、反対方向にナビゲーションします。最後 (または最初) のフィールドで Tab キーを押した場合の動作はさまざまです。次のオプションでキーの動作を制御します。

オプション | 意味
標準 | このように設定すると、既存のデータベースリンクにアクセスするサイクルが自動的に定義されます。フォーム内にデータベースリンクが存在する場合、タブキーで最後のフィールドを終了すると、次あるいは前のレコードに移動します (「すべてのレコード」参照)。データベースリンクがない場合、次あるいは前のフォームに移動します(現在のページ参照)。
すべてのレコード | このオプションはデータベースフォームのみに適用されます。すべてのレコードをナビゲートする場合に、このオプションを使用します。フォームの最後のフィールドで Tab キーを使って移動すると、現在のレコードが変更されます。
現在のレコード | このオプションはデータベースフォームのみに適用されます。現在のレコード内をナビゲートする場合に、このオプションを使用します。フォームの最後のフィールドで Tab キーを使って移動すると、現在のレコードが変更されます。
現在のページ | フォームの最後のフィールドからTab キーを使って移動すると、カーソルが次のフォームの最初のフィールドに移動します。これは、HTML フォームの標準動作です。したがって、このオプションは特に、HTML フォームでの使用が想定されています。

## データだけを追加

ここで、フォームが新しいデータの追加だけを許可するか(はい)、あるいはこの属性に限定しないのか(いいえ)を指定します。

データのみ追加 を「はい」に設定した場合、データの変更または削除が不可能になります。

## データの削除

データを削除できるかどうかを指定します。

## データの変更

データを変更できるかどうかを指定します。

## データの追加

データを追加できるかどうかを指定します。

## データソース

フォームで参照するデータソースを指定します。... ボタンをクリックすると、データソースを選択できる 開く ダイアログが開きます。

## データソースの種類

データソースとして既存のデータベーステーブルかクエリーを使用するか、あるいは SQL ステートメントに基づいてフォームを作成するかを選択します。

「テーブル」あるいは「クエリー」を選択すると、フォームは、内容 で指定するテーブルまたはクエリーを参照します。新しいクエリーまたはサブフォームを作成する場合は、「SQL」オプションを選択する必要があります。SQL クエリーの文またはサブフォームは、コントロール属性のデータタブページの リストの内容 ボックスに直接入力できます。

## ナビゲーションバー

下段に表示されるフォームバーのナビゲーション機能の使用を許可するかどうかを指定します。

「親フォーム」オプションはサブフォームに使用します。 このオプションをサブフォームで選択した場合、カーソルがサブフォーム内にあるときにはメインフォームのレコードを使ってナビゲートできます。 サブフォームは 1 対 1 の関係で親フォームにリンクされているので、ナビゲーションは常に親フォームで行われます。

## フィルター

フォーム内のデータをフィルターするために必要な条件を入力します。フィルターの指定方法は、WHERE 句を除いた SQL 規則に従います。 たとえば、「Mike」という名前を含むレコードをすべて表示する場合は、データフィールドに Forename = 'Mike' という条件を入力します。また、Forename = 'Mike' OR Forename = 'Peter' のように条件を組み合わせることもできます。この 2 つの条件のいずれかに一致するレコードがすべて表示されます。

フィルター機能は、ユーザーモードで フォームナビゲーション バーのオートフィルター アイコンと デフォルトフィルター アイコンから使用できます。

## リンク元

サブフォームを作成する場合は、親フォームとサブフォーム間の同期処理を行う親フォームのデータフィールドを入力します。複数の値を入力するときは、各入力行のあとに (Shift) + (Enter) キーを押します。

サブフォームは SQL クエリー、正確に言えばパラメータークエリーに基づいています。リンク元 ボックスにフィールド名を入力した場合、メインフォームのそのフィールドのデータが読み取られ、リンク先 に入力する必要のある変数に変換されます。適切な SQL 文で、この変数と、サブフォームの参照先であるテーブルデータとの比較が行われます。または、リンク元 ボックスに列名を入力することもできます。

その際、以下の例を参考にしてください。

フォームがベースとするデータベーステーブルが、たとえば、各顧客を一意的な番号で表示した、すなわちデータフィールド「顧客_ID」を有する顧客データベース(「顧客」)であるとします。１人の顧客の注文は、他のデータベーステーブルで管理しています。このフォームに入力する各顧客に関して、その注文も表示するには、サブフォームを作成し、リンク元 に、顧客を一意的に識別できる顧客データベースのデータフィールド、すなわち「顧客ID」を入力します(カギかっこは入力しません)。リンク先 に、顧客ID フィールドのデータを取り込む変数の名前、たとえば、「x」を入力します。

サブフォームには、各顧客 ID(Customer_ID -> x) に該当する適切なデータが注文テーブル ("Orders") から表示されるはずです。この動作が可能なのは、注文テーブル内で各注文が単一の顧客に一意に割り当てられている場合に限られます。また、別のフィールド Customer_ID を使用することもできます。ただし、このフィールドとメインフォームの同じフィールドを混同しないように、このフィールドには Customer_Number という名前が付けられています。

例えば、次の SQL ステートメントで x 変数を使用して、「Orders」テーブルの Customer_Number を「Customers」テーブルの Customer_ID と比較できます。

SELECT * FROM Orders WHERE Cust_No =:x (サブフォームに Orders テーブルのすべてのデータを表示させる場合)

あるいは、

SELECT Item FROM Orders WHERE Cust_ID =:x (テーブル Orders のサブフォームにフィールド Item のデータだけを表示する場合)

SQLステートメントは、データソース で入力するか、あるいはサブフォームを作成するパラメータークエリーを作成します。

## リンク先

サブフォームを作成する場合、親フォームフィールドの値を格納できる変数を入力します。 サブフォームに基づくクエリーの場合には、クエリーで定義した変数を入力します。データソースフィールドに入力した SQL ステートメントを使用してフォームを作成する場合には、ステートメント内で使用した変数を入力します。任意の変数名を選択できます。複数の値を入力する場合は、(Shift) ＋ (Enter) キーを押します。

リンク元 で、上位フィールドとして、たとえば、データベースフィールド「顧客 ID」を入力した場合、リンク先 で、データベースフィールド「顧客 ID」の値を読み出す変数名を指定します。この変数を使って、データソース ボックスに SQLステートメントを入力する場合、当該値がサブフォームに表示されます。

## 並べ替え

フォーム内でデータをソートする条件を指定します。ソート条件の指定方法は、ORDER BY 句を除いた SQL 規則に従います。 たとえば、あるフィールドを昇順、別のフィールドを降順にして、データベース内の全レコードをソートする場合は、「Forename ASC, Name DESC」(Forename と Name は、それぞれデータフィールドの名前です) と入力します。

ユーザーモードでは、フォームナビゲーション バーの該当するアイコン、昇順のソート、降順のソート、ソート を使ってソートを行うことができます。

## サブフォームとは何か。

フォームは、データベーステーブルあるいはデータベースクエリーを基に作成されます。データを表示できるようにすれば、新しいデータを入力したり、フォームを基にしたデータベーステーブルあるいはデータベースクエリーに保存されている既存のデータを変更するのに役立ちます。

テーブルかクエリー内のデータを参照し、さらに別のテーブルのデータを表示するフォームが必要な場合は、サブフォームを作成すべきです。 たとえば、別のデータベーステーブルのデータを表示するテキストボックスとしてこのサブフォームを使用できます。

サブフォームは、メインフォームの「追加コンポーネント」に他なりません。このメインフォームを、「上位フォーム」または「マスター」と呼んでいます。1 つのフォームで 2 つ以上のテーブルにアクセスする場合に、サブフォームが必要になります。その他の各テーブルにも、それぞれ 1 つのサブフォームが必要です。

フォームの作成後に、フォームをサブフォームに変更できます。変更するには、デザインモードに入り、「フォームナビゲーター」を開きます。「フォームナビゲーター」で、(サブフォームに変更する) フォームを (マスターフォームにする) 別のフォーム上にドラッグします。

ドキュメントのユーザーからは、フォームにサブフォームがあることはわかりません。ユーザーからは、データが入力されているドキュメント、または既存のデータが表示されているドキュメントのみ見えます。

マスターフォーム内のデータフィールドのリンク元を指定します。サブフォームでは、リンク元の内容に対応するフィールドとして、リンク先を設定できます。

ユーザーがデータをナビゲートするとき、フォームには常に現在のデータレコードが表示されます。サブフォームが定義されている場合、サブフォームの内容は約 200 ミリ秒の短い遅延をおいて表示されます。このような遅延により、マスターフォームのデータレコードを素早く参照することができます。遅延の制限内に次のマスターデータレコードにナビゲートすれば、サブフォームのデータを取得、表示する必要がなくなります。