[Powerbuilder] Tips: Nullの扱いには気をつけよう

PowerbuilderとNullの扱い

PowerScriptやDatawindow式では、式や関数の引数にNull値が含まれると、結果は全てNullになる

これは結構陥りやすい罠なので要注意。

Most functions that have a null value for any argument return null. Any expression that has a variable with a null value results in null.
引数にNULL値を持つ関数のほとんどはNULLを返します。
NULL値を持つ変数を持つ式はすべてNULLになります。

A boolean expression that is null is considered undefined and therefore false.
nullである論理式は未定義とみなされ、したがって偽となります。

SyBooks Online (Archive)

つまり「どこか一つでもNullが入ると全部Nullが返ってくる」と考えた方がいい。Nullチェック重要。

[Powerbuilder] データウィンドウ絡みのイベントを紹介

Powerbuilderのデータウィンドウ関連イベントの中でも便利なものをいくつか紹介する。

 

DWがテーブルへINSERT/UPDATE/DELETEした件数の取得

各DWの「UpdateEnd」イベントにて以下の情報を受け取ることができる。

追加行数はrowsinserted、更新行数はrowsupdated、削除行数はrowsdeletedから取得できる。

// 処理 : UpdateEnd event
messagebox("ROW COUNT: INSERTED, UPDATED, DELETED", String(rowsinserted) + " " + String(rowsupdated) + " " + String(rowsdeleted))

データベースへ追加・更新・削除処理を行った後、処理結果件数を確認したい時に便利。

[Powerbuilder] Tips: CHOOSE CASEでNullを判定したい

C系列ならSwitch、VBならSelect Case文に相当するもの。PowerBuilderではCHOOSE CASE文を使う。

HELPには下記のような例文があるが、

CHOOSE CASE Weight
CASE IS<16
 Postage=Weight*0.30
 Method="USPS"
CASE 16 to 48
 Postage=4.50
 Method="UPS"
END CHOOSE

ここに

 CASE IS NULL
とか
CASE NULL

と書いてもコンパイルエラーになる。どうやらこの書き方ではNull判定できない様子。

[PowerBuilder] Datawindow式でよく見るチルダと引用符について

PowerBuilderの引用符について

の記事でも少し触れたが、Modifyメソッドに渡すパラメータ文字列を作成する際、チルダを用いた引用符の扱いが非常に面倒くさい。

ls_modify = "r_" + String(ll_i) + ".visible='1~tIF(結果" + String(ll_i) +" = ~~'~~', 1, 0)'"
dw_4.Modify(ls_modify)

↑こういうやたら~が多いやつ

 

理解するにはなかなか難しいのだが、一つ例を出してこの引用符について説明したい。

[PowerBuilder] タブラ様式のデータウィンドウコントロールにプロパティを設定する

データウィンドウの様式と、タブラ様式のデータウィンドウでよく使うプロパティ設定について。

 

データウィンドウ(DW)の様式について

DWにはいくつかの様式があり、DWが持つデータをどのように表現したいかによって好きな様式を選ぶことができる。

例えばグラフとか、一覧表示(タブラ)とか、フリーフォームとか...同じデータを持つDWでも、様式が変わると見え方が全く異なってくる。

個人的に一番よく使ったのが一覧表示に適しているタブラ様式。(他の様式については追って解説する予定)

[PowerBuilder] データウィンドウのプロパティ値を設定する方法

PowerBuilderでデータウィンドウのプロパティ値を取得/更新する場合、

  • 専用のメソッド(DescribeとModify)を用いて取得/更新する方法
  • プロパティ式を使ってDWのプロパティ値を直接参照/更新する方法

の2つがある。

DescribeとModifyを使う方法は前回の記事で説明したため、今回はそれと対比しながら直接DWオブジェクトに設定する方法を紹介する。

 

DescribeとModifyを使う方法

前回説明したが、DWのプロパティを取得するDescribeメソッドと、プロパティを更新するModifyメソッドがある。

 例)
//dw_1が持つempnameというオブジェクトのBorderプロパティ値を取得
dw_1.Describe("empname.Border")

//dw_1が持つempnameというオブジェクトのBorderプロパティ値に1をセット
dw_1.Modify("empname.Border=1")

詳細については前回の説明を見てほしい。

[PowerBuilder] DescribeとModifyでデータウィンドウのプロパティ値を設定する

長らく死蔵していたPowerBuilderネタの下書きを発見したのでUPしておく。今更役に立つかは分からないけど。

 

DescribeとModify

DescribeとModifyは、データウィンドウが持つ各種プロパティを取得・変更するメソッドである。

例えば、下記でdw_2というDWのSQL SELECT文を取得できる。

ls_sql_text = dw_2.Describe("Datawindow.Table.Select")

また、下記でdw_2に新たなSQL文をセットすることができる。

dw_2.Modify("DataWindow.Table.Select=~"" + ls_sql_text + "~"" )

[PowerBuilder] タイマー処理

タイマー処理を使用すると、指定した秒数ごとに処理を繰り返し実行することができる。
例としては、1分ごとに自動でデータを再取得して画面のグラフを再表示したり、タイムアウト処理に使ったり。

 

タイマーには2種類ある

このタイマー処理には2種類あり、ひとつはウィンドウが持つtimerイベント、もう一つがtimingユーザーオブジェクト。

前者はウィンドウが持つイベントのため実装が楽だが1ウィンドウにつき1つのみという制約がある。
後者は制約はないが、別途ユーザーオブジェクトを作成しないといけないのがやや手間だ。