前回の記事に引き続き、パワービルダー(PowerBuilder)の特徴であるデータウィンドウ(DataWindow)について解説する。
今回はデータウィンドウの修正ステータスについて。
コンピューター、プログラミング、モバイル、ガジェットなどエレクトロニクス分野を中心にネタを提供するウェブサイトです。最近は中国ネタにも注力中。かつてはHWD15向けのAndroidアプリ「HWD15 Status Notifier」を作ってたりしていました。
前回の記事に引き続き、パワービルダー(PowerBuilder)の特徴であるデータウィンドウ(DataWindow)について解説する。
今回はデータウィンドウの修正ステータスについて。
⇒Retrieveでデータ取得した直後は、全レコード、全カラム「NotModified!」になる。
上記4つのステータスが存在する。これらのステータス情報はDWの行・カラムごとに保持している。
・DBから読んだ直後のデータはNotModified!
・そのあと変更を加えたらDataModified!になる
・新規追加行はNew!
・そのあと変更を加えたらNewModified!になる
これらの各ステータスはGetItemStatusメソッドで取得できるほか、SetItemStatusメソッドで書き換えることも可能。
じゃあどんなことに使えるの...という話になるのだが、例としてざっと下記の用例が思いつく。
・DataModified!の行を探すことで画面に対する更新チェック(画面のデータが変更されているか)が行えたり、New!やNewModified!を探せば新規追加行を検出できたりする。
・メンテ画面で「更新」ボタンを押したときに全データのステータスを確認し、全てがNotModified!だった場合はデータを更新する箇所がないので「データが何も変更されていません」とエラーメッセージを出すテクニック。
・DBへの更新をPBのUpdateメソッドではなくDBプロシージャで実行するような場合で、Insert/Update/Deleteでそれぞれ呼び出す処理が違っていたりするときに判断材料になる。
例えば、画面全行分LOOPで回して、LOOP内でステータスを確認...NotModified!行は何もせず、DataModified!行は更新処理、New!やNewModified!行は追加処理を実行する、という作り方ができる。
・DWでRetrieveしたデータをRowsMoveやSetItemメソッドで別のDWに持ってきてそこで処理する場合、RowsMoveやSetItemでデータ移動した時点で全データのステータスがNewModified!になってしまい、DBから読んできたデータとInsertRowで新規追加したデータの区別がつかなくなってしまう。
この場合は、RowsMoveやSetItemした後にResetUpdateメソッドを実行し、ステータスをNotModified!にリセットするとよい。
そうすればDWがDBから読んだデータはNotModified!になり、画面から追加した行はNew!になり、画面入力により変更された行はDataModified!またはNewModified!となるため、全てのパターンを判別ができるようになる。
コメントする