過去の桐井戸端BBS (桐ver.8)
16477 データ入力途中で×などをクリックできないような一括処理を書く方法はありますか。 健忘 2002/06/27-16:34
前略 桐の初心者です。
1番目の項目が氏名、2番からの項目はそれぞれ、身長、体重、座高・・・となっているとします。
氏名の項目から離れた項目にデータを入力する際、氏名を確認しやすくするように
属性→列の表示で氏名の項目とデータ入力の間の項目を表示しないようにさせ
全てのデータを入力したら表示しないようにした項目を再び表示させ
元の表に復元して終了という一括処理をしていますが、
これをデータ入力の途中で×などをクリックして終了してしまうと
勿論表が復元されないで一括処理が終了してしまうのですが、これを避ける方法はないものでしょうか。
あるいは、氏名を確認しながら入力できる別な方法などあれば
是非ご教示くださいますようお願いいたします。
16478 Re:データ入力について MAT 2002/06/27-17:02
記事番号16477へのコメント
私も初心者ですが
この方法では
氏名の所にカーソルを合わせ属性-列固定を押せば右にスクロールしても氏名だけは表示したままになりますよ。
やめるときは属性-列固定解除です。
いかがでしょうか?
16479 Re:データ入力について 健忘 2002/06/27-18:57
記事番号16478へのコメント
MATさん、早速有り難うございます。
この場合、そのことを一括処理で処理したいのです。
つまり身長のデータを入力したいというメニューをクリックすると氏名と身長の項目だけが表示されるようになっているのです。
氏名の分だけ身長のデータを入力すれば先程書いたように表が復元されるようには命令してあるのですが、
どうしても最後まで入力しないで途中で終えてしまう人がいるのです。
それを制御したいのです。よろしくご教示お願いします。

16480 Re:データ入力について KH 2002/06/27-19:26
記事番号16479へのコメント
健忘さん、こんばんは。

>されるようになっているのです。氏名の分だけ身長のデータを入力すれば先程書いたように表が
>復元されるようには命令してあるのですが、どうしても最後まで入力しないで途中で終えてしま
>う人がいるのです。それを制御したいのです。

最後まで入力しないで×を押す人の操作をどのように制御したいのでしょうか?
一括処理を終わらせてしまわないようにしたいのでしょうか?
また、入力の状態はフォーム?表?どちらでしょうか。
表でも良いのですがフォームを使っていると比較的簡単?
に制御できそうですが。
 
行訂正コマンド等を使うと、×やENTERやESCキー等の押下を制御できると思いましたが。
16482 Re:データ入力について 健忘 2002/06/28-11:07
記事番号16480へのコメント
KHさんありがとうございます。
以下はとても見づらいですが桐の一括処理の一部のコピーですが行番号が消えてしまってます。
私の学校は2クラスの小規模なので一気にデータを最後まで入力できるのですが、
人数宇野多い学校は途中でやめたくなるようです。
その場合最後の生徒のところをクリックしてくれれば表が復元されて終了するのですが、・・・。
でもこんな方法は余り良くないのかとも思います。
途中で×やESCを受け付けないような制御が欲しいのです。
よろしくお願いいたします。

変数 整数 {&pop、&終了 }
変数宣言 数値 {&終了確認、&処理、&ESC判定、&行番号}
表 ”一学年”
表示幅 {[学年]M318,[組]M318,[N0]M318,[クラス]M635,[姓]M953:しない,[姓ふりがな]M1588:しない,[せい]
M0:しない,[名]M953:しない,[名ふりがな]M1588:しない,[な]M0:しない,[氏 名]M2223,[ふりがな]
M3175:しない,[性別]M635,[生年月日]M1270:しない,[身長]M794:しない,[体重]M794:しない,[BMI]M477:
しない,[コメント]M1270:しない,[座高]M794:しない,[メコ]M318:しない,[右視力]M477:しない,[左視力]
M477:しない,[眼科治療]M318:しない,[眼科の病気]M2223,[眼の病気治療]M318,[右聴力]M477,[左聴力]
M477,[耳鼻科治療]M318,[耳鼻科の病気]M2223,[耳鼻科の病気治療]M318,[歯列]M318,[歯垢]M318,[歯肉]
M318,[乳歯未処置歯数]M318,[乳歯処置歯数]M318,[永久歯未処置歯数]M318,[永久歯処置歯数]M318,[要注
意乳歯]M318,[要観察歯]M318,[歯科治療]M318,[番号]M477,[結果]M635,[結核治療]M318,[尿一次]M635,
[尿二次]M635,[尿治療]M318,[心電図]M635,[心電図治療]M318,[内科]M635,[内科コメント]M3175,[内科治
療]M318,[備考]M2858,[年度]M318,[欠]M635}
表示幅 {[学年]M318,[組]M318,[N0]M318,[クラス]M635,[姓]M953:しない,[姓ふりがな]M1588:しない,[せい]
M0:しない,[名]M953:しない,[名ふりがな]M1588:しない,[な]M0:しない,[氏 名]M2223,[ふりがな]
M3175:しない,[性別]M635,[生年月日]M1270:しない,[身長]M794:しない,[体重]M794:しない,[BMI]M477:
しない,[コメント]M1270:しない,[座高]M794:しない,[メコ]M318:しない,[右視力]M477:しない,[左視力]
M477:しない,[眼科治療]M318:しない,[眼科の病気]M2223,[眼の病気治療]M318:しない,[右聴力]M477:しな
い,[左聴力]M477:しない,[耳鼻科治療]M318:しない,[耳鼻科の病気]M2223:しない,[耳鼻科の病気治療]
M318:しない,[歯列]M318:しない,[歯垢]M318:しない,[歯肉]M318:しない,[乳歯未処置歯数]M318:しない,
[乳歯処置歯数]M318:しない,[永久歯未処置歯数]M318:しない,[永久歯処置歯数]M318:しない,[要注意乳
歯]M318:しない,[要観察歯]M318:しない,[歯科治療]M318:しない,[番号]M477:しない,[結果]M635:しない,
[結核治療]M318:しない,[尿一次]M635:しない,[尿二次]M635:しない,[尿治療]M318:しない,[心電図]M635:
しない,[心電図治療]M318:しない,[内科]M635:しない,[内科コメント]M3175:しない,[内科治療]M318:しな
い,[備考]M2858:しない,[年度]M318:しない,[欠]M635:しない}
カーソル移動方向 ↓
表表示
&行番号=1
位置指定 行番号=T
*繰り返し
繰り返し(.NOT #終端行)
行訂正 表、[眼科の病気]
*行訂正 表、[内科コメント]
&行番号=&行番号+1
繰り返し終了
表示幅 {[学年]M318,[組]M318,[N0]M318,[クラス]M635,[姓]M953:しない,[姓ふりがな]M1588:しない,[せい]
M0:しない,[名]M953:しない,[名ふりがな]M1588:しない,[な]M0:しない,[氏 名]M2223,[ふりがな]
M3175:しない,[性別]M635,[生年月日]M1270:しない,[身長]M794,[体重]M794,[BMI]M477,[コメント]
M1270:しない,[座高]M794,[メコ]M318,[右視力]M477,[左視力]M477,[眼科治療]M318,[眼科の病気]M2223,
[眼の病気治療]M318,[右聴力]M477,[左聴力]M477,[耳鼻科治療]M318,[耳鼻科の病気]M2223,[耳鼻科の病気
治療]M318,[歯列]M318,[歯垢]M318,[歯肉]M318,[乳歯未処置歯数]M318,[乳歯処置歯数]M318,[永久歯未処
置歯数]M318,[永久歯処置歯数]M318,[要注意乳歯]M318,[要観察歯]M318,[歯科治療]M318,[番号]M477,[結
果]M635,[結核治療]M318,[尿一次]M635,[尿二次]M635,[尿治療]M318,[心電図]M635,[心電図治療]M318,
[内科]M635,[内科コメント]M3175,[内科治療]M318,[備考]M2858,[年度]M318,[欠]M635}

一括処理実行 ”眼科”

16484 Re:データ入力について KH 2002/06/28-22:54
記事番号16482へのコメント
健忘さん、こんばんわは。

>えてしまってます。私の学校は2クラスの小規模なので一気にデータを最後まで入力できるのですが、人数
>宇野多い学校は途中でやめたくなるようです。その場合最後の生徒のところをクリックしてくれれば表が復
>元されて終了するのですが、・・・。でもこんな方法は余り良くないのかとも思います。途中で×やESCを受
>け付けないような制御が欲しいのです。よろしくお願いいたします。

 ×は一括処理の停止・継続のことを言っていますか?表の保存のことを言っていますか?
それによって大分違って来ると思いますが・・・

 解答になっていませんが、お許しください。
 根本的な部分になってしまいますが、データが基本的に全生徒の並び或いは学年別のファイルで各学年全生徒に
なっているものと思われます。
このような場合、入力は各クラスごとが基本になると思います。
 1クラスとしても40人程度となりますので、途中で入力を停止して、更に処理を止め桐を終了して
他の方にコンピュータ使用を譲らなければなければならないこともあるのではないかと思われます。
そのための×やESCでの制御処理は必要ではないでしょうか。

16487 システムの組み方のポイント 佐田 守弘 2002/06/29-00:20
記事番号16477へのコメント
健忘さん
課題はおおよそ把握できました。
「桐の初心者」と書かれておりますが、
MS-DOS版桐時代にかなり一括処理の経験があると見受けます。
ただし、その方法が現在のWindows版桐では必ずしも適切でないところに、質問のポイントがあると考えます。

●入力終了の方法
問題とされている、入力途中でESCキーを押したり、×ボタンのクリックで表ウインドウを閉じてしまう事は、
ウインドウアプリの扱いとしては至極当然の事です。
つまり「その様な事をするな。できない様にせよ」という方が不自然なのです。
つまり、いつでも自由にESCキーや特定のボタン、あるいはウインドウクローズの×ボタンで終了できるようにする事が
大切だと思います。

書かれております一括処理は、かなり高度な作り方です。
これはMS-DOS版時代に、予定したそう災害を許さない方法として私も使っておりました。
しかし、このままではWindows桐では無理があります。
なぜなら気がつかれている通り、×ボタンで表ウインドウを閉じると、
一括処理が破たんしてしまうからです。
そして表編集ではこれを禁止する方法はありません。

●一括処理で行うなら
ウインドウ作成とウインドウ会話コマンドで表編集を行うのが良いかと思います。
この場合の終了方法は、×ボタンでウインドウを閉じます。

●理想的には
この場合にはフォーム編集を使うのが適切でしょうね。
入力させたい氏名と項目からなる入力フォームをいくつか作り、
何を入力させるかによって、使用するフォームを使い分けます。
フォームは作成時に選んだ項目だけが表示編集できるので、フォームを選べば、
表示幅コマンドで表示項目を選ぶのと同じ効果になります。

質問では、入力させる項目は1項目だけで、氏名とその項目だけを表示すると書かれていますが、
この方法では入力項目の数だけ、フォームを作る事になります。
私の考えでは、身長、体重、座高や、眼科関係、歯科関係という様に、
いくつかにグループ分けをして、それらの複数は1つのフォームに同時に表示した方が効率的かと思います。

●具体的には
この場合、メニューはフォームで作ります。
このメインメニューに「体格」「眼科」「歯科」「尿検査」の様なメニューをコマンドボタンで作ります。
そして、そのコマンドボタンに機能名に「開く」、パラメータに入力のフォーム名を指定すれば、
それぞれの入力フォームが開けます。
そして、それぞれの入力フォームでは、「終了」ボタンを作っておき、
このボタンにフォームを閉じる機能を設定しておけば、入力フォームを閉じて元のメインメニューに戻れます。

イベントを使えばいろいろと便利な事ができますが、
イベントを使わずとも、今行っている程度の事は可能かと思います。

佐田守弘(KS-00119)



16488 補足:表データの持ち方 佐田 守弘 2002/06/29-00:29
記事番号16487へのコメント
●表の設計
表の定義について補足しておきます。
使われている表には、氏名や生年月日など基礎的なデータも一緒に入っている様に見受けます。

もちろんこのままでも構わないのですが、好ましくは、生徒の基礎データと健康診断データは表を分けておいた方が良いでしょう。
そして、学籍番号の様なデータがあると思いますので、これをキー項目として、
生徒名簿から表引きをしたり、あるいは結合表を使えば、健康診断データの方には、
学籍番号だけを持てばよく、生徒の氏名や年齢などのデータは必要なくなります。

またどの単位で健康診断のデータを作るかですが、学校全体で1つの表にまとめた方が好ましいと思います。
この場合でも、イベントを多少使いますが、フォーム上で学年とクラスを指定して
クラス単位でデータを入力するといった事も可能です。

佐田守弘(KS-00119)

16490 Re:有り難うございました 健忘 2002/06/29-08:01
記事番号16488へのコメント
 MATさん、KHさん、そして佐田さん、いろいろなご教示有り難うございました。
ご意見を参考にしながら健忘症の頭をひねって頑張ってみます。本当に有り難うございました。
16491 Re:データ入力について 今村 誠 2002/06/29-10:47
記事番号16479へのコメント
健忘さんこんにちは、表示条件の保存がありますので、いくつかの条件を保存して
それを選んではいかがでしょうか、何故か1番の条件は呼び出せないので少なくとも
2つ以上表示条件を保存して試験してみてください。
私もKHさんと同じ意見で、途中からやめても同じ所から始められるようにした方が良いと思います。
ある程度桐を上達すると、一括は融通が利かないと思うようになるので
「こんなのがあると便利」な部分だけを作った方がよいと思います。

変数宣言 整数{&pop,&終了},数値{&終了確認,&処理,&ESC判定,&行番号}
変数宣言 文字列 {&表示条件,&表名,&索引名}&表名="一学年.tbl"
表 &表名
ウィンドウ位置 最大化,-1   /* 桐を最大にします*/
表表示
ウィンドウリスト取得 &処理
ウィンドウ位置 最大化,&処理
&pop=#処理条件数(1)
cond(&pop>1) call 表示条件()
 if (&pop>1)
 &表示条件=&表示条件+","+"桐を終了",&ESC判定=&pop
  繰り返し
  メニュー2 &pop,&ESC判定,(3,80),"表示幅を変更(esc中止)",&表示条件
  if (&pop=0)
   表示幅 *
   繰り返し中止
  else if (&pop<&ESC判定)
表示条件読み込み 条件名=#対応文字列(&表示条件,&pop),開始条件=無効
   else
終了 桐  /* ここは繰り返し中止が良いかもしれない*/
  end
if (#FSIZE("行位置.var")>1)
readvar "行位置.var",*,終了状態=&処理   /*索引を削除するとエラーとなるので*/
   条件 (&索引名<>"") 並べ替え 索引名=&索引名 /*行位置.varファイルを一度削除の事*/
   ジャンプ 行番号=&行番号  /*ID(主キー)等があればそれを検索した方がより良い*/
end  /* カーソルの移動方向はctrl+alt+矢印で替えられることを説明したが良い*/
    表形式編集 カーソル=↓,画面消去=しない,更新=許可,許可作業=*,終了状態=&処理
    行番号 &行番号
    cond (#索引属性数>0) call 索引属性()
   &索引名=#cond(#整列状態>0,#対応文字列(&索引名,#整列状態),1,"")
    変数書き出し "行位置.var",{&行番号,&索引名},終了状態=&処理
   繰り返し終了
 end
*表示条件が2つ以上あれば↓この行↓はいらない
 表形式編集 カーソル=↓,画面消去=しない,更新=許可,許可作業=*,終了状態=&処理
終了  /* 名札の場合 手続き終了になると思う*/
******************一般手続*************
proc 表示条件()
&表示条件=#処理条件名(1,1)
  for &実行リターン=2,50,1
      cond(#処理条件名(1,&実行リターン)<>"") \
&表示条件=&表示条件+","+#処理条件名(1,&実行リターン)
end
end
proc 索引属性()
&索引名=#索引属性名(1),&実行リターン=#索引属性数
cond (#索引属性数=1) return
   for &終了確認=2,&実行リターン,1
&索引名=#CAT(&索引名,",",#索引属性名(&終了確認))
   end
end
16492 Re:感謝感激です。 健忘 2002/06/29-16:12
記事番号16491へのコメント

> 今村 誠さん 有り難うございます。早速試してみるつもりです。
それにしても、昨日から私大変感激しております。
皆さん大変ご親切な方ばかりで、もっと早くから投稿すれば良かったなぁと思っております。
今後ともよろしくお願い致します

戻る