FAQ
技術的な質問> 実現したい処理

Q192:情報のクリアがうまくできず、ご教示頂きます様お願い致します。
Q192-1: 現在、下記の状態で、あるテキストフィールドに文字列を入力すると、その内容をSelect文の一部に変換して、データを取得するアプリケーションができております。

テキストフィールド1-----------------------文字列格納変数
          |        メソッド:文字列を設定する
          |        Select文を固定値で設定
          |
          |-------------------文字列格納変数
          |メソッド:指定文字列と一致する最初の文字列を置換
          |固定値:AAAAAAA(上記Select文固定値の一部)
                   |メソッド戻り値:テキストを取得する
          |
          |--------------------データベースアクセス
          |イベント番号を指定してSQL文を実行する           |
          |--------------------テーブル格納変数
          |テーブルを取得する
          |
          |--------------------サブルーチン1
           処理を呼び出す

サブルーチン1-----------------------繰り返し制御(FOR)
繰り返し制御(FOR)-------------------テーブル
          |
          |--------------テーブル
          | 指定行の行データをリスト形式で取得する
          |
          |---------------オブジェクトキー
          |リストによるキューの設定
          |
          |---------------イベント生成
           アクションイベントの発生

イベント生成--------------------------サブルーチン2
          |
           |----------------サブルーチン3
          |
          |----------------サブルーチン4
          |
          |----------------サブルーチン5
          |
          |----------------サブルーチン6

(Select文の取得結果が1~5行だったりする為の処理)

    サブルーチン2------------------------テキストフィールド2
          |        (テキストを設定する)
           |
          |----------------テキストフィールド3
           |        (テキストを設定する)
           |
          |----------------テキストフィールド4
           |        (テキストを設定する)
           |
          |----------------テキストフィールド5
                     (テキストを設定する)     

   これに対し、以前教えて頂いた方法で、テキストフィールド2~5に「文字なし」を設定するサブルーチンAを作成し、下記の方法で、利用しています。

【フレームを閉じた時に画面クリア】
フレーム-----------------------サブルーチンA
               (処理を呼び出す)

【画面クリアボタンをクリックした時に画面クリア】
ボタン-----------------------サブルーチンA
               (処理を呼び出す)

この2つは機能しておりますが、今回問題が起きましたのは、Select文で5行の情報を取得した後、続けて3行の情報を取得する事があると、最初の4行目と5行目の情報が残存してしまう事です。

文面最初の、「テキストフィールド1に文字を入力→エンターキー押下でSelect文実行」の間に、サブルーチンAを機能させて画面を一度クリアさせたいのですが、各コンポーネントの間にサブルーチンAを挟んでも、うまくいきません。どのように行うべきでしょうか。

A192-1:  各テキストフィールドにデータを設定する繰返し処理、つまり[サブルーチン1]が呼出される前に、[テキストフィールド1]のアクションイベントにクリア処理を繋げて頂ければ大丈夫かと思います。
例えば以下の箇所にクリア処理を追加します。

> テキストフィールド1-  ←あるいは 一番最初も可
>           |--------------------データベースアクセス
>           |イベント番号を指定してSQL文を実行する
>      
ここ⇒ |
>          |--------------------テーブル格納変数
>      
または|テーブルを取得する
>      
ここ⇒
>         |--------------------サブルーチン1
>            処理を呼び出す >


 気になる点がございます。[データベースアクセス]で取得したデータは[テーブル]と[テーブル格納変数]と、どちらに格納しているでしょうか。

 [データベースアクセス]---処理完了イベント
              ---[テーブル]
                テーブルデータを設定する
 としていらっしゃるのでしたら、
[データベースアクセス]「イベント番号を指定してSQL文を実行する(String)」の次の処理の[テーブル格納変数]「テーブルを取得する()」は不要なように思います。

 あるいはSQL文実行結果をこの[テーブル格納変数]に「取得方法:メソッド処理結果」で設定しているのでしたら、メソッドは「テーブルを設定する(PFObjectTable)」で、繰返し処理時に「指定行のデータを取得」するコンポーネントは[テーブル格納変数]となるかと思います。

 もしかすると、データ取得や行数取得元のコンポーネントに、[テーブル]と[テーブル格納変数]と両方をお使いで、2つのコンポーネントのデータ設定のタイミングがずれているということはないでしょうか。

 もし違うようでしたら、再度検討致しますので、どうぞご連絡下さい。



閉じる