データウィンドウ絡みでよく使うメソッド解説がいくつか集まったので記事化することに。
ここを結構参考にしたような気がする。
コンピューター、プログラミング、モバイル、ガジェットなどエレクトロニクス分野を中心にネタを提供するウェブサイトです。最近は中国ネタにも注力中。かつてはHWD15向けのAndroidアプリ「HWD15 Status Notifier」を作ってたりしていました。
データウィンドウ絡みでよく使うメソッド解説がいくつか集まったので記事化することに。
ここを結構参考にしたような気がする。
AcceptTextメソッドはDWに入力された値を確定する。
データウィンドウのカラムに入力した文字は、Enterキーを押したり、Tabを押して次の入力項目に移動した際に入力内容が検証され、問題なければ確定される。
しかし、文字を入力してまだカーソルが点滅している状態では入力内容は未確定で、そのまま別のDWをクリックするなどしてフォーカスが外れた場合は確定されない。
また「データウィンドウの入力条件に反します」エラーメッセージが出た際も、正しい内容が入力されるまでは確定されない。
そして、確定されていないままデータ更新(DBに反映)すると「入力したはずなのにDBに反映されない」問題が起きる。
データ更新を行う際は、先にそのDWでAcceptTextメソッドを呼んでカラムに入力された内容を確定する必要がある。
DWのLoseFocusイベントにAcceptTextメソッドを記述するのはダメ(無限ループになる)。
DWに入力→入力規則違反のエラーメッセージBoxが出る→DWがフォーカスを失う→LoseFocusイベント発火→AcceptTextメソッド実行→入力規則違反のエラーメッセージBoxが出る・・・(以下無限)。
あと、戻り値チェックも忘れずに。入力規則エラー時は戻り値-1を返し、成功時は1を返す。
Filterメソッドは指定した条件に合致するデータのみに絞り込むことができる。
SetFilterメソッドでフィルタ条件をセットし、Filterメソッド実行時に実際にフィルタ処理が行われる。
ls_filter = "項目No = " + String(ll_koumoku_no)
dw_4.SetFilter(ls_filter)
dw_4.Filter()
フィルター条件を固定で(規定値)設定したい場合は、下記方法でデフォルトのフィルタ条件をセットすることができる。
デフォルトのフィルタ条件が設定されている場合、SetFilterを呼ばなくてもFilterメソッドを呼ぶだけでデフォルトのフィルタ条件でフィルタしてくれる。
LIKEを使えばあいまいフィルタが可能。
dw_4.SetFilter("comment LIKE '%" + o_a15progress%'")
SerFilterにNullを指定すると、既定のフィルタ設定ダイアログを出してやることができる。
SetNull(ls_filter)
dw_4.SetFilter(ls_filter)
dw_4.Filter()
↓既定のフィルタ設定ダイアログを使えば、ユーザーに自由にフィルタ条件を設定してもらうことが可能。
ユーザーにこのフィルタ条件式を書かせるのはちょっと酷だけど。
また、空文字でフィルタすれば設定済みのフィルタ条件を解除(全件表示)することができる。
dw_4.SetFilter("")
dw_4.Filter()
Describeメソッドを使用することで、DWのプロパティ値を取得することができる。
例えば下記で現在のフィルタ条件を取得できる。
dw_3.Describe("Datawindow.Table.Filter")
Describeメソッドについては過去記事でも紹介している。こちらも言及あり。
Sortメソッドを使えば指定した条件でソートできる。
SetSortでソート条件をセットし、Sortで実際にソートを実行する。
dw_3.Setsort("追加日時")
dw_3.Sort()
ソート条件を固定で(規定値)設定したい場合は、下記方法でデフォルトのソート条件をセットすることができる。
この場合は、Sortメソッドを呼ぶだけでデフォルトのソート条件でソートしてくれる。
Filterメソッドと同様に、空文字""をSetSortすることでソート条件をクリアしたり、NULLをSetSortして既定のソート設定ダイアログを出してやることができる。
Findメソッドは、開始位置から終了位置まで条件検索して何レコード目に見つかったか、最初のレコードを返す。見つからなかった場合は0を返す。
ll_found = dw_status.Find("emp_lname = '山田' and emp_salary > 100000", 1, dw_status.RowCount())
//重複チェック
ls_code = dw_2.GetItemString(ll_i,"コード")
ll_found = dw_2.Find("コード = '" + ls_code + "'",1, dw_2.RowCount())
ll_found2 = dw_2.Find("コード = '" + ls_code + "'",dw_2.RowCount() ,1 )
IF ll_found = ll_found2 AND ll_found <> 0 THEN
//重複なしの処理
ELSE
//重複ありの処理
END IF
コメントする