LibreOffice Baseのプログラミング。 パート2

パート2では、データベーステーブルとフォームの関係について説明します。 特に、2つのテーブル間の関係を定義し、ドロップダウンリストのデータソースとして「参照テーブル」を使用する方法。



このメッセージが関連するOpenOfficeおよびLibreOfficeのバージョン3.0〜6.2(LibreOfficeの現在のバージョン)。 バージョン3.0以降、OpenOffice Baseはデータベースファイル(拡張子.odb)にスクリプトを保存できるようになりました。これにより、OO Basicマクロコードの配布が便利になります。



OpenOffice Baseのフォームには多少の混乱があります。 実際、オフィススイートからデータベース環境へのソフトウェアの進化の過程で、Forms、Forms、Forms、およびFormsは少し異なることがわかりました。 そして、フォームはフォームだけではありません。 詳しく説明します。



OpenOffice Baseデータベースを編集モードで開くと、画面の左側に4つのブックマークが表示されます。 ロシア語版では、次のように聞こえます





この意味で、フォームは別のウィンドウで実行される独立したアプリケーションです。 また、これは実際にはOpenOffice Writerインスタンスが起動されるウィンドウであることにも注意してください。



ご注意 フォームは実際にはOpenOffice Writerのインスタンスであるため、OpenOffice WriterでOpenOffice Baseコンポーネントをロードせずにアプリケーションを作成できます。



各フォームには、フォームオブジェクトのフォームのコレクションがあります。 最初は、このコレクションは空です。 それにもかかわらず、フォームを開いたり閉じたりできます。 テキスト情報も表示します。 そして、新しいコントロール(たとえばButton)を追加するときにのみ、その時点でそのようなオブジェクトを自分で作成していない場合、システムはデフォルト名FormでFormオブジェクトを作成します。



[フォーム]ナビゲーター(パレットにコンパスとして表示)から新しいフォームを作成するのが最も便利です。これは[表示] | [ツールバー] | [フォームナビゲーション]メニューからも呼び出すことができます。 フォームオブジェクトは、Formsコレクションの最上位、または別のFormオブジェクトの下位に作成されます。 これはフォームの外観には影響しませんが、テーブル間の関係を定義するときに役立ちます。



スクリーンショット
画像





ここで、Formオブジェクトの1つの異常に注意する必要があります。 このオブジェクトは、主にデータベーステーブルまたはSQLクエリに関連付けられたオブジェクトです。 FormはResultSetオブジェクトと考えることができます(実際の方法です)。 一方、フォームは、HTMLドキュメントのFORMのようなコントロールのコンテナです(これも同様です)。



新しく作成したフォームを編集モードで開きます(マウスの右ボタン|編集)。 その中に、Formという名前または好きな名前で新しいFormオブジェクトを作成します。 このForm要素で、子Form要素を作成します。



各フォームは、既存のデータベーステーブル、クエリ、またはSQLクエリに関連付ける必要があります。 スレーブフォームでは、メインフォームの関連フィールドの値がマスター/スレーブとしてフィルター処理されたデータが反映されるようにルールを設定できます。 これを行うには、従属フォームのプロパティエディターで、リンクマスターフィールドとリンクスレーブフィールドのプロパティを入力します。



次に、フォームナビゲータで対応するフォームを選択して、各フォームにテーブルコントロール要素を追加します>。 テーブルコントロール要素は、利用可能な要素のパネルにはありません。 要素パレットに要素の展開リストを表示するには、[その他のコントロール]ボタンをアクティブにします。 テーブルコントロール要素を追加した後、この要素の編集モードに入り、テーブルの表示に必要な列を追加する必要があります(マウスの右ボタン->列の挿入/置換/削除)



2番目のタイプは、テーブル間(マスター/スレーブの後)で頻繁に発生する関係のタイプであり、これを考慮します-ディレクトリタイプの関係。 GUIDオブジェクトのキーであるautoincrementをデータテーブルに格納し、表示されたテーブルに、リンクテーブルから取得したフルネーム「参照」を表示します。 これには便利なメカニズムがあります。 ビジュアルテーブルデザイナで、リストボックスタイプの列を追加します。 キーが表示される(名前ではなく)数値/テキストタイプの列が既に作成されている場合、そのタイプをリストボックスに変更することができます(右クリック|置換|リストボックス)。 次に、列のプロパティリストを編集します。 [データ]タブで、[リストコンテンツの種類]プロパティを[SQL]に設定します。 List Contentプロパティのクエリには、最初の列に表示された値が含まれている必要があり、Bound Fieldプロパティはキーフィールドを持つ列のインデックスです(最初の列のインデックスが0であると仮定)。 つまり、大部分のクエリでは、このタイプのクエリでは1になります



SELECT USERNAME, USERID FROM USERS ORDER BY USERNAME
      
      





これまで、プログラミングなしのコンフィギュレータモードでの操作について説明しました。 OO Basicマクロで機能を追加します。



テキストボックスに入力した値でデータベーステーブルのフィルターを作成します。 これを行うために、OO Basic言語で、キーボードからのイベントを処理するプロシージャを作成します。



  Sub TextBox_onKeyUp(oEvent) oDocument = ThisComponent oDocument.LockControllers sText = oEvent.Source.text if Len(sText) > 3 Then oForm = ThisComponent.Drawpage.Forms.getByName("MyForm") oForm.Filter = "USERNAME LIKE '" + sText + "%'" oForm.reload() End If oDocument.UnlockControllers End Sub
      
      





この手順を、テキストフィールドのキーリリースイベント(要素のプロパティリストのイベントタブ)に関連付けます。 oForm.reload()を再ロードしてもキーボードから入力された現在の値が「無効化」されないように、このテキストフィールドは別のフォーム(フィルターがスーパーインポーズされるフォームではない)に配置する必要があることに注意してください。



継続する。



All Articles