[PowerBuilder] データウィンドウについて

以前の記事でも紹介したように、パワービルダー(PowerBuilder)の特徴であり利点でもあるデータウィンドウ。

当記事では、このデータウィンドウを扱う上で必要な基礎を説明する。

 

 

データウィンドウの種類

データウィンドウ(Datawindow)はデータの保管場所であり、追加・変更・削除をするための加工所であり、またデータをグラフや表で表示するためのビジュアライズツールでもある。

データウィンドウのデータをどのようなビジュアルで表現するかは、データウィンドウ作成時に指定する必要がある。

000.png
表形式で表示したいならグリッド、グラフ表示したいならグラフ...など、新規作成時※に選択プロンプトが表示される。詳しい画面の作り方については割愛する。

※「ファイル(F)」→「新規作成」→「データウィンドウ」

 

graphs.gif
グリッドとグラフのデータウィンドウ(再掲)。この画面では、上のグリッドのデータを他のグラフのデータウィンドウにもシェアしている。

4つのデータウィンドウのデータは同一なのだが、各データウィンドウの表示形式が異なるため、それぞれ異なったビジュアルで画面表示されているのだ。

※データウィンドウの他に、ビジュアライズ要素を省いたデータストア(DataStore)という機能もあるが、ここでは大は小を兼ねるということでデータウィンドウで統一する。

初めは画面表示が不要だからとDataStoreを選んだものの、後々やっぱり画面に出したいなんて要望があった時に面倒なので、私は常にデータウィンドウだけを使用している。

 

データの取得

データウィンドウにデータをセットするには、主に2種類の方法がある。

①データベースから取得する。

②ロジックでデータを追加する。

イメージとしてはVB6.0やVBAでADOを使ってレコードセットを取得するのに近い。データベースへの接続をOpenしてSQLを発行してデータを取得するのが①、AddNewして新規レコードを追加するのが②だ。

 

①データベースから取得 - SQL文の設定

データベースからデータを取得する場合、まずデータウィンドウにSQL文を設定する。


001.png

SQLは上画像のように専用のデザイナーで作ってもいいし、下画像のようにSQL文を自分で書いてもいい。

002.png

個人的には自分でSQL文を書きたい派だが、SQL文法エラー時にどこが悪いのかが非常に分かり辛い。

シンプルなDQLであればデザイナーを使う方がいいかもしれない。SQL文が複雑になってきた際にわけが分からなくなるが...。

 

①データベースから取得 - ロジック作成

データウィンドウにSQL文を設定出来たら、あとは画面側のロジックだ。

例えば画面に適当なボタンを配置し、そのボタン押下イベントに以下のように記述する。

//////////////////////////////////////////////////////
//
// 処理 : cb_getdata.Clicked
// 説明 : DBよりdw_1にデータを取得し、画面に表示する
//
///////////////////////////////////////////////////////
// 変数定義
Integer li_ret
//================================================================================
// 初期処理
//================================================================================

//SQLCAを通してデータベースに接続する
CONNECT USING SQLCA;

//データウィンドウのトランザクションオブジェクトをSQLCAに設定する
dw_1.SetTransObject(SQLCA)

//dw_1に記述されたSQLを発行し、DBのデータをデータウィンドウに取得する
//Retrieveするだけで画面表示までやってくれる
li_ret = dw_1.Retrieve()

IF li_ret = 0 THEN
//取得データが0件なら新規行を追加
dw_1.InsertRow(RowCount()+1)
//初期値をセット
dw_1.SetItem(1, "BIKOU", "新規")

END IF

dw_1.Retrieve() を実行することで、そのデータウィンドウ(dw_1)に設定されたSQL文が発行され、データが取得される。取得されたデータはそのまま画面に表示される(DWがグラフ形式ならグラフ、表形式なら表として表示される)

 

②ロジックでデータを追加

データベースに接続しなくても、データウィンドウに行追加を行うことは可能。

上記コードでいうところのdw_1.InsertRow(RowCount()+1)がそれだ。引数は新規行を何行目に追加するか。

空レコードを追加したら、各項目に画面から値を入力したり、SetItemメソッドでロジックから値をセットすることが可能だ。

またDeleteRowメソッドを使用することで指定した行を削除することができる。

(厳密にはまだ削除はされず、データウィンドウの削除バッファに移動される...詳細はこちら

 

データウィンドウにデータがないとどうなる?

上記コードでは下記の処理を行っている。ポイントは③。

①SQLからデータ取得
②データが取得できればそのままデータウィンドウ表示
取得できなければデータウィンドウに新規行を追加

なぜ③で新規行を追加するかというと、データが1件もないとデータウィンドウは画面表示をしないという特徴があるからだ。

(追記:この特徴は「フリーフォーム」で作成したDWだけだったかもしれない。)

 

つまり、データウィンドウがグラフならグラフそのものが表示されない。

グリッドにデータ入力させたいような場合でも、そもそもグリッドが表示されないのでデータ入力ができない、という事態になってしまう。

そのため、メンテ画面のようにデータベースからデータを取得してそれを表示(または編集)するような画面の場合、必ずデータが取得できたかどうかを確認し、データがないなら新規行を追加しなければならない。

忘れるとデータ0件時に画面に何も表示されず「この画面は何??」となってしまう。まぁ行追加すれば表示されるので、ユーザーが自分で「行追加」ボタンを押す、という運用でもいいかもしれないが。

 

さいごに

以上、データウィンドウの基礎とデータの取得方法を紹介した。

Retrieve、InsertRow、DeleteRow、SetItemの4つをマスターすれば、簡単なメンテ画面ぐらいなら作れてしまう。

次回はもう少し踏み込んだデータウィンドウの説明をしたい。

コメントする