前回の記事に引き続き、パワービルダー(PowerBuilder)の特徴であるデータウィンドウ(DataWindow)について解説する。
今回はデータウィンドウのバッファについて。
コンピューター、プログラミング、モバイル、ガジェットなどエレクトロニクス分野を中心にネタを提供するウェブサイトです。最近は中国ネタにも注力中。かつてはHWD15向けのAndroidアプリ「HWD15 Status Notifier」を作ってたりしていました。
前回の記事に引き続き、パワービルダー(PowerBuilder)の特徴であるデータウィンドウ(DataWindow)について解説する。
今回はデータウィンドウのバッファについて。
主バッファのデータ数(行数)を取得するには、RowCountメソッドを使用する。
削除バッファのデータ数(行数)を取得するには、DeletedCountメソッドを使用する。
※要注意:削除バッファを使用するには条件がある。後述。
フィルタバッファのデータ数(行数)を取得するには、FilteredCountメソッドを使用する。
※フィルタが適用された状態でRowCountメソッドを使用すると、フィルタされた後の主バッファの件数しか取れないので注意。
元々取得していたデータの全件数を取得したい場合、RowCountの結果とFilteredCountの結果を合計する必要がある。
(フィルタを適用しない前提の場合はもちろんRowCountだけでよい)
・DeleteRowメソッドで削除したレコードは、削除バッファに入る。※
・DeletedCountメソッドを用いることで削除バッファのデータ件数を取得できる。
・Updateメソッドで実テーブルに更新をかける際、PowerBuilderはこの削除バッファに入ったデータをもとにSQL DELETE文を発行する。
・削除後、レコードは削除バッファから削除される。
※更新特性を「更新可能」にしているDWに限る。
つまり、"データベースから取得したデータを画面上のDWに表示し、それをユーザーが編集後、「更新」ボタンを押すとDWにUpdateメソッド※が発行され元のデータベースが更新される"ような画面を作りたいのであれば、そのDWは更新特性が「更新可能」である必要がある。
そして、この更新特性が「更新可能」になっているDWのみ、削除バッファを使用することができる。
もし更新可能でないDWに対してDeleteRowメソッドを実行した場合、レコードは即時削除され、DeletedCountメソッドは常に0を返す。
データウィンドウにUpdateメソッドを発行してもテーブルが更新されない場合や、DeletedCountメソッドが常に0を返す場合、ここが原因であることが多い。
※Updateメソッドは、画面入力や行削除等でDWのデータに変更が加えられた内容を、データ取得元のテーブルに反映(更新)するメソッド。RetrieveメソッドがSQLでいうSELECTに当たるならば、UpdateメソッドはSQLでいうINSERT/UPDATE/DELETEに相当する。
また、RowsMoveメソッドを使用することで、異なるバッファ間でデータを移動することもできる。あまり使用した記憶はないが、覚えていて損は無いだろう。
なお、データ更新前のバリデーションを行う際には、「データが変更されたかどうか」のステータスを確認する必要も出てくるだろう。
この場合はModifiedCountメソッドを使用することで変更済みレコードのカウントを取ることができるのだが、これについては次回説明したい。
コメントする