MZ Platformデータベースアクセスチュートリアル

このチュートリアルはAP_DATA\Sampleフォルダ内のデータベースアクセス0~6.mzax を基に説明しています。

<事前準備>

1.MySQLデータベースの準備

このチュートリアルでは『工程管理システム簡易版アプリケーション』で使用している「production」というデータベースへの接続を例 に取上げています。
使用しているデータベース管理システムはMySQL というフリーのソフトウェアです。
工程管理システム簡易版を使用するには、まず、MySQL を導入する必要があります。
次のページを参考に、MySQLデータベースサーバーをインストールしてください。

参考:MZ Platform データベース接続>データベースの準備

2.MySQL Connector のインストール

MZ PlatformからはJDBC(データベースへアクセスするためのJava標準API)ドライバーを介してデータベースに接続します。
MySQLインストール時にJDBCドライバも一緒にダウンロードし、設定します。

3.MySQL内のデータの準備

  1. 作成するデータベース
    1. MySQLサーバー内に互いに関連性を持つ複数のテーブルを作成することができます。
      そのデータベースを「production」という名前を付けて作成します。
    2. 「production」の中に2つの「project」と「task」というテーブルを作成します。
      • 「primary Key (主キー)」とはテーブル内で行(レコード)を一意に特定するための項目です。
        重複データは許容されません。
      • 「auto_increment」はデータを追加すると自動的に採番され、一意のデータを割り当てることができま す。
      1. 「project」テーブル
      2. 列名 データ型 MZでのデータ型 NULLの許容 特記
        id int java.lang.Integer(整数) NO Primary Key, auto_increment
        label text 文字列 YES
        product text 文字列 YES
        delivery datetime 日付 YES
      3. 「task」テーブル
      4. 列名 データ型 MZでのデータ型 NULLの許容 特記
        isCompleted tinyint(1) 論理 YES
        dateEnd datetime 日付 YES
        dateStart datetime 日付 YES
        workingTime int java.lang.Integer(整数) YES
        projectLabel text 文字列 YES
        id int java.lang.Integer(整数) NO Primary Key, auto_increment
        process text 文字列 YES
  2. 設定されるデータ
  3. projectテーブルとtaskテーブルは受注番号(labelと projectLabel)において関係性があり、projectテーブルに登録された受注の工程の内容をtaskテーブルに格納します。
    1. projectテーブルのデータ例
    2. id label product delivery
      1 A01 A01 2023/11/11
      2 A02 A02 2023/12/12
    3. taskテーブルのデータ例
    4. isCompleated dateEnd dateStart workingTime projectLabel id process
      0 2023/11/08 12:00:00 2023/11/08 13:00:00 90 A01 1 めっき
      2023/12/05: 15:30:00 2023/12/05 18:00:00 150
      A02 2 検査
      ※「isCompleate」列はMySQL内に格納されるデータは「1」か「0」ですが、MZ Platfromでは「true」「false」のboolean型として取得できます。
      またデータ更新・挿入SQLも「””」で囲まない「true」「false」値で実行することができます。
  4. 設定方法
  5. MySQLコマンドラインから createコマンドでデータベースやテーブルを作成できますが、このチュートリアルでは幾つかのデータと共にデータベーステーブルを作成するbatファイルを実行しま す。
    ※「production」というデータベースが既に存在する場合上書きされてしまうので、注意してください。
    1. MZPlatform\4.0\AP_DATA\Production内の「dbsetup80.bat」ファイルをダブル クリックします。
    2. コマンドプロンプト画面が立ち上がります。
      パスワードを入力し、<Enter>キーを押します。
      「続行するには何かキーを押してください」というメッセージが表示されます。
      何かキーを押すと終了します。

    3. データベースとテーブルが作成され、データが追加されます。
  6. MySQLコマンドラインでの確認
    1. Windowsスタートメニュー>MySQL>MySQL 8.0 Command Line Clientを立ち上げます。
    2. パスワードを入力します。
    3. 「mysql>」と表示されている後ろに「use production;」と入力して[Enter]キーを押します。
    4. 「select * from project;」と入力して、[Enter]キーを押します。
    5. テーブルの内容が表示されれば、データが設定されています。

1.データベースを操作してみよう

1. データベース操作の手順を理解する

SQL データベースは、SQL(Structured Query Language)と呼ばれる問い合わせ言語を用いて、表とし て格納されたデータの操作を行うデータベース管理システムです。
ここでは、「表」をテーブル、表の「行」 をレコード、表の「列」をフィールドと呼ぶことにします。
SQL ではデータの取り出し(検索)、テーブル の作成、レコードの追加、削除、更新といった操作をサポートしています。
SQL の詳細に関しましては市販 の参考書をご覧下さい。
データベースの操作は、『データベースへ接続する』、『データベースを検索する(SQL 文をデータベース へ送信し結果を受信する)』、『データベースから切断する』、という手順で行います。
このレッスンでは、こ の手順を実現するため、『データベースアクセス』コンポーネントと次の複合コンポーネントを作成します。
・データベース接続フレーム
・データベース検索フレーム
データベースの接続と切断には、データベース接続フレームと『データベースアクセス』を、データベー スの検索には、データベース検索フレームと『データベースアクセス』を使用します。
このレッスンで作成 するアプリケーションの実行画面を下図に示します。 それでは順に複合コンポーネントを作成しながら、アプリケーションを構築していきましょう。

接続フレーム画面の作成

データベースにアクセスするため、[データベースアクセス]コンポーネントを用います。
データベースに接続するためのメソッドは『データベースに接続する(String, String, String,String) 』です。
このメソッドの各引数の意味は次のとおりです。
第1 引数:ドライバ名
第2 引数:データベースのURL(サーバ名 + データベース名)
第3 引数:ユーザ名
第4 引数:パスワード
( 各社データベースに接続する際の設定値については、「(参考) データベースアクセスコンポーネント
の引数設定」のページをご参照ください。)
はじめに、これらの情報を入力する複合コンポーネント[データベース接続フレーム]を作成しましょう。
コンポーネント追加
  1. ビルダー編集画面上で右クリック>[複合コンポーネント作成]>[コンポーネント]を選択し、複合コンポーネントを追加しま す。
  2. 複合コンポーネントをダブルリックして階層内に入り、以下のコンポーネントを追加します。
  3. コンポーネント名 必要数 カテゴリー コンポーネントキー/テキスト
    フレーム 1 画面構成部品>フレーム データベース接続
    ラベル 5 画面構成部品>テキスト ドライバ名
    サーバ名
    ユーザ名
    パスワード
    データベース名
    テキストフィールド 4 画面構成部品>テキスト ドライバ
    サーバ
    ユーザ
    データベース
    パスワード入力フィールド 1 画面構成部品>テキスト パスワード
    ボタン 2 画面構成部品>ボタン 接続
    切断
    文字列格納変数 1 処理部品>変数
  4. 複合コンポーネントのコンポーネント名称を「データベース接続フレーム」に変更します。
画面編集
  1. 右のDB接続情報画面図を参考にコンポーネントを画面配置し、ラベル名を変更します。
    テキストフィールドのコンポーネントキーもそれに合わせて変更 します。
  2. [フレーム]のタイトルを[データベース接続画面]に設定します。
  3. デー タベース接続>MySQLへの接続文字列を参考に、ドライバー名、サーバ名を入力します。
    • ドライバー名:com.mysql.cj.jdbc.Driver
    • サーバー名:jdbc:mysql://localhost/
    • ユーザー名:root 
    • パスワード:(MySQLインストール時に設定したもの)
    • データベース名:production 
      (後でサーバ名と結合し「jdbc:mysql://localhost/production」となります。 )
データベース接続画面例

接続フレーム内の処理の作成

接続処理設定

    [接続]ボタンが押されたときに、対応するテキストフィールド及びパスワード入力フィールドからテキストを取得し、『データベースアクセス』のメ ソッド『データベースに接続する(String, String, String,String) 』に設定すればよいのですが、注意が必要です。
    このメソッドの第1引数、第3引数、第4引数は対応するテキストフィールド又はパスワード入力フィールドから取得し設定すればよいのですが、 第2 引数(データベースのURL)は「サーバ名」+「データベース名」になります。
    従って、テキストをつなぎ合わせる処理が必要になります。
    この処理は『文字列格納変数』で行うことができます。
    [接続]ボタンが押されたときに、この処理が実行されるようにコンポーネント間を接続しましょう。
    上位の階層からも呼び出せるよう[サブルーチン]を先頭に処理を作成します。

  1. サーバー名とデータベース名の結合
  2. 文字列格納変数には2つの文字列を1つに結合する機能があります。
    画面ではデータベースのURLとデータベース名を別々の[テキス トフィールド]に記入しています。
    これを1つの「jdbc:/mysql//localhost/production」という文字列として利用できるようにします。
    1. 【接続1-1】文字列格納変数に文字列を設定します。
      サーバー名のテキストフィールドからテキストを取得します。
      テキストフィールドには「jdbc:/mysql//localhost/」という接続文字列を設定しておきます。
    2. 【接続1-2】文字列に二つ目の文字列を連結します。
      データベース名のテキストフィールドからテキストを取得します。

  3. イベントを伝播させる
  4. [フレーム]や[ボタン]のアクションイベントが[複合コンポーネント]外の階層に伝播し、処理が行われるように設定をします。
    各イベントの区別が付くように引数でイベント番号を指定します。
    1. 【接続2-1】フレームを閉じたとき、イベントを伝播させます。引数1にイベント番号として「0」を設定します。
    2. 【接続1-3】[ボタン(接続)]押したとき、イベントを伝播させます。引数1にイベント番号として「1」を設定します。
    3. 【接続3-1】[ボタン(切断)]押したとき、イベントを伝播させます。引数1にイベント番号として「2」を設定します。

    [編集画面図1]

  5. メソッドを公開する (メソッド公開方法:複合コンポ ーネント>メソッドの公開)
  6. 以下のメソッドを公開します。

    コンポーネント メソッド 変更メソッド名
    フレーム フレームを表示する() 同左
    フレーム フレームを閉じる() 同左
    テキストフィールド(ドライバ) テキストを取得する() ドライバ名を取得する()
    テキストフィールド(ユーザ) テキストを取得する() ユーザ名を取得する()
    パスワード入力フィールド パスワード文字列を取得する() 同左
    文字列格納変数 文字列を取得する() データベースのURL を取得する()
コ ンポーネント追加
  1. 上部階層に移動し、以下のコンポーネントを追加します。
  2. コンポーネント名 必要数 カテゴリー
    データベースアクセス 1 入出力>データベース
接続処理設定
  1. データベースの接続/切断

    1. 【接続1-1】「接続」ボタンを押したら、データベースに接続する
    2. [複合コンポーネント]のアクションイベントに[データベースアクセス]を接続します。
      引数0~3のドライバー名、サーバ名、ユーザ名、パスワードを[複合コンポーネント]のメソッド戻り値で設定します。
      イベント番号「1」を設定します。
    3. 【接続1‐2】「切断」ボタンを押したら、データベースとの接続を切断する
      イベント番号「2」を設定します。
      ※後でイベント番号「0」を設定するので、一緒に設定してもいいです。

  2. アプリケーションの開始/終了処理
    1. 【接続1-3】データベース接続フレームを閉じたら、アプリケーションを終了する
      イベント番号「0」を設定します。
    2. 【接続1-2】データベース接続フレームを閉じたら、データベースとの接続を切断する
      接続処理は変更せず、イベント番号「0」を追加で設定します。
    3. 【接続2-1】アプリケーション開始時にフレームを表示する
    4. 【接続3-1】アプリケーション終了時にフレームを閉じる

    [編集画面図2]

確認

それでは、[実行(設定可)]ボタンを押して、ここまで作成したアプリケーションを実行させ、データベースに接続してみましょう。
はじめに、ドライバ名、サーバ名、ユーザ名、パスワード、データベース名を入力します。
例えば、MySQL にJDBC ドライバを用いて接続する場合には、ドライバ名には“com.mysql.jdbc.Driver”、サーバ名には“jdbc:mysql://ホスト名/”と記入しま す。
MZ Platform と同じパソコンにMySQL がインストールされている場合、ホスト名は“localhost”と記入します。
ユーザ名、パスワード、データベース名には、それぞれデータベースインストール時に設定したものを入力します。
例えば、MZ Platform に添付のデータベース“production”をインストール済みの場合は、データベース名は“production”、ユーザ名とパスワードはデータベースインストール 時に設定した値を記入します。
この状態で、念のためアプリケーションを保存することをお勧めします。
それでは[接続]ボタンを押してみましょう。正しく接続された場合には、何も起こりません。
接続に失敗した場合、次のようなエラーダイアログが表示されます(他のダイアログが表示される場合もあります)。
このようなダイアログが出た場合には、ドライバ名、サーバ名、ユーザ名、パスワード、データベース名が正しく入力されているかもう一度確認して、 再度接続を試みてください。

このステップまでに作成したアプリケーションをインストールフォルダ内“AP_DATA\Tutorial”にファイル名“データベースアクセ ス1.mzax”として収録してあります。

2.データベースを検索する

データベースに接続ができましたので、今度はデータベースを検索してみましょう。
『データベースアクセス』コンポーネントでは次の手順で、検索を実行し結果を得ることができます。
検索実行:SQL 文(文字列)を引数としてメソッド『SQL 文を実行する(String)』を実行する
検索結果:テーブルデータがデータ生成イベントの内包データとして返ってくる

はじめに、検索を実行する複合コンポーネント「データベース検索フレーム」を作成します。

コンポーネント追加
  1. ビルダー編集画面上で右クリック>[複合コンポーネント作成]>[コンポーネント]を選択し、複合コン ポーネントを追加しま す。
  2. 複合コンポーネントをダブルリックして階層内に入り、以下のコンポーネントを追加します。
  3. コンポーネント名 必要数 カテゴリー コンポーネントキー/テキスト
    フレーム 1 画面構成部品>フレーム データベース検索
    テーブル 1 画面構成部品>テーブル
    パネル 1 画面構成部品>パネル
    テキストフィールド 1 画面構成部品>テキスト
    ボタン 1 画面構成部品>ボタン 実行
    イベント生成 1 処理部品>イベント
  4. 複合コンポーネントのコンポーネント名称を「データベース検索フレーム」に変更します。

画面編集 画面編集画面に入り、配置方法:「領域配置」でコンポーネントを配置します。
  1. [フレーム]上に[テーブル]を[領域配置]>[Center]に配置します。
  2. [フレーム]上に[パネル]を[領域配置]>[North]に配置します。
  3. 画面編集画面の左側のツリー図の[パネル]をクリックし、右側の領域を[パネル]の表示画面とします。
  4. [パネル]の上に配置方法:「横方向整列」で[テキストフィールド]と[ボタン]を配置します。
  5. 「実行(設定可)」ボタンで実行し、ボタン名を「実行」に変更します。

参考:基本操 作>画面編集>画面編集配置方法

データベース検索フレーム画面例

2.検索結果の設定

ここでは、[実行]ボタンが押されたときに、テキストフィールド(ID:3-4)に記述されたSQL 文を、「デー タ設定イベント」に内包させて、複合コンポーネント外部に伝播することにします。
ボタンから発生するイベ ントは「アクションイベント」ですので、「データ設定イベント」を生成しなければなりません。
任意のイベン トを生成するコンポーネントが[イベント生成]コンポーネントです。
「データ設定イベント」を生成するに はメソッド『データ設定イベントの発生(Object, int)』を用います。
第1 引数と第2 引数は次のとおりです。
第1 引数:設定データ(データ設定イベントに内包されるデータ)
第2 引数:イベント番号 [実行]ボタンが押されたときに、テキストフィールド(ID:3-4)に記述されたSQL 文を、「データ設定イベ ント」に内包し、複合コンポーネント外部に伝播するように、次のようにコンポーネント間を接続します。
また、フレームが閉じられたことを複合コンポーネントの外部に伝播するための接続も行っておきます。
ただ し、イベント番号は“0”に設定します。

接続処理設定 [複合コンポーネント(データベース検索フレーム)]内に以下の接続を作成します。
  1. [ボタン(実行)]を押したら、データ設定イベントを発生させ、複合コンポーネント外に伝播し ます。
    1. 【接続1-1】[ボタン(実行)]の接続先を[イベント生成]とし、イベントを発生させます。
      引数0に発生させるイベントとして「データ設定イベント」を指定します。
      引数1にイベント番号として「0」を設定します。
    2. 【接続2-1】[イベント生成]の発生イベントにデータ設定イベントを選択します。
      [複合コンポーネント(データベース検索フレーム)]を接続先とし、イベントを伝播させます。
      引数0に[テキストフィールド]からメソッド戻り値のテキストを設定します。
      引数1にイベント番号として固定値で「0」を設定します。
  2. [フレーム]のアクションイベントを伝播させます。
    1. 【接続3-1】[フレーム]のアクションイベントの接続先を[複合コンポーネント(データベース検索フレーム)]とし、イベントを伝 播させます。

    [編集画面図3]

  3. メソッドを公開する (メソッド公開方法:複合コンポ ーネント>メソッドの公開)
  4. 以下のメソッドを公開します。

    コンポーネント メソッド 変更メソッド名
    フレーム フレームを表示する() 同左
    フレーム フレームを閉じる() 同左
    テーブル テーブルデータを設定する(PFObjectTable) 同左
接続処理の作成
    [複合コンポーネント(データベース検索フレーム)]からのデータ設定イベントに 内包されているSQL 文を受け取り、この文字列を引数として[データベースアクセス]のメソッド『SQL 文を実行する(String)』を実行します。
    次に、検索実行時に[データベースアクセス]から発生するデー タ生成イベントに内包されるテーブルデータを[複合コンポーネントデータベース検索フレーム(ID:3)のテーブルに設定します。
  1. SQL文を実行する

    1. 【接続4-1】[複合コンポーネント(データベース検索フレーム)]の接続先を[データベースアクセス]とします。
      メソッド「SQL文を実行する(String)」を選択し、引数はイベント対象データを取得し設定します。
    2. 【接続5-1】[データベースアクセス]のデータ生成イベントに[複合コンポーネント(データベース検索フレーム)]を接続しま す。
      SQLが実行され、検索結果のテーブルデータが取得されると、データ生成イベントが発生するので、イベント内包のイベント対象データ を取得します。
  2. アプリケーションの開始/終了処理
  3. テーブルデータを行として追加します。
    「テーブルデータを設定する(PFObjectTable)」の処理は不要になります。
    1. 【接続6-1】データベース検索フレームを閉じたら、アプリケーションを終了する
      イベント番号「0」を設定します。
    2. 【接続2-2】アプリケーション開始時に、データベース検索フレームを表示する
    3. 【接続3-2】アプリケーション終了時に、データベース検索フレームを閉じる

    [編集画面図4]

確認 こ こま で作成 したアプリケーションを保存後、実行させて、検索を実 行してみます。 データベースに接続後、「SELECT * FROM project」と入力し(projectはデータベース production に存在するテーブル)、[実行]ボタンを押して検索を実行してみましょう。 次の図のように検索結果が表示されるか確認します。

注意!!! 

このステップまでに作成したアプリケーションをインストールフォルダ内“AP_DATA\Tutorial”にファイル名“データベー スア クセス 2.mzax”として収録してあります。
また、複合コンポーネントを用いないアプリケーション作成例についてもファイル名“データベースアクセス 0.mzax”として収録してあります。

注意:データベースの種類や設定によっては、検索結果に日本語が含まれる場合、文字化けする場合があります。
この場合、使用する文字コードを 指定することにより解決する場合があります。
MySQLの場合には、データベース接続フレームのデータベース名の欄に、使用する文字コードをデータベース名とともに“データベース 名?useUnicode=true& characterEncoding=SJIS”のように記述し、再接続します。
すなわち、データベースアクセスコンポーネントのメソッド「データベースに接続する(String, String, String, String)」の第2引数(データベースの URL)に“jdbc:mysql://ホスト名/データベース名?useUnicode=true&characterEncoding=SJIS”と設定され ることになります。
詳細は各データベ ースの解説書をご覧下さい。

複合コンポーネントを使用しなくても、ここまでのコンポーネントを全て上位階層 に置いて接続を作成することができます。
主な変更点は下図のとおりです。
例示のために「テーブルデータを設定する(PFObjectTable)」を実 行している箇所が2箇所ありますが、どちらか一方だけで動作するので不要な処理は[イベント番号設定]から「起動しない」を設定してくださ い。

3.データベース構造をツリー表示する

これまでの画面では、データベースがどのように構成され、どういうテーブルが存在するかわかりませんでした。
そのため、インストール時に覚えていたデータベース名とテーブ ル名を使用して検索を実行しました。
このステップではデータベースの構造がツリーで表示され、ツリー中のテーブル名をクリックしたときに、 データが自動的に表示される便利な機能を追加します。
『データベースアクセス』コンポーネントにはデ ータベースのツリー構造を得る便利なメソッドが用意されています。
そのメソッドは『getDatabaseTree()』です。

コ ンポーネント追加
  1. [複合コンポ―ネント(データベース検索フレーム)]に以下のコンポーネントを追加します。
  2. コンポーネント名 必要数 カテゴリー
    ツリー 1 画面構成部品>ツリー
画面編集
  1. 画面編集画面に入り、[フレーム]上に[ツリー]を配置します。
    配置方法:[領域配置]>[West]で[テーブル]の左側の領域に配置します。
接続処理設定
  1. メソッドを公開する (メソッド公開方法:複合コンポ ーネント>メソッドの公開)
  2. 以下のメソッドを公開します。
    コンポーネント メソッド 変更メソッド名
    ツリー ツリーデータを設定する 同左
  3. データベースに接続したときに、データベース内のフォルダ構成をツリー形式で取得する。
  4. 上位階層に移動します。
    1. 【接続1-4】[複合コンポーネント(データベース接続フレーム]のアクションイベントの接続先を[複合コンポーネント(データ ベース検索フレーム)]とします。
      データベースに接続したタイミングでツリーデータを[データベースアクセス]からメソッド戻り値で取得したいので、イベント番号「1」を 設定 します。

[編集画面図5] 【接続1-4】以外起動メソッド情報画面図省略

確認

データベース接続フレームの[接続]ボタンを押してデータベースに接続後、次の図のようにデータベースの構成が表示されるはずです。

ここまでの手順で作成したアプリケーションをインストールフォルダ内“AP_DATA\Tutorial”にファイル 名“データベースアクセス3.mzax”として収録してあります。

ここまでの状態でツリーのノードを開いてテーブル名をクリックしても何も起こりません。
このステップの後半では、テーブル名がクリックされた際にテーブルの内容を右側の[テーブル]に表示するようにします。
表示までにはいくつかの段階が必要です。
はじめに、[ツリー]がクリックされた際に、テーブル名を取得する必要があります。
またこの際、マウスクリックで自由にデータベースを変更できることから、データベースを指定しなおす必要があり、データベース名も同時に取得する 必要があります。次に、テーブル名から、このテーブルのデータ全体を取得するSQL 文を生成し(テーブル名が「project の場合」、「SELECT* FROM project」)、[データベースアクセス]で検索を実行する必要があります。

コ ンポーネント追加
  1. [複合コンポ―ネント(データベース検索フレーム)]に以下のコンポーネントを追加します。
  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    ツリーノード格納変数 1 処理部品>変数
    リスト格納変数 1 処理部品>変数
    文字列格納変数 3 処理部品>変数 データベース名
    テーブル名
    select文
    比較演算 2 処理部品>条件制御 要素数2以上
    要素数3以上
接続処理設定

ツリー(ID:3-7)のノードが選択されたとき、データ選択イベントが発生し ます。
このイベントには選択されたツリーのノードが内包されています。
このノードをツリーノード格納変 数(ID:3-8)に格納します。
ツリーノード格納変数を用いると、ノードのパス(ルートからこのノードに至るまでに通過するノードのリスト)をリストとして取得することができま す。
このリストの要素数が“2”以上であれば、このリストのインデクス“1”の要素としてデータベース名が取得でき、要素数が“3”以上であればイン デクス“2”の要素としてテーブル名も取得できます。
これらデータベース名、テーブル名を文字列格納変数(ID:3-12,3-13)にそれぞれ格納します。
リストの要素数の判定は、2つの比較演算(≧) (ID:3-10,3-11)にリストの要素数を設定して実行します。
文字格納変数(ID:3-14)を使用して、取得したテ ーブル名からSQL 文を作成し、イベント生成(ID:3-6)を介して外部に伝播し、データベースアクセス(ID:2) で検索を実行します。
このときのイベント番号は以前に設定したイベントと区別するため“1”とします。

  1. ツリーのノードが選択されたら、選択されたノードのパスを取得する
    1. 【接続4-1】[ツリー]のデータ選択イベントに[ツリーノード格納変数]を接続します。
      メソッド「ツリーノードを設定する(PFObjectTreeNode)」を選択し、イベント内包のイベント対象データを設定します。
    2. 【接続5-1】[ツリーノード格納変数]にデータが設定されたら、[リスト格納変数]に選択されたノードのパスを設定します。
  2. リストの要素数が2以上が判定します。
    1. 【接続6-1】[リスト格納変数]にデータが設定イベントに【比較演算(≧)(要素数2以上)]を接続し、リストの要素数が2以上 か比較します。
  3. リストの要素数が2以上の場合の処理を設定します。
    1. 【接続7-1】【比較演算(≧)(要素数2以上)]の処理完了イベントに[リスト変数]を接続し、要素位置「1」にあるデータベース名を取得します。
      要素数が2以上の時のみ処理が行われるように、イベント番号[1」を設定します。
    2. 【接続7-2】【接続7-1】で取得したデータベース名を[文字列格納変数(データベース名)]に格納します。
      イベント番号[1」を設定します。
  4. リストの要素数が3以上が判定します。
    1. 【接続7-3】【比較演算(≧)(要素数2以上)]の処理完了イベントに【比較演算(≧)(要素数3以上)]を接続し、リストの要素数が3以上 か比較します。
      イベント番号[1」を設定します。
  5. リストの要素数が3以上の場合の処理を設定します。
    1. 【接続8-1】【比較演算(≧)(要素数3以上)]の処理完了イベントに[リスト変数]を接続し、要素位置「2」にあるテーブル名を取得します。
      イベント番号[1」を設定します。
    2. 【接続8-2】【接続7-1】で取得したテーブル名を[文字列格納変数(テーブル名)]に格納します。
      イベント番号[1」を設定します。
  6. リストの要素数が3以上の場合、select文を発行します。
    1. 【接続8-3】[文字列格納変数(select文)]に雛形文の「select * from」を設定します。
      イベント番号[1」を設定します。
    2. 【接続8-4】テーブル名を取得し、select文と連結します。
      イベント番号[1」を設定します。
    3. 【接続8-5】[イベント生成]でデータ設定イベントを発生させます。
      引数0として[文字列格納変数(select文)]内の文字列を設定します。
      引数1のイベント番号として「1」を設定します。
      イベント番号「1」を設定します。

    [編集画面図6]

  7. メソッドを公開する
  8. また、外部から選択されたデータベース名を取得できるように、[文字列格納変数(データベース名)]のメソッドを公開します。

    コンポーネント メソッド 変更メソッド名
    文字列格納変数(データベース名) 文字列を取得する データベース名を取得する
接続処理の作成 上位の階層に移動します。
前のステップまではデータベース名が変更することが無かったので設定の必要がありませんでしたが、 ここでは現在選択されているデータベース名を[データベースアクセス] のメソッド『setDatabase(String)』を使用して設定します。
  1. データベース名を設定する

    1. 【接続4-2】[複合コンポーネント(データベース検索フレーム)]の接続先を[データベースアクセス]とします。
      メソッド「setDatabase(String)」を選択し、引数はイベント対象データを取得し設定します。
      イベント番号 「1」を設定します。
      ※接続処理をドラッグするか、[起動メソッド追加]時に【接続4-1】の[上]に追加されるように処理を設定します。
    2. 【接続4-1】既にイベント番号「0」が設定されている「SQL文を実行する(String)」の処理に、イベント番号 「1」を追加で設定します。

    [編集画面図7]   接続4-2以外起動メソッド情報画面図省略

確認

保存し、実行してみましょう。
ツリーのノードを選択した際にテーブルの内容が表示されます。
このステップまでに作成したアプリケーションをインストールフォルダ内“AP_DATA\Tutorial”にファイ ル名“データベースアクセス4.mzax”として収録してあります。
注意:MySQL を用いる場合、ツリーに「mysql」と言うデータベースが表示されます。このデータベース中の テーブルはMySQL が管理しているため、データの操作はお勧めできません。

4.応用

前のステップまでで機能的にはほぼアプリケーションが完成しました。
しかし、このままではデータベースのツリー表示において、データベース名やテーブル名等のノードをつかんで、他の場所に移動 できてしまいます。
しかし、データベースの実際の構造は変化していないわけですから、このようなツリーの操作に対して制限を設けなければなりません。

[ツリー]コンポーネントでは、このようなツリーの情報の変更前に「変更前イベント」として、処理要求イベントが発生する仕様になっており、その 接続先に論理値を戻り値として返すメソッドを設定しておけば、操作を制限することができます。
すなわち“true”が戻り値として返される場合には更新が実行され、“false”が返される場合には更新が無効となります。

[ツリー]において、制限できる操作項目は以下のとおりで、発生する処理要求イベントに対するイベント番号で区別されます。
  1. ツリーコンポーネントの制限可能操作とイベント番号

  2. 操作
    イベント番号
    ノードの更新 0
    ノードの追加 1
    ノードの削除 2
    ノードの移動 3
    ノードを開く 4
    ノードを閉じる 5
    コ ンポーネント追加
    1. [複合コンポ―ネント(データベース検索フレーム)]に以下のコンポーネントを追加します。
    2. コンポーネント名 必要数 カテゴリー
      論理値(Boolean)格納変数 1 処理部品>変数
    接続処理の作成
    1. ツリーノードの移動の制限のためのboolean値取得
      1. 【接続9-1】[ツリー]に処理完了イベントを追加し、[論理値(Boolean)格納変数]を接続先とします。
        メソッド「論理値(Boolean)を取得する()」を選択します。
        「ノードの移動」を意味するイベント番号「3」を設定します。
    2. メソッドを公開する
    3. コンポーネント メソッド 変更メソッド名
      論理値(Boolean)格納変数 文字列により論理値(Boolean)を設定する(String) ツリーノードの移動可否を設定する(String)

    [編集画面図8]   接続4-1の起動メソッド情報画面図省略

  3. 上位階層での設定
    1. 上位階層に移動します。
    2. ツリーノード移動制限の設定
      1. 【接続2-3】アプリケーション開始イベントに[複合コンポーネント(データベース検索フレーム)]を接続します。
        メソッド「ツリーノードの移動可否を設定する(String)」の値に「false」を設定します。
    [編集画面図9]   接続2-3の起動メソッド情報画面図以外省略

確認 これでツリー表示の設定が完了しました。
保存後に実行して、ツリーのノードの移動は制限されているか確認します。
ツリーと同様にテーブルの表示にも制限を加えることが可能です。
実際に画面上のテーブルのセルの値を変更しても、データベースのデータには変更が無いわけですから、このようなテーブルのセルの値の更新を制限し ましょう。
テーブルもツリーと同じように情報の変更前に「変更前イベント」として、処理要求イベントが発生する仕様になっています。
その接続先に論理値を戻り値として返すメソッドを設定しておけば、操作を制限することができます。
『テーブル』において、制限できる操作項目は以下のとおりで、発生する処理要求イベントに対するイベント番号で区別されます。
  1. テーブルコンポーネントの制限可能操作とイベント番号

  2. 操作
    イベント番号
    セルの更新 0
    1行更新 1
    1列更新 2
    単一行追加 10
    複数行追加 11
    単一列追加 12
    複数列追加
    13
    1行削除 20
    全「行削除 21
    1列「削除 22
    全列削除 23
    全行全列削除 24
    コ ンポーネント追加
    1. [複合コンポ―ネント(データベース検索フレーム)]に以下のコンポーネントを追加します。
    2. コンポーネント名 必要数 カテゴリー
      論理値(Boolean)格納変数 1 処理部品>変数
    接続処理の作成
    テーブルの操作を制限する処理を追加します。
    [複合コンポーネント(データベース検索フレーム)]の編集画面に移動します。
    ここで操作の可否を格納するコンポーネントとして、ツリーと同様に『論理値(Boolean) 格納変数』を追加します。
    テーブルのセルの更新ですから、次のようにコンポーネント間を接続します。
    1. テーブル操作制限のためのboolean値取得
      1. 【接続9-1】[ツリー]に処理完了イベントを追加し、[論理値(Boolean)格納変数]を接続先とします。
        メソッド「論理値(Boolean)を取得する()」を選択します。
        「テーブルセルの更新」を意味するイベント番号「0」を設定します。
    2. メソッドを公開する
    3. コンポーネント メソッド 変更メソッド名
      論理値(Boolean)格納変数 文字列により論理値(Boolean)を設定する(String) テーブルセルの更新可否を設定する(String)
    [編集画面図10]   

  3. 上位階層での設定
    1. 上位階層に移動します。
    2. テーブル操作制限の設定
      1. 【接続2-4】アプリケーション開始イベントに[複合コンポーネント(データベース検索フレーム)]を接続します。
        メソッド「テーブルセルの更新可否を設定する(String)」の値に「false」を設定します。
    [編集画面図11]   接続2-3の起動メソッド情報画面図以外省略

確認 これでテーブル表示の設定が完了しました。
保存後に実行して、テーブルセルの更新は制限されているか確認します。

5.終了処理

終了時に[ツリー]と[テーブル]、[テキストフィールド]をクリアします。
また、必ず[データベース]からの切断をしておきます。

コ ンポーネント追加
  1. [複合コンポ―ネント(データベース検索フレーム)]に以下のコンポーネントを追加します。
  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    サブルーチン 1 処理部品>サブルーチン 終了処理
接続処理の設定
  1. 画面をクリアする
    1. [複合コンポ―ネント(データベース検索フレーム)]内に以下の設定を行います。
      [サブルーチン(終了処理)]のアクションイベントに以下の設定をします。
    2. 【接続11-1】接続先を[テキストフィールド]とします。
      メソッド「テキストを設定する(String)」で空の文字列を設定します。
    3. 【接続11-2】接続先を[テーブル]とします。
      メソッド「全行列を削除する()」を行います。
    4. 【接続11-3】[ツリー]とします。
      メソッド「removeAllNode()」を行います。
    5. 【接続11-4】接続先を[ツリー]とします。
      ルートノードを取得するために、メソッド「getNodeByID(int)」を行います。
    6. 【接続11-5】[テーブル]とします。
      メソッド「setNodeText(String,PFTreeNode)」を行います。
      引数0には空文字、引数1には[接続11-4]のメソッド処理の結果を設定します。
  2. メソッドを公開する
  3. コンポーネント メソッド 変更メソッド名
    サブルーチン(終了処理) 処理を呼び出す() 終了処理を呼び出す()
[編集画面図12]

上位階層に移動して、アプリケーション終了イベントに接続処理を設定します。
  1. 終了処理を行う
    1. 【接続3-3】アプリケーション終了イベントの接続先に[複合コンポーネント(データベース検索フレーム)]を設定します。
      メソッド「終了処理を呼び出す()」を設定します。
    2. 【接続3-4】[データベースアクセス]を接続先とし、「データベースとの接続を切断()」します。
[編集画面図13]