[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))

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

 

 

Retrieve件数を指定する(制限する)

Retrieveでデータ取得時、RetrieveRowイベントに下記のように記述することでデータ取得件数を指定・制限できる。

// 処理 : RetrieveRow( Retrieveの度に発生 )
//100件だけ読み込み
IF row >= 100 Then DBCancel()

RetrieveRowイベントはRetrieveで1レコード取得する度に発生する。今何レコード目か(何件取得したか)はrowで取得できる。

取得対象レコードが多すぎてデータ取得が終わらず画面側がフリーズしてしまわないよう、事前に最大取得件数を指定するのに便利。

「とりあえず100件までは取得、それ以上は取得せず無視」みたいな制約を入れたい場合は上記コードサンプル通りでOK。

ただし、DBCancel()するまではデータ読み込み処理は発生するので注意。上記の例だと100件分は読み込み処理が走ってしまう。

「取得件数が多すぎる場合は取得せずエラー表示」みたいな制約を入れたい場合は、事前にSQL COUNTを使って件数だけ取得→件数超過してたらエラーを出してRetrieve処理自体をしない方がエコロジーかも。

 

Retrieveで取得した件数を取得する

Retrieve処理がすべて終わるとRetrieveEndイベントが発生する。

ここでレコード件数(rowcount)を参照すれば、Retrieveで取得できたレコード件数を取得することができる。

// 処理 : RetrieveEnd
IF rowcount <= 0 THEN
THIS.InsertRow(0)
END IF

フリーフォームDWはデータ件数が0件の場合は画面に表示されないという罠があるので、上記サンプルのように「Retrieveの結果が0件だったらInsertRowで空レコードを作成する」ことでこの罠を回避することができる。

コメントする