MySQL とエンドユーザー
MySQL は非常に強力なデータベースだが、エンドユーザー向けのフロントエンドは持たない。そこで今回は、LibreOffice を用いたエンドユーザー向けのフロントエンドの作成方法を紹介しようと思う。
※ ここで紹介しているのは LibreOffice ですが、兄弟ソフトである OpenOffice とも殆ど同じです。また、LibreOffice は非常に多くのプラットホームでリリースされており、Linux だけではなく Mac OS X や Windows でも利用可能です。
※ ここでの方法は、MariaDB に対しても有効です。
インストール
まずは『ソフトウェアの追加と削除』から『LibreOffice Base』をインストールします。
※ Fedora22 からは DNF を用いてインストールを行います。詳しくはコチラをご覧下さい。

『libreoffice-base』と入力した後『検索』ボタンを押して表示し、『適応』ボタンでインストールします。
次に MySQL 用の JDBC をインストールします。(MariaDB に対しても MySQL コネクタを利用します。)パッケージ名:『mysql-connector-java』

『libreoffice-base』と入力した後『検索』ボタンを押して表示し、『適応』ボタンでインストールします。
コレは MySQL とアプリケーション(LibreOffice Base)を接続する為に用います。
LibreOffice の設定
LibreOffice Calc を起動し、 メニュー『ツール』>『オプション』を選択します。

ダイアログが表示された後、左側のペインで『Java』を選択し、『クラスパス』ボタンを押します。
※ 新しいバージョンでは、『Java』ではなく『詳細』になっている様です。

※ もしも JRE がインストールされていないのであれば、 『ソフトウェアの追加と削除』から『 Java』をインストールして下さい。

『アーカイブを追加』ボタンを押し、 パスを入力します。
※ Fedora では「/usr/share/java/mysql-connector-java.jar」にインストールされます。
LibreOffice Base の設定
「LibreOffice Base」を起動し、データベースの指定などを行います。
※ このページで作成したデータベースを利用します。
(データベース作成SQL)

LibreOffice Base を直接起動した場合、データベースウィザードが表示されます。

『既存のデータベースに接続』を選択し、『MySQL』(MariaDB の場合でも)を指定します。

『JDBC (Java Database Connectivity)を使って接続』を選択します。

『データベース』及び『サーバー』を指定します。
※ その他の項目はデフォルト値が設定されています。
※ ネットワーク上の別のサーバーを指定する場合は、そのサーバーでファイヤーウォールなどの設定が正しく行われている必要があります。 ココを参照。

MySQL の接続『ユーザー名』を指定します。
※ 接続アカウントには、接続可能なクライアントの指定が正しく行われている必要があります。詳しくはココを参照。
※ 接続アカウントに『root』を使用することは、セキュリティ上の問題があります。接続専用の MySQL アカウントを作成した方が安全です。

ここで『完了』を押せば、データソースとして保存する事になります。
※ 保存されたデータソースは、「LibreOffice Calc」などでも利用することができます。例)データベースの値を利用してグラフの作成など。
フォームの作成
次の構造を持つデータベースに対するフォーム作成を行います。

左側『データベース』ペインの『フォーム』を選択し、『ウィザードを使用してフォームを作成』を選びます。


『テーブルまたはクエリー』で対象のテーブルを選択します。この時、クエリーを利用すればテーブルの結合結果の閲覧などにも利用できますが、データ変更などに制限が発生する場合があります。

サブフォームを追加する場合は、リレーションを利用/指定する必要があります。外部キーが指定されている場合は利用することが可能ですが、その他のインデックスを利用する場合は、リレーションを指定する必要があります。(今回はサブフォームは利用しません)

コントロール(入力項目など)の整列方法を指定します。

フォームの入力モードを指定します。

フォームの外観を指定します。

フォーム名を指定します。 この時、『フォームの変更』を選んでおき、『完了』ボタンを押します。
フォームが表示された状態でまず、ID の部分を右クリックします。

『グループ化』>『グループ解除』を選択し、ラベルと入力エリアを分離します。
分離されたラベル部分だけをダブルクリックします。

ここで、『タイトル』を変更すると、ラベルを変更する事が出来ます。
次に、入力エリアをダブルクリックします。

ここで、『読み取り専用』を『はい』に変更します。この項目は自動採番のプライマリキーに対する項目ですので、この様に変更しています。
そして、その他のラベルを変更後に保存し、フォームを起動すると次の様になります。

このフォームを用いて、データの変更/削除などが行えるようになります。
また、作成済みのフォームでも、フォームを選択した状態で右クリックすると、後からでも変更出来ます。
今度は、参照型のプルダウンを作成してみます。(使用したフォームは addressBook.address に対するモノです)

編集モードでリストボックスのアイコンをクリックし、リストボックスを配置します。(配置対象は addressBook.address.personId です。)

配置したリストボックスをダブルクリックし、『データ』タブを表示します。
- データフィールド … 対象となるテーブルの項目名を入力。
- リスト内容の種類 … Sql を指定。
- リストの内容 … SQL 文を入力。
- 関連のあるフィールド … 『データフィールド』に設定される SELECT 文の項目番号。(開始:0)
上記の例では、「concat( id, ”, lastName, firstName )」が一覧として表示され、「id」が値として「personId」に設定されます。
実行例:

次は ENUM 型の様にマスターテーブルを持たないプルダウンを作成してみます。(配置対象は addressBook.person.sex です。)

配置したリストボックスをダブルクリックし、『データ』タブを表示します。
- データフィールド … 対象となるテーブルの項目名を入力。
- リスト内容の種類 … 『値リスト』を指定。
- リストの内容 … ENUM 値を入力。( Shift+Enter で複数項目を入力)
『全般』タブを表示します。
- リストの項目 … リストとして表示される項目。( Shift+Enter で複数項目を入力)
上記の例では、「男」「女」が一覧として表示され、「male」か「female」が値として「sex」に設定されます。
作成したサンプルのダウンロード

総評
今回の方法は、フォームと SQL だけで入力フォームを作成していましたが、ダイアログやマクロ(BASIC または Python)を用いれば、エンドユーザー向けのアプリケーションを作成する事も可能です。また、LibreOffice Calc との連携も可能な上、マルチプラットホームである利点も存在します。
※ マクロやダイアログの開発ツールも LibreOffice に含まれています。
本格的なアプリケーションではなく、低予算の内部向けツールとして作成する場合には重宝します。一度試してみては如何でしょうか?
※ Linux 版以外の LibreOffice を入手するにはコチラから行えます。
※ LibreOffice のマクロについて詳しく知りたい場合は、Google で「libreoffice マクロ 入門」 と検索するようにしてください。


