以前の記事でも紹介したように、パワービルダー(PowerBuilder)の特徴であり利点でもあるデータウィンドウ。当記事では、このデータウィンドウを扱う上で必要な基礎を説明する。
[PowerBuilder] データウィンドウについて
データウィンドウの種類
データウィンドウ(Datawindow)はデータの保管場所であり、追加・変更・削除をするための加工所であり、またデータをグラフや表で表示するためのビジュアライズツールでもある。
データウィンドウのデータをどのようなビジュアルで表現するかは、データウィンドウ作成時に指定する必要がある。
表形式で表示したいならグリッド、グラフ表示したいならグラフ...など、新規作成時※に選択プロンプトが表示される。詳しい画面の作り方については割愛する。
※「ファイル(F)」→「新規作成」→「データウィンドウ」
グリッドとグラフのデータウィンドウ(再掲)。この画面では、上のグリッドのデータを他のグラフのデータウィンドウにもシェアしている。
つまり4つのデータウィンドウのデータは完全に同一だが、各データウィンドウの種類が異なるためそれぞれ異なったビジュアルで画面表示されているのだ。
※データウィンドウの他に、ビジュアライズ要素を省いたデータストア(DataStore)という機能もあるが、ここでは大は小を兼ねるということでデータウィンドウで統一する。
初めは画面表示が不要だからとDataStoreを選んだものの、後々やっぱり画面に出したいなんて要望があった時に面倒なので、私は常にデータウィンドウだけを使用している。
データの取得
データウィンドウにデータをセットするには、主に2種類の方法がある。
①データベースから取得する。
②ロジックでデータを追加する。
イメージとしてはVB6.0やVBAでADOを使ってレコードセットを取得するのに近い。データベースへの接続をOpenしてSQLを発行してデータを取得するのが①、AddNewして新規レコードを追加するのが②だ。
①データベースから取得 - SQL文の設定
データベースからデータを取得する場合、まずデータウィンドウにSQL文を設定する。
SQLは上画像のように専用のデザイナーで作ってもいいし、下画像のようにSQL文を自分で書いてもいい。
個人的には自分でSQL文を書きたい派だが、SQL文法エラー時にどこが悪いのかが非常に分かり辛いため、デザイナーに慣れるのも悪くないとは思う。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つをマスターすれば、簡単なメンテ画面ぐらいなら作れてしまうだろう。
次回はもう少し踏み込んだデータウィンドウの説明をしたい。
コメントする