第7回 前回作成の入力画面を使って食品番号を入力し該当の食品を表示する
 
 
     前回作成した食品番号の入力画面(食品NO選択用.wfm)を用いて食品番号を入力し、その番号に該当する食品を1件表示する処理を考えましょう。
この一括処理が作成できれば、この処理をくり返して、何件もの食品を順次選択することができます。とりあえず、食品を1件選択して(『絞り込み』という一括処理コマンドを利用し、絞り込みをして)表示するだけの一括処理を考えます。
 その後、選択した1件・1件の食品をそれぞれ何gずつ摂取したかという『摂取量』の入力をして各栄養素のデータとその摂取量から実際の摂取量及び1日の総摂取量を求める処理を考えます。

その前に、前回作成した『食品NO選択用.wfm』を若干手直しします。
前のページへ

ホームページへ 
 
         
  0. 『食品NO選択用.wfm』というフォームファイルを再定義するには、ファイルパレットを開いてから、変更したいフォームファィルのアイコン上にマウスポインタを移動して右クリックします。
そうすると以下の画面が表示されます。



上の画面でメニューバーから『ファィル(F)』・『ファイル(F)』・『定義(D)』という順にマウスポインタでポイント後クリックして次の画面を表示して下さい。



下の食品NO欄(画面では『01-001-a』と表示されている白い枠)にマウスを移動後、右クリックして表示されるメニューから『オブジェクトの属性(R)』を選びます。
画面が変わりますのでソースと書いてある枠内の[食品NO]という記述を、画面のように変えて下さい。
つまり、&食品NOという変数名に変えます。この変数名は一括処理の方で定義します。



同様に食品名の欄(画面では『アワ コクリュウ ゲンコク』と表示されている白い枠)にマウスを移動後、右クリックして表示されるメニューから『オブジェクトの属性(R)』を選びます。
画面が変わりますのでソースと書いてある枠内の[食品名]という記述を、画面のように変えて下さい。

つまり、&食品名という変数名に変えます。実際には変数名の定義は一括処理の方で行います。



 
    以下、同様に食品群の欄(3つに分けた食品番号欄の左の欄)に関しては、テキストタブのソース欄に『&NO1』と入力します。

ここでは変えませんでしたが、オブジェクト名もわかりやすいものに変えても結構です。


 
   
         
    同様に小分類の欄(3つに分けた食品番号欄の中央の欄)に関しては、テキストタブのソース欄に『&NO2』と入力します。


 
   
         
    同様に小分類の欄(3つに分けた食品番号欄の右の欄)に関しては、テキストタブのソース欄に『&NO3C』と入力します。




 &NO1、&NO2、&NO3C、&食品NOや&食品名という変数宣言をしていないために、『整合性に誤りがあります』というメッセージが表示されますが、ここではそのままファイルを保存して再定義を終了します。各変数の定義(変数宣言)は一括処理の方で行います。
   
         
  1. それでは、食品NO選択用のフォームを用いて、該当する食品を絞り込み、同じフォームで表示する一括処理を考えていきましょう。

次の一括処理を入力して実行してみましょう。保存するためのファイル名は『食品の検索.cmd』としました。

なお、『エネルギー』、『ナイアシン』などで標記した内容は、『WIN版・桐』の一括処理ファイルを書くにあたって半角カナを用いています。インターネット上には半角カナを流せないので、便宜上『10ポイント』のフォントで表現しました。項目名などは統一がとれていればよいので、全角カナの方がよいと思う場合には『エネルギー』、『ナイアシン』などと書いてよいです。

ただし、一括処理内で表記上統一がとれていなければなりません。
変数宣言 固有 , 文字列{&食品NO , &食品名 , &ボタン名 , &NO1C , &NO2C , &NO3C}
変数宣言 固有 , 整数{&ハンドル1 , &ハンドル2 , &NO1 , &NO2 , &NO3}

ウィンドウ作成 "C:\栄養計算\食品NO選択用.WFM" , 位置 = (50 , 50) , サイズ = (500, 250) , ハンドル = &ハンドル1 , カーソル位置 = @テキスト_10 , 編集表 = 開く /* Webで表示する関係で二行以上になる場合がありますが、前行の『ウィンドウ作成』からここまでは一行です。*/
ウィンドウ会話 &ハンドル1 , カーソル=↓ 初期項目 = @テキスト_10 ,ボタン = &ボタン名

条件(&NO3C = #UNDEF) &食品NO = #CAT(#STR(&NO1,2),"-",#STR(&NO2,3))
条件(&NO3C<>#UNDEF) &食品NO = #CAT(#STR(&NO1,2),"-",#STR(&NO2,3),"-",&NO3C)

絞り込み [食品NO] = &食品NO

*-----------------------------------------------------------------------------
* この行以降に各項目データ([項目]で標記する)を、該当する変数に代入する処理を加える。
* ここではその第一段として、項目値[食品名]の内容、つまり食品名だけを&食品名という変数
* に代入している。
&食品名 = [食品名]
*-----------------------------------------------------------------------------

ウィンドウ作成 表 , 位置 = (50 , 50) , サイズ = (500, 250),ハンドル=&ハンドル2 , カーソル位置 = 先頭行
ウインドウ会話 &ハンドル2 , 初期項目 = [食品NO]
ウィンドウ終了 &ハンドル2

ウィンドウ作成 "C:\栄養計算\食品NO選択用.WFM" , 位置=(50 , 50) , サイズ = (500, 250),ハンドル = &ハンドル1 , カーソル位置 = @テキスト_10 , 編集表 = する
ウィンドウ会話 &ハンドル1 , カーソル=↓ 初期項目 = @テキスト_10 ,ボタン = &ボタン名
ウィンドウ終了 &ハンドル1

終了

個々のコマンドの説明の前に『/*』と『*/』で囲まれた部分と『行の先頭に『*』(全角でも半角でもよいです)』がある行は注釈行といい、一括処理では無視されます(処理の対象からはずれます)。

それでは、まず最初に『変数宣言』です。利用していない変数(&NO3、&NO1C、&NO2C)もありますが、それ以外の変数はこの一括処理のどこかで利用されるため、ここで変数宣言する必要があります。

2行目でいきなり、『ウィンドウ作成』という始めてのコマンドが出てきてましたが、前回作成したフォームを表示するためのコマンドです。

先ず始めに表示するフォーム名をコマンドの次に書きます。

位置、サイズはバランスを考えて適当な値を記述しましょう。

ハンドルは、ウィンドウを開くときに必要な整数型の変数を設定します。ウインドウ内の表やフォーム上の項目値などを編集したり、ウィンドウを閉じたりするときに、どのウィンドウに対して操作するかをハンドル名で指定します。

カーソル位置をしている場合、フォームならば『オブジェクト名(先頭に@マークをつけます)』で、表の場合には『先頭』、『最終』などで指定します。

『編集表=開く』という設定をするとフォームで関連づけた表を開きます。

『ウィンドウ会話』というコマンドで実際に表を操作したり、フォーム上の項目の編集をします。

ハンドル名、カーソルの移動方向などを設定します。

初期項目では最初にどこにカーソルを存在させるかをオブジェクト名で指定します。

『ボタン = 変数名』では、最後に押されたボタンのオブジェクト名を指定した変数名に代入します。

条件(&NO3C = #UNDEF) は&NO3Cが未定義(#UNDEF、#U、#未定義という関数で表現する)ならば

&食品NO = #CAT(#STR(&NO1,2),"-",#STR(&NO2,3))

という式で、&食品NOに&NO1を2桁で、&NO2を3桁で表し、#文字連結(#CAT)関数を用いて、両者をハイフン(-)で結合します。

同様に

条件(&NO3C<>#UNDEF) &食品NO = #CAT(#STR(&NO1,2),"-",#STR(&NO2,3),"-",&NO3C)

は、&NO3Cが未定義でなければ、&食品NOに&NO1を2桁、&NO2を3桁、&NO3をアルファベット1文字で表し、#文字連結(#CAT)関数を用いて、三者をハイフン(-)で結合します。

<<参考>> 関数の解説
#定義 データが定義されていることを表す関数です。
#DEF』,『#D』 などと書くこともできます。
#未定義 未定義値を表す関数です。
#UNDEF』,『#U』,『#う』  などと書くこともできます。
#文字列(数値 , 桁数) 数値を指定した桁数で揃えて文字列にします。
桁数を省略した場合にはそのまま文字列に変換されます。
#STR(数値 , 桁数)と書くこともできます。

上記の条件式で設定された&食品NOと成分表データベース内の項目値[食品NO]が同じならば該当する食品を『絞り込み』コマンドで絞り込みをします。

絞り込みの結果、1件分の食品が決まったら、その項目値を変数の中に代入します。

この一括処理は、サンプルなので食品名のみ代入していますが、実際には今後全ての項目値をそれぞれ該当する変数に代入する必要があります。

次の1ブロックの記述は実際の処理には不要ですが、1621件の食品データベースから該当する食品が1件のみ絞り込まれるところを実感してもらうために記述してあります。

最後に再度、『ウィンド会話』コマンドで絞り込まれた食品の食品NOと食品名のみ表示して今回のところは終わりです。

まだ、それぞれのボタンは機能しないので、実際に動作を確認するときには検索したい食品の番号を全て入力したら『閉じる(×)』ボタンを押して下さい。絞り込まれた1件分データのみ表示されている表を確認したら『閉じる(×)』ボタンを押して下さい。
そうすると再度『食品NO選択用.wfm』が表示されます。今度は前回と異なり、(絞り込まれた食品の)連結された食品NOと食品名が表示されます。
確認したら同様に『閉じる(×)』ボタンを押して下さい。

動作確認をしてみて気が付いたこととは思いますが、少し形が見えてきました。

<<課題>>
今回作成した一括処理ファイルを、別の場所(例えばデスクトップ)にコピー後、そのファイル名を『食品の検索B.cmd』と変更します。変更後のファイルを自分のフォルダに移動して下さい。

この新しい一括処理ファイルの内容を変更して、次のことができるようにして下さい。
1. 食品番号を入力して絞り込んだデータを、4回目で作成した『表示訂正用.wfm』というフォームファイルを用いて表示できるように変更すること。
そのためには多くの新しい変数を定義する必要があります。

原則として変数名はデータベースの項目名と同じものを用いること。但し、赤で印をつけたものには、その変数名を用いて下さい。

【数値型で定義】
&Kcal , &KJ , &水分 , &タンパク質 , &脂質 , &糖質 , &繊維 , &灰分 , &Ca , &P , &Fe , &Na , &K , &レチノール , &カロチン , &VA , &VB1 , &VB2 , &ナイアシン , &VC , &食塩相当量

【文字列型で定義】
 &備考
2. ここまで学習してきた例と同様にボタンの操作は考えなくてよいです。
3. 1.の課題をクリアするためには『表示訂正用.wfm』というフォームファイルの定義内容を変更する必要があります。

今回学習した『オブジェクトの属性』のところを参考にソース欄の枠内に1.で定義した変数名と同じ変数名をつけること。
   
         
    前のページへ    
    ホームページへ