AiSee データベース使用の
Windows アプリ作成マニュアル
【発展編】
この資料では、データベース(以下 DB)を使用した AiSee アプリを作成するための操作説明を行います。 実際に DB
使用のアプリを作る手順を追いながら、DB への接続方法や、シナリオ作成方法を紹介します。記載する内容は、「AiSee
Windows アプリ作成例」を見ながら、既に簡単なアプリが制作できるようになった方を想定しています。
2.1 <1 つ目> CSSample プロジェクト
こちらから DL してください
User 欄に名前、Value 欄に年齢を入力し Add ボタンを押すと、テーブルに情報が格納され
表示される、シンプルなプロジェクトです。同時に DB にも名前と年齢のデータが追加されます。
Del ボタンを押すと、選択した行のレコードがテーブルから削除され、DB 上からも消えます。
<TopPanel>
下図は連動する DB です。DB 内のテーブル名が「UserInfo」で、「UserID」「Value」「Password」の 3 つのカラムがあります。
Password のカラムは、AiSee の画面上からは見えない、DB 上だけに存在するデータです。逆に、上の図
では No1〜6 の番号がありますが、この情報は表示上だけのもので、DB には格納されていません。
<DB 内のデータ>
2.2 <2 つ目> AiSeeSample プロジェクト
以下の Calculation 画面で計算を行い、「閉じる」を押すと、CalcTable 画面に結果が追加されます。
同時に、計算結果は DB にも追加されていきます。入力データの追加の他、DB 上にあるデータを表示、削除、修正できる
アプリです。
※前資料にあたる「AiSee_Windows アプリ作成例」の内容と同様のアプリです。
作成済みのアプリにDB の内容を追記していくような形で今後の文章は説明しています。
<Calculation>
<CalcTable>
下図は連動する DB です。DB 内のテーブル名が「Keisan」で、「No」「第一項」「演算子」「第二項」「結果」の 5 つのカラムがあります。
DB の「No」のカラムの情報は、AiSee の画面上では見えませんが、サイズ 0 の隠れたテーブルが作られており、そこに格納されています。また、上の図では No1〜5 の番号がありますが、この情報は表示上だけのもので、データは DB に格納されていません。
(DB と AiSee のカラム名が両方「No」ですが、連動しておらず別のデータが入っています。)
<DB 内のデータ>
2.2.1 このアプリの仕組み
@「CalcTable」が現れる (DB にあるデータが表示されている状態)
A「CalcTable」の追加ボタンを押すと「Calculation」が現れる
B「Calculation」の計算式の部分に数字を入力し、計算ボタンを押すと、下に計算結果が表示される
C「Calculation」の閉じるボタンを押すと「Calculation」に入力してあった数字、演算子、計算結果が
「CalcTable」に追加され、表示される
D同時に、DB 内のテーブルに計算の内容が格納される
Eアプリを閉じ、再度開くと、DB にある内容が「CalcTable」へ初期表示される
※上記が完了しましたら、修正ボタンや削除ボタンへの機能の追加も順を追って試行します。
アプリの開発から確認まで、全ての作業フェーズを紹介します。
開発環境設置
⚫ 開発環境及びソフトをインストールする
NetBeans 及び JDK をインストールする
※インストールについては本資料では省略します。
アプリの画面設計作業
⚫ NetBeans を利用して、アプリの画面を作成する
※本資料では省略、アプリの画面は事前準備されています。
アプリの開発作業
AiSee のウインドウズ開発ツール(IDE)で、下記の手順を行う
⚫ プロジェクトを作成する
⚫ アプリ画面の Jar ファイルを登録する
⚫ シナリオを作成する
⚫ イベントを定義する
⚫ メニューを定義する
DB の導入
⚫ SQLite と DB Browser をインストール
⚫ DB Browser で「〇〇〇.db」ファイルを作成
⚫ 「〇〇〇.db」ファイル内に DB テーブルを作成
⚫ DB との接続、挿入、更新、削除、検索、切断等のシナリオを作る
デバッグ
⚫ 起動設定を行う
⚫ テスト実行して画面動作を確認する
<リレーショナルデータベースのイメージ図>
4.1 AiSee における DB の使用方法
基本的な DB を使用した大まかなフローは以下の通りです。
以降の章では具体的な例を見ながら実際に作成していきましょう。
この章では1つ目のアプリ例として「CSSample」というプロジェクトを作成します。
今回は、以下のような DB のテーブル(SampleDB.db)を事前に準備し、このテーブルに AiSee アプリ
からデータを書き込んだり、データの検索や削除ができるようにシナリオを作成します。
テーブルの名前が「UserInfo」で「UserID」「Value」「Password」の 3 つの列(カラム)を作成済です。
※DB ファイルを新規作成する場合、作成方法はリンクをご参照ください。
5.1 DB へデータを追加する
ここでは「Add」ボタンを押すと、入力した内容が DB に追加され、アプリのテーブルにも表示されるというシナリオを作成します。
(1)AiSee のプロジェクト下の「リソース定義」下へ作成済の DB ファイルを登録します
@リソース定義を右クリック
Aリソースを登録をクリック
B事前にダウンロードした「 SampleDB.db 」を選択→開くをクリック
(2)シナリオ作成
手順 1:リソース定義フォルダパスを取得する
手順 2:リソース定義フォルダパスに DB ファイル名を結合して DB ファイルパスを作成する
手順 3:データベースへのコネクションを作成して返す
手順 4:挿入マップを作成する
手順 5:データベースを挿入する
手順 6:データベースをコミットする
手順 7:データベースのコネクションを切断する
※詳しい手順は、上記の「手順〇」よりリンク先を参照してください
マップとは…
Map は、高速でキーを検索するデータの集まりです。Map の要素へのインデックスは、"キー" と呼ばれます。キーは、関連するデータの "値" と共に Map 内に格納されます。Map の各要素は、1 つの一意のキー
とそれに対応する値を含みます。
次のの Map に、8 月を表す文字ベクトルでインデックスを付けると、その月に内部的に関連する値 37.3
が作成されます。
手順 1:リソース定義フォルダパスを取得する
(ISeeが管理するプロパティを取得して返す)
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
手順 2:リソース定義フォルダパスに DB ファイル名を結合して DB ファイルパスを作成する
(文字列を結合して返す)
@パラメータをセットする
No.2 のところに定数「/SampleDB.db」と入力します
※任意で用意した場合はそのファイル名を入力する部分です。
デバック時に「DB が見つからない」等 DB 接続のエラーが出てしまう場合には Q&A もご参照ください。
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
手順 3:データベースへのコネクションを作成して返す
@パラメータをセットする
No4 のところを左クリック→右の欄から「SQLITE」を選択
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
※コネクションとはデータベースにアクセスするチャンネルのようなもの。
パラメータ定義の No3 と No4 にのみ上記変数を挿入することで OK
手順 4:挿入マップを作成する
(マップを作成して返す。初期値の指定が可能。)
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
※挿入マップを作成することでデータベースとシナリオを紐づけることができる。
手順 5:データベースを挿入する
(データベースのテーブルへ、カラム名と内容のマップを用いて挿入する)
@パラメータをセットする
A登録
手順 6:データベースをコミットする
(トランザクションをコミットする)
@パラメータをセットする
A登録
手順 7:データベースのコネクションを切断する
@ パラメータをセットする
A登録
<追加のリレーション全体像>
5.2 DB 内に保存されたデータを表示する
ここでは、アプリを起動した際の初期状態の段階で、「既に DB にあるデータを画面表示する」というシナリオを作成します。
(1)リソース定義に DB ファイルを登録
※すでに登録している場合は省略
(2)シナリオ作成
※DB 関連以外のリレーションの説明は省きます。
手順 1:リソース定義フォルダパスを取得する
手順 2:リソース定義フォルダパスに DB ファイル名を結合して DB ファイルパスを作成する
手順 3:データベースへのコネクションを作成して返す
手順 4:データベースを検索する
手順 5:レコードセットで繰り返し処理を行う
手順 6:データベースのコネクションを切断する
※手順 1~3・6 に関しては「追加」と同様なのでこの章では省略
その他の詳しい手順はリンク先を参照
手順 4: データベースを検索する
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
手順 5:レコードセットで繰り返し処理を行う
@パラメータをセットする
A登録
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
@パラメータをセットする
A登録
@パラメータをセットする
A登録
<初期化のリレーション全体像>
・「手順 5:レコードセットで繰り返し処理を行う」について
ループ処理の内容は大まかに 4 つの動作から構成されています
@レコード情報からユーザーID・バリューを取得する
⇒DB から内容を取り出す
A行モデルを作成する
⇒DB から取り出した内容を入れるための場所を作成する
B行モデルへユーザーID・バリューをセットする
⇒Aの操作で作られた行モデルに値をセットする
C行モデルの内容をテーブルへ追加する
⇒Bの操作で作られた行モデルをテーブルにセットする
5.3 選択した行を「User」と「Value」に表示させる
行を選択したら「User」と「Value」に選択した内容を表示させる実装をします。
手順1:選択中である行のテーブル行モデルを取得して返す
手順2:データベースレコードのカラムから内容を取得して返す
手順3:「User」と「Value」に代入する
手順4:イベント割当の追加手順1:選択中である行のテーブル行モデルを取得して返す
手順2:データベースレコードのカラムから内容を取得して返す
手順3:「User」と「Value」に代入する
手順4:イベント割当の追加
<行選択のリレーション全体像>
5.4 DB のデータを削除する
ここでは「Del」ボタンを押すと、選択中の行(=カレント行)のデータが DB から削除されるというシナリオを作成します。
(1)リソース定義に DB ファイルを登録 ※すでに登録している場合は省略
(2)シナリオ作成
手順 1:リソース定義フォルダパスを取得する
手順 2:リソース定義フォルダパスに DB ファイル名を結合して DB ファイルパスを作成する
手順 3:データベースへのコネクションを作成して返す
手順 4:条件マップを作成する
手順 5:データベースを削除する
手順 6:データベースをコミットする
手順 7:データベースのコネクションを切断する
手順 8:テーブルのカレント行を削除する
※手順 1~3・6・7 に関しては「追加」と同様なのでこの章では省略
その他の詳しい手順はリンク先を参照
手順 4:条件マップを作成する
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
※ここでは、TopPanel の UserID 欄に入っている値を削除の条件として指定し、変数「条件マップ」を作成し入れています。
手順 5:データベースを削除する
@パラメータをセットする
A登録
手順 6:テーブルのカレント行を削除する
@パラメータをセットする
A登録
※このリレーションは、「表示されているテーブルの中の選択した行を削除」するもので、DB とは連動していません。
<削除のリレーション全体像>
5.5 DB のデータを検索する
ここでは、あるレコードを選択し、右クリックして「(値で)検索」を選択すると、選択中の行と同じ
Value 値を持つのレコードのみが画面に表示されるというシナリオを作成します。
(1)リソース定義に DB ファイルを登録※すでに登録している場合は省略
(2)メニュー定義を作成する
(3)シナリオ作成
手順 1:画面テーブルを削除する
手順 2:リソース定義フォルダパスを取得する
手順 3:リソース定義フォルダパスに DB ファイル名を結合して DB ファイルパスを作成する
手順 4:データベースへのコネクションを作成して返す
手順 5:挿入マップを作成する
手順 6:データベースを検索する
手順 7:レコードセットで繰り返し処理を行う(ループ処理)
手順 8:データベースのコネクションを切断する
(2)メニュー定義を作成する
右クリックしたときにメニューが表示される設定を行います。
前資料にて詳しい手順を記載しております。不明な場合は下記の資料を参照ください。
参考資料「AiSee_Windows アプリ作成例.docx」【共通】合計処理等の手順2
(3)手順 1:画面テーブルを削除する
@パラメータをセットする
A登録
手順 5:条件マップを作成する
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
手順 6:データベースを検索する
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
手順 7:レコードセットで繰り返し処理を行う
@変数をセットする
A登録
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
@パラメータをセットする
A登録
@パラメータをセットする
A登録
@パラメータをセットする
A登録
<ループ処理の全体像>
手順 8:データベースのコネクションを切断する
@パラメータをセットする
A登録
<検索のリレーション全体像>
5.6 DB のデータを更新する
ここでは、選択した行の値を、右クリックで出現したメニューの「更新」を押すことで別の値に更新するシナリオを作成します。
(1)リソース定義に DB ファイルを登録 ※すでに登録している場合は省略
(2)シナリオ作成
手順 1:選択中である行のテーブル行モデルを取得して返す
手順 2:データベースレコードのカラムへ内容をセットする
手順 3:リソース定義フォルダパスを取得する
手順 4:リソース定義フォルダパスに DB ファイル名を結合して DB ファイルパスを作成する
手順 5:データベースへのコネクションを作成して返す
手順 6:条件マップを作成する
手順 7:更新マップを作成する
手順 8:データベーステーブルのレコードを更新(Update)する
手順 9:選択中テーブルの行を。行モデルで上書きする
手順 10:データベースをコミットする
手順 11:データベースのコネクションを切断する
※手順 3~5・10・11 に関しては「追加」と一緒なのでこの章では省略
その他の詳しい手順はリンク先を参照
手順 1:選択中である行のテーブル行モデルを取得して返す
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
手順 2:データベースレコードのカラムへ内容をセットする
@パラメータをセットする
A登録
手順 6:条件マップを作成する
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
手順 7:更新マップを作成する
@パラメータをセットする
A戻り値の指定(変数を作成してない場合はここで作成する)
B登録
手順 8:データベーステーブルのレコードを更新(Update)する
@パラメータをセットする
A登録
手順 9:選択中テーブルの行を行モデルで上書きする
@パラメータをセットする
A登録
<更新のリレーション全体像>
上記で作成したアプリでは、事前に DB の作成を「SQLite」を用いて行っています。
ここでは簡単に、SQLite のデータが作成、編集できる「DB Browser」について紹介します。
DB を直接作成・編集したい場合には、以下の 2 つをインストールしてください。
SQLite https://www.sqlite.org/download.html/
DB Browser https://sqlitebrowser.org/blog/version-3-12-2-released/
DB Browser をインストールする際に、デスクトップにショートカットを作成するオプションを選択すると、このようなアイコンが表示されます。
※DB Browser(SQL Cipher) はインストール不要です。DB Browser(SQLite)のみ使用します。
手順1:新規 DB ファイルを作成
手順2:保存先、保存名の指定
手順3:テーブル名、カラムの追加
手順4:出来上がりの画面
手順1:新規 DB ファイルを作成
新規で db ファイルを作成していきます。
手順2:保存先、保存名の指定
Db ファイルは各自わかりやすいところに保存してください。
ドキュメント、プロジェクトを作成しているファイルの近くなど。
ファイル名もわかりやすい名前にしましょう。
今回は「Oct_DB」としています。
手順3:テーブル名、カラムの追加
テーブル名は「Keisan」とします。
カラムの追加は「追加」を押すと追加されます。
「No」「第一項」「演算子」「第二項」「結果」を作成しましょう。
手順4:出来上がりの画面
テーブルの構造画面
「Keisan」のオレンジ枠を押すと中身が見れます。
データの閲覧画面
下図は DB Browser の画面です。作成済みの「〇〇〇.db」ファイルを開いた場合、「データ閲覧」のタブから、データベースのテーブルの内容が以下のように表示されます。
(「〇〇〇.db」ファイルをドラッグ&ドロップで開けます)
このページ上でテーブルのデータを直接編集することが可能です。
変更した後は必ず「変更を書き込み」ボタンを押して内容を更新してください。
(データベースのプロジェクト自体を保存ボタンで保存する必要はありません。)
※DB を新規作成する際、もし現在開いている別の DB がある場合には、一旦「データベースを閉じる」のボタンを押してから、画面左上の「新しいデータベース」ボタンをクリックし作成してください。
今回使用する CalcuTable を作成します。
手順1:新しいプロジェクトを作成する
手順2:パネルを作成する
手順3:フォームを作成する
手順4:部品を作る(フォーム)
手順5:部品を作る(テーブルを作成する)
手順6:部品を作る(追加、修正、削除)
手順7:保存する
手順1:新しいプロジェクトを作成する
Aでプロジェクト名を「Calc」
Bは初期でチェックが入っているので消してください。
手順2:パネルを作成する
Aでパッケージ名は「packege1」としてください。
手順3:フォームを作成する
Aのクラス名は「CalcTable」としてください。
出来上がるとこのような画面になります。手順4:部品を作る(フォーム)
@のフォームをクリックすると枠がピンク色になります。
右下にプロパティが出るので「name」に「CalcTable」と入力してください。
ここは手順3のクラス名と同一である必要があるので注意してください。
フォームを右クリックして「Null レイアウト」を選択してください。
手順5:部品を作る(テーブルを作成する)
テーブルの作成を行います。
Swing コンテナから「表」をクリックしてカーソルをフォーム内に動かすと表が出てくるのでフォーム内に収まるように拡大縮小等調整をしてください。
この表にも name を付けてください。
ここでは「calc_tbl」としています。
カスタマイザダイアログが表示されたらAの列をクリックします。
4 列分はすでに作成されているのでBの挿入を 1 度クリックします。
5 列になったら上から「No」「種類」「内容」「結果」「hidden」としてください。
「hidden」のみC〜Eを「0」にしてください。
手順6:部品を作る(追加、修正、削除)
Swing コンテナから「ボタン」を選択します。
ボタンの表示テキストを変更します。
プロパティから text を探して内容を「追加」します。
name は「add_btn」にします。
「修正」「削除」を同じ手順で作成してください。下図のようにコピー、ペーストすると効率的です。
修正「edit_btn」削除「del_btn」としてください。
出来上がりテーブルはこちらです。
手順7:保存する
プロジェクトを右クリックして「消去してビルド」を選択してください。
7.1 作成したデータベースデータベースファイルと jar ファイルを AiSee 内に取り込む
手順1:DB ファイルの取り込み
手順2:jar ファイルの取り込み
手順1:DB ファイルの取り込み
DB ファイルは自身で指定したフォルダ内にあるのでそちらからデータを取り込んでください。
取り込みが出来ると AiSeeSample の「リソース定義」に DB ファイルが追加されます。
手順2:jar ファイルの取り込み
Jar ファイルとは NetBeans で画面作成をしたときに自動で作成されるファイルです。
それを AiSee に取り込むと作成した画面を表示することができます。
取り込みが出来ると AiSeeSample の「ライブラリ定義」に jar ファイルが追加されます。
画面の読み込みに関しては「AiSee_Windows アプリ作成例」に記述がありますのでご確認ください。
この章では2つ目のアプリ例として「AiSeeSample」プロジェクトを作成します。
8.1 DB と画面の事前準備
8.1.1 NetBeans で AiSee 上のテーブルにミリ秒が入るカラムを作成
DB 上で特定のレコードを削除や更新するためには、レコードに一意の値があることが必要です。2 つ目のアプリではその値として「ミリ秒」というものを使用します。
ミリ秒についての詳細はこちらをご確認ください。
事前準備として、画面上のテーブルにも、DB 上のテーブルにもこのミリ秒が入るカラムを作成する必要があります。
ここでは NetBeans を使用して、画面のテーブルにミリ秒を格納する欄を作成する方法をご説明します。
表の上で右クリックし、「表の内容」を選んでください。
※以下の NetBeans 画面は、事前に日本語化を行っております。
ミリ秒の数字は見える必要がないため、欄のサイズを 0 に設定し、見えないカラムを作成します。
下図の左側の表は、見た目は変わっていませんが、「hidden」という名前の新たなカラムが追加
されています。この後ビルドを行い、作成された jar ファイルを AiSee へ取り込んでください。
(操作方法は、別資料「AiSee Web アプリケーション作成例」に記載しております。)
8.1.2 DB Browser で DB テーブルにミリ秒が入るカラムを作成する
DB Browser を使用して、DB のテーブルにミリ秒を格納する欄を作成します。
「データベース構造」タブ→ 編集するテーブルを選択(Keisan)→「テーブルを変更」ボタンをクリック
「追加」でカラムを追加できます。データ型は、中に入るのが数字であっても「TEXT」を選択します。
「上へ」ボタンを押すと、作成した行を上へ移動できます。
OK を押して終了です。
作成した jar ファイルをライブラリ定義に、DB ファイルをリソース定義に追加してください。
8.2 サブシナリオの使いまわし
ここまでのシナリオ作成では、DB とのやりとりをする度に、下図の 3 行のような形でデータベースのコネクションについてのリレーションを記述していました。
しかし、この方法では初期化・削除・検索等の各シナリオに全く同じ内容を記載しなければなりません。
そのため各処理が長くなり分かりにくい上、複数回の記載の手間がかかるデメリットがありました。
そこでこの章では、「DB_接続する」という名前のシナリオを 1 つ作成し、それを他のシナリオから「サブシナリオ」として呼び出すという方法をご紹介します。
8.2.1 DB 接続専用シナリオの作成
まずシナリオを作成する前に DB 関連用のフォルダを作成し、そのファイル内にシナリオを作成しましょう。
下図のような「DB 接続」のみのシナリオを作成し、別のシナリオから「サブシナリオ」として呼び出しができるようにします。以下、各リレーションの内容を詳しく紹介します。
<DB_接続する のシナリオ>
<シナリオ内手順>
手順 1 リソース定義フォルダパスを取得する
手順 2 リソース定義フォルダに DB ファイル名を結合して DB ファイルパスを作成する
手順 3 ファイルパスからデータベースコネクション作成して返す
手順 4 コネクションを返す
手順 2 リソース定義フォルダに DB ファイル名を結合して DB ファイルパスを作成する
※ここでは絶対パスで DB の場所を指定しています。
手順 3 ファイルパスからデータベースコネクション作成して返す
手順 4 コネクションを返す
これで、DB 接続専用のシナリオ作成は完了です。
8.2.2 「DB 接続」をサブシナリオとして呼び出す
サブシナリオとして「DB_接続する」を呼び出すと、以下のように緑色で表示されます。 この緑色の部分で、先程作成した DB 接続専用のシナリオが実行されるようになります。
<シナリオ内手順>
手順 1 「サブシナリオ」を新規作成
手順 2 作成済の、DB 接続専用のシナリオを選択
手順 3 緑色のサブシナリオを修正し、戻り値を設定
手順 1 DB 接続が必要なシナリオ内の「Section」上で右クリックし、「サブシナリオ」を新規作成
手順 2 既に作成済の、DB 接続専用のシナリオを選択
手順 3 戻り値として、「コネクション」というローカル変数を作成し、セットする
※後から、緑色のサブシナリオをダブルクリックで修正し、ローカル変数をセットすることもできます
これで DB 接続専用のシナリオを、サブシナリオとして、別のシナリオ内で呼び出すことができるようになりました。
補足:プロジェクト内の別のフォルダに同じ名前のシナリオが存在する場合、どちらを呼び出しているのかを見分ける方法
(A) このシナリオを、サブシナリオで呼び出した場合
サブシナリオの緑文字をクリックした際、下図のように呼び出したシナリオの場所が表示されます
(B) このシナリオを、サブシナリオで呼び出した場合
サブシナリオの緑文字をクリックした際、下図のように呼び出したシナリオの場所が表示されます
8.2.3 DB 削除専用シナリオの作成
次に、下図のような「DB_削除」のみのシナリオを作成し、別のシナリオから「サブシナリオ」 として呼び出しができるようにします。以下、各リレーションの内容を詳しく紹介します。
DB 接続同様に、このシナリオを 1 つ作成しておけば、別のプロジェクトでもコピーして使用する ことができ便利です。
<DB_削除 のシナリオ>
<シナリオ内手順>
手順 1 データベーステーブルのレコードを削除(Delete)する
手順 2 コミット
手順 3 コネクションを切断
手順 1 データベーステーブルのレコードを削除(Delete)する
ここで、「コネクション」「DB テーブル名」「条件結合形式」「条件マップ」の 4 つの ローカル変数を作成してください。
他のシナリオから渡される値をこちらの変数で受け取ることができるようにするために、ローカル変数
を作成時、4 つとも「パラメーターとして使用する / 値渡し」にチェックを入れてください。
手順2 コミット
手順 3 コネクションを切断
以上で DB 削除専用シナリオの作成は完了です。
8.2.4 「DB 削除」をサブシナリオとして呼び出す
サブシナリオとして「DB_削除」を呼び出すと、以下のように緑色で表示されます。
この緑色の部分で、先程作成した DB 削除専用のシナリオが実行されるようになります。
<シナリオ内手順>
手順 1 「サブシナリオ」を新規作成
手順 2 作成済の、DB 削除専用のシナリオを選択
手順 3 緑色のサブシナリオを修正
手順 1 DB 接続が必要なシナリオ内の「Section」上で右クリックし、「サブシナリオ」を新規作成
手順 2 作成済の、DB 削除専用のシナリオを選択
手順 3 緑色のサブシナリオを修正
作成したサブシナリオをダブルクリックし、必要な部分を入力していきます。枠の部分を入力すると、その値が「DB 削除」のシナリオへ渡されます。
これで DB 削除専用のシナリオを、サブシナリオとして、別のシナリオ内で呼び出すことができるようになりました。
8.2.5 DB 挿入専用シナリオの作成
下図のような「DB 挿入」のみのシナリオを作成し、別のシナリオから「サブシナリオ」として
呼び出しができるようにします。以下、各リレーションの内容を詳しく紹介します。
<DB_挿入 のシナリオ>
<シナリオ内手順>
手順 1 データベースへ挿入する
手順 2 コミット
手順 1 データベースへ挿入する
ローカル変数を 3 つ作成しますが、いずれも「パラメーターとして使用する/値渡し」で 作成してください。
手順 2 コミット
8.2.6 「DB 挿入」をサブシナリオとして呼び出す
サブシナリオとして「DB_挿入」を呼び出すと、以下のように緑色で表示されます。
この緑色の部分で、先程作成した DB 挿入専用のシナリオが実行されるようになります。
サブシナリオの作成手順は、「DB 接続」「DB 削除」と同じであるため、ここでは割愛します。
(方法は、7.1.4 を参照してください)
8.2.7 DB 更新専用シナリオの作成
下図のような「DB 更新」のみのシナリオを作成し、別のシナリオから「サブシナリオ」として
呼び出しができるようにします。以下、各リレーションの内容を詳しく紹介します。
<DB_更新 のシナリオ>
<シナリオ内手順>
手順 1 データベーステーブルのレコードを更新(Update)する
手順 2 コミット
手順 3 データベースのコネクションを切断する
手順 1 データベーステーブルのレコードを更新(Update)する
手順 2 コミット
手順 3 データベースのコネクションを切断する
8.2.8 「DB 更新」をサブシナリオとして呼び出す サブシナリオとして「DB_更新」を呼び出すと、以下のように緑色で表示されます。
この緑色の部分で、先程作成した DB 挿入専用のシナリオが実行されるようになります。
サブシナリオの作成手順は、「DB 接続」「DB 削除」「DB 挿入」と同じであるため、ここでは割愛します。
(方法は、7.1.4 を参照してください)
8.3 ミリ秒を使って特定のレコードを削除する
8.3.1 ミリ秒が必要である理由
ここではシステムの時間「ミリ秒」を取得し、それをデータのキーをとして用いる方法について紹介します。
システムの時間「ミリ秒」とは、例えば「1665025244643」「1665214525278」といった数字の羅列ですが、この値を取得する際、操作したタイミングの時刻によって数字が変化していくため、全く同じ数字は取得されないという特徴があります。まず、何故「ミリ秒」という値を使用する必要があるのか説明します。
左の AiSee アプリのテーブルのデータは、右のような形式で DB に保存されています。
例えば、「DB の1行目のレコード(4 + 3 = 7)だけを削除したい」場合に、どのように条件を指定すれば消す事ができるでしょうか。
削除の条件として、「第一項が 4 であるレコード」「第二項が 3 であるレコード」「演算子が+であるレコード」「結果が 7 であるレコード」等と条件指定することは可能ですが、いずれの条件を指定しても、1行目だけでなく、複数のレコードが該当してしまいます。
例えば「演算子が+であるレコードを削除する」という指定をすると、1行目だけでなく 4 行目のレコードも消えてしまいます。
右の DB テーブルでは、そのレコードに固有の値が設定されていないために、特定の行を削除するための削除条件を指定することができないという問題が生じているのです。
このような事態を避けるために、データベースのレコードには「一意の値」(ユニークな値)が 1 つ含まれている必要があります。
その「一意の値」として、システムの時間から取得する「ミリ秒」という値を各レコードに付与すればこの問題は解消され、特定の一行のみを削除することができます。
8.3.2 ミリ秒を取得するリレーションの作成
ミリ秒を取得したいのは、計算内容を DB へ追加するタイミングです。よって、「閉じる」ボタンを押す際のシナリオでミリ秒を取得する必要があります。
「閉じる」ボタンのシナリオの、DB 接続直後のタイミングに以下のリレーションを追加しましょう。
パラメータは入力不要ですが、ミリ秒が入るローカル変数を新たに設定してください。
「閉じる」ボタンを押した際の処理の流れは以下のようになります。
1) 行モデルを作成し変数に入れる
2) 行モデルへ値をセットする
3) DB 接続<サブシナリオ>
4) システムからミリ秒を取得し変数に入れる
5) 挿入マップを作成し変数に入れる
6) DB 挿入<サブシナリオ>
7) 行モデルの内容をテーブルへ追加する
4 番でミリ秒を取得し、5 番の挿入マップにも変数「ミリ秒」を追加すれば、DB へ計算内容を追加する度にミリ秒も記録されます。
8.3.3 各シナリオの内容詳しいリレーションの内容については「 AISeeSample(DB 有_模範解答).isp 」をご参照ください。
<CalPanel_初期化>
<CalPanel_Add >
<CalPanel_Del >
<CalPanel_行選択>
<CalPanel_更新>
<Calculation_Close(DB 有用) >
<Calculation_追加(DB 有用) >
8.3.4 該当するミリ秒が入るレコードのみを削除する
既に DB あるデータから、指定したミリ秒が入るレコードだけを消去する手順は以下の通りです。
1) DB 接続<サブシナリオ>
2) データベースを検索してデータを返す ※取得するカラムは、ミリ秒が入るカラムのみでOKです。
3) 選択中の行のテーブル行モデルを変数に入れる
4) 取得した行モデルからミリ秒を取得して変数に入れる(下図)
5)削除条件マップを作成し変数に入れる(下図)
6) DB 削除<サブシナリオ>
7) カレント行を削除する
このようにシナリオを作成すれば、特定のミリ秒のレコードのみを削除することが可能になります。
9.1 ボタン内部のテキストの変更
現状「閉じる」ボタンの役割は、計算データをDB と画面上のテーブルへ追加するというものです。この章では、この
「閉じる」という文字を、場合によって「追加」「更新」という文字に変更するという設定を行います。
この前準備を行うことにより、これから行う内容に応じた文字へボタン表示を変更することができるようになります。下図のように、操作前に、ボタン押下によって何が起こるのかを分かりやすく表示することができます。
<従来>
<変更後>
「追加」を押した場合には「追加」と表示される。
「修正」を押した場合には「更新」と表示される。
9.1.1 「閉じる」ボタンを「追加」ボタンに変えるリレーション
まずは「追加」ボタンを押された際に起動する、「Calc_Add」のシナリオを新規作成します。
このシナリオでは、「Calculation_初期化」という、既に作成済のシナリオをサブシナリオとして呼び出し、「ボタンのテキストをセットする」リレーションを作成します。
「Calc_Add」のシナリオ作成後、イベント割当定義で、CalcTable の画面を選択→追加ボタンを押したときに「Calc_Add」が実行されるように設定を行います。
9.1.2 「閉じる」ボタンを「更新」ボタンに変えるリレーション
既にある値を別の値に更新したいケース=「修正」ボタンが押された場合のみ、ボタン表示が「閉じる」から「更新」へ変更されるような処理を記載します。
現在「修正」ボタンを押すと「Calc_行選択」のシナリオが発動する設定となっているため、このシナリオの中に、ボタンの表示変更のリレーションを記載します。
ここまでの設定で「修正」ボタンを押すことにより「更新」ボタンが現れるようになります。
9.1.3 1 つのボタンで 2 つの処理に分岐するリレーション
ここまでで「更新」「追加」のボタンが表示できるようになりました。次は、これらを押した後の処理について設定して
いきます。
1つのボタンで 2 つの処理に分岐できるよう、「閉じる」ボタンを押した時のシナリオ内を以下のように記載します。
(この例では Calculation_Close のシナリオです)
※元々「閉じる」ボタンに設定していたシナリオをコピーペーストしてバックアップを作成してから、シナリオの書換えをされることをおすすめします。
イベント割当定義で、「閉じる」ボタンが押された際のシナリオが正しく設定されているかご確認ください。
以上の設定で、追加ボタンを押せば追加のシナリオが発動し、更新ボタンを押せば更新のシナリオが
発動するようになります。
補足:分岐を作成する際の注意事項リレーションマネージャで「分岐処理を行う」を作成→ダブルクリックし分岐条件を追加する際に、
「EQ」「=」「>」など、等号不等号を選ぶ部分があります。この記号の選択部分にしばらくカーソルを置いたままにしておくと、下図のように選択できる記号の一覧が表示されます。
比べたい2 つの値が数値なのか、文字なのかによって、使用する等号不等号が異なるため注意してください。
今回の場合、「ボタンテキスト(変数)」と「追加/更新(定数)」という文字が同じかどうかを比較したいため、条件式入力の画面で選択するのは「EQ」になります。
9.2 、DB アクセスに「接続」「挿入」「削除」「更新」をまとめる
手順1:DB アクセスファイルに「DB アクセス」のシナリオを作成する
手順2:「DB アクセス」内に分岐を作成する
手順3:分岐の中身を作成する
手順4:各シナリオを修正して反映していく。
手順1:DB アクセスファイルに「DB アクセス」のシナリオを作成する
手順2:「DB アクセス」内に分岐を作成する
条件を4つ追加します。
条件内容は
ケース1:【左辺】ローカル変数「DB スイッチ」、【右辺】定数「DB 接続」
ケース2:【左辺】ローカル変数「DB スイッチ」、【右辺】定数「DB 削除」
ケース3:【左辺】ローカル変数「DB スイッチ」、【右辺】定数「DB 更新」
ケース4:【左辺】ローカル変数「DB スイッチ」、【右辺】定数「DB 挿入」
手順3:分岐の中身を作成する
先の章で作成してきた内容をコピーして貼り付けていきましょう。
このリレーション内で使用するローカル変数はすべてパラメータ(値渡し)に修正してください。
手順4:各シナリオを修正して反映していく。
シナリオ内で「DB 接続する」を使用しているところは下図のように修正してください。
既存の「DB 接続する」を無効にしてください。
シナリオ内で「DB 削除」を使用しているところは下図のように修正してください。
既存の「DB 削除」を無効にしてください。
シナリオ内で「DB 挿入」を使用しているところは下図のように修正してください。
既存の「DB 挿入」を無効にしてください。
シナリオ内で「DB 更新」を使用しているところは下図のように修正してください。
既存の「DB 更新」は無効にしてください。
• F4 キー
デバックしたい場合に使います。
まずは、デバックしたいシナリオ上で右クリック→「デバックデータリンクに登録」をクリックします。
次に、実際にテスト実行(F5 キー)してください。
テスト実行が終わったら、デバックしたいプロジェクトのフォルダや、任意のシナリオをを選択した状態で「F4 キー」を押すと、以下のような画面が表示されます。
矢印の部分をクリックすると、テスト実行結果の細かい内容を確認することができます。
(上が最新のログ、下が古いログです)
どのシナリオを登録したか確認したい場合や、デバック登録したシナリオを解除したい場合は
「シナリオ定義」の上で右クリックし、「デバックデータリンク一覧表示」を開くと確認や編集が可能です。
※データリンク=シナリオを指します。
♦ Q.データベースにデータを書き込んだはずだが、DB Browser を見ても反映していないです。
♦ Q.デバックをすると、「SQL Error 」や「missing DB」などの表示が出て直りません。
A.DB Browser の最上部に、PC の中のどのデータベースを表示しているのか、場所が表示されています。もしこの表示が、
「 C:\Users\ユーザー名\Documents\ISeeAppl\プロジェクト名\ISeeResources 」
(以下、Documents 下)
になっているようであれば、また別の、以下の場所のデータベースを確認し、更新時刻が編集した時刻になっているかご確認ください。
「 C:\Users\ユーザー名\AppData\Roaming\ISeeIDE\ISeeRun\プロジェクト名 」
(以下、AppData 下)
※上記 URL は通常、編集が必要ない場所であるため隠しファイルになっています。まず Windows で隠しファイルを表示する設定にしてから、アクセスをお試しください。
※デフォルトの DB ファイル保存先は Documents 下となりますが、インストール時にご自身で保存場所を変更されている場合には、その場所をご確認ください。
【 AppData 下の DB ファイルが、最新の更新時刻となっている場合】
DB は正常に更新されていますので AiSee 上のパス指定は正しいと考えられます。
通常は、Documents 下の DB を DB Browser 上で参照すれば更新されているはずですが、もし更新されていなければ AppData 下の DB ファイルを DB Browser で開いて、DB が更新されているかご確認ください。
【 AppData 下の DB ファイルが、最新の更新時刻となっていない場合】
AiSee 上で DB の指定した DB のパスに誤りがないかご確認の上、正しいパスをご指定下さい。パスが正しいように見えるのに更新が反映しない場合には、下図のように絶対パス指定で DB の
場所の指定をお試しください。入力の際、スラッシュの要不要にもご注意ください。
AiSee の画面から DB ファイルを追加した際、 エクスプローラーでは Documents 下に DB が
追加されますが、更新や削除など実際の処理は、 AppData 下にコピーされた DB で実行されます。ただし、AiSee 上で絶対パスで DB の場所を指定したい場合は、上図のように Documents 下の DB を
指定してください。
♦ Q. いくつかのシナリオをフォルダ分けする方法はありますか?
A. シナリオを複数のセクションに分ける事ができます。
「Section」の上で右クリック→「セクションの作成(下へ)」で、新たなセクションが作成できます。
下図では、「データベース関連」というセクションを作成しました。
作成した新たなセクションの下にシナリオを追加していくと、新たなセクション名の頭にフォルダのマークが現れ、複数のセクションが見やすくなります。 (下図)