Q95:以下の機能を作成する方法を教えてください。
@画面テーブルの一部(行)のダブルクリックによる処理の起動。
A画面テキストフィールドの桁数チェック。
B画面テキストフィールドの入力値によるDBの更新。
CDB(テーブル)1項目のコンボボックスへの表示。
Q95-1:
現在、MZPについて開発を行っていますが、下記のサンプル等ありましたら頂きたいのですが。よろしくお願いします。
開発しているAPの内容としては、マスタに登録されたデータを一覧表示し、新規ボタンで新規登録詳細画面を表示し、内容を入力してDBに登録(INSERT)します。修正は、一覧表示の一部をダブルクリックしその詳細画面を表示し、内容を修正してDBに更新(UPDATE)します。削除は、更新と同じで削除フラグを立てる論理削除です。
【教えて頂きたい内容】
@一覧表示からダブルクリックして詳細画面に渡す部分。
マウスボタンイベントというのがありましたが、画面のテーブルのどこをクリックしてもイベントが発生します。
画面テーブルの一部(行)をダブルクリックして発生するイベントはありますでしょうか?
A画面テキストフィールドの桁数チェックの方法
プロパティ等で制御できれば、パラメータを教えてください。
また、NULLチェックもプロパティで制御できましたら教えてください。
B画面テキストフィールドの入力値をDBに更新(UPDATE)する部分
DB登録(INSERT)のように簡単にできるやり方がありましたら教えてください。
Cコンボボックスの表示する部分
DB(テーブル)の1項目をコンボボックスで簡単に表示できる方法がありましたら教えてください。
A95-1:
(1)[テーブル]のヘッダーやスクロールバー部分以外(=テーブルセルの部分)をシングルクリックした時にマウスイベントを発生させるということで宜しければ、右側の処理にイベント番号を設定し「No:30 テーブル上でマウスクリックされた時」を選んでお試しください。
(2)[テキストフィールド]は最大入力文字数が設定できます。
@「実行設定可ボタン」で実行し、フィールド上で右クリック>[最大入力文字数]を設定
A「属性情報設定」でMaxcCharInput欄を設定
Bメソッド「setMaxcCharInput(int)」を設定
以上3つの方法があります。
NULL判定の方法ですが、特に文字列を扱うコンポーネントについては、文字列数「0」でも、中に入っているデータが「NULL値」ではなく「空文字」である場合が多くあります。
NULLであるかどうかは[NULL判定]コンポーネントで判定することができますが、[テキストフィールド]の場合、取得したデータは「空文字」であり、「NULL」にはなりません。
[テキストフィールド]からテキストを取得して[文字列格納変数]に設定し、「メソッド:文字の長さを取得する」で文字列長さを取得し、それを[比較演算]コンポーネント等で「0より大きいか」判別するといった処理になります。
(3)UpdateについてはInsert時と同じように、UpdateのSQL文を実行するという処理が基本となります。
Where句を使ってUpdateするデータを限定しますが、その際は[文字列格納変数]のメソッド「指定した文字と連結して置き換える(String)」や「replace」に関連するメソッドを利用して、基本のUpdate文を変化させたりしています。
Insert文はどのような処理になさっていらっしゃるか分らないのですが、もしUpdateとInsertと違いがあり、ご不明な点がございましたら、お手数でも再度ご連絡ください。
その他に「検索結果を用いたテーブル更新処理」を行うこともできます。
接続例が判るようアプリケーションファイルを作成しましたので、本文末尾の関連ファイルをご覧下さい。(ご自分の環境に合わせて修正をして頂かないと動作しませんので、ご注意下さい)
Update時に使用する主なメソッドは「startUpdate()」「finishUpdate()」「UpdateRow(PFObjectTable,int)」です。
こちらのメソッドを使用する場合には各データベースソフトによって少しずつ特徴があります。もし上手く動作しない場合には、ご使用のデータベースソフト名をお知らせ下さい。
検索結果は全てのデータを取得してくる必要はありませんが、例えばMySQLデータベースの場合には必ず主キー列を含む必要があります。
(4)[コンボボックス]コンポーネントにはリスト型のデータを設定します。
データベースからSelectしてきた結果は[テーブル格納変数]あるいは[テーブル]に一旦設定していらっしゃると思いますが、そこからメソッドで一列のデータを取得します。通常[テーブル]から一列/一行のデータを取得するとリスト型のデータとなります。
処理は以下の順となります。
@[テーブル]「メソッド:指定列の列データをリスト形式で取得する(int)」
(または[テーブル格納変数]「getColumn(int)」)
A[コンボボックス]「メソッド:全項目のラベル名を設定する(PFobjectList)」
「取得方法:メソッド処理結果、
メソッド/値:指定列の列データをリスト形式で取得する(int)」
関連ファイル:Update処理例.mzax (※このファイルは、ZIP形式に圧縮してあります。)
備考:「データベース」の「Q&A63」にも掲載。