過去の桐井戸端BBS (桐ver.8)
14646 年賀状用の入力フォームを作っていますが、項目が毎年増えるので、項目名を変数で指定できないでしょうか 磯田 2002/01/02-07:41
あけましておめでとうございます。
本年はV9がリリースされるということでとても楽しみにしている一人です。
年賀状の整理をかねて住所録のフォームを作っているのですが、
その中で年賀状の出受の記録をつけるために、それぞれ[00受][00出][01受][01出][02受][02出]…
という項目を作成してフォームで表示させています。
ところが現在のフォームだと来年再来年は新たに[03受][03出]というオブジェクトを付け加えなければならずとても不便です。
できればフォーム上には
[2年前の受][昨年の受][本年の受]
[2年前の出][昨年の出][本年の出]
として、それぞれその年に応じてた項目を表示させ編集したいのです。
方法としては
 1.オブジェクトソースとしての項目名をイベントでその年に応じて設定する。
 2.ソースには変数を利用して該当する年の項目から値を読み込む。
があると思うのです。1の方法ができれば一番シンプルでいいのですが、方法がわかりません。
2の方法でイベントを使って途中まで作ったのですが、データの読込はできても書き戻しがうまくいきません。
助言をお願いします。

名札 メイン
編集表 "住所録原簿"
変数宣言 文字列,共通{&年賀[8],&賀出[8],&賀受[8],&読込}
変数宣言 数値,共通{&処理年,&i}
条件 (&月>10) &処理年=&年+1
条件 (&月<=10) &処理年=&年
繰り返し &i=1,8
  &年賀[&i] = #部分列(#文字列(&処理年),3,2)
  &処理年=&処理年 -1
繰り返し終了

繰り返し &i=1,8
  &読込=#連結("代入 &賀出[&i] = [",&年賀[&i],"出]")
  コマンド &読込
  &読込=#連結("代入 &賀受[&i] = [",&年賀[&i],"受]")
  コマンド &読込
繰り返し終了



手続き定義開始 フォーム::レコード移動(長整数 &行番号,長整数 &総件数,長整数 
&明細番号)
繰り返し &i=1,8
  &読込=#連結("代入 &賀出[&i] = [",&年賀[&i],"出]")
  コマンド &読込
  &読込=#連結("代入 &賀受[&i] = [",&年賀[&i],"受]")
  コマンド &読込
繰り返し終了
手続き定義終了

14650 Re:項目名を変数で 【多遊】 2002/01/04-09:49
記事番号14646へのコメント
磯田さん・みなさん>あけましておめでとうございます。
ことしもよろしくお願いいたします。
>ところが現在のフォー
>ムだと来年再来年は新たに[03受][03出]というオブジェクトを付け加えなければな
>らずとても不便です。
こうした不便から工夫が始まると思いますが、あとは方法ですね

>2.ソースには変数を利用して該当する年の項目から値を読み込む。
>2の方法でイベントを使って途中まで作ったのですが、データの読込
>はできても書き戻しがうまくいきません。助言をお願いします。

いろいろ工夫されてるのがわかりますが、別の方法でご紹介します。

>1.オブジェクトソースとしての項目名をイベントでその年に応じて設定する。
なお項目や変数は3年分で作成してますが、もっと多い年数でしたら
適当に追加下さい。配列変数でもいいです。


1.表の項目名
 [氏名][〒][住所]・・・[02出][02受][01出][01受][00出][00受][99出][99受]

2.フォーム(一覧表形式)
・ヘッダー部 ラベル作成(標題は、ラベル名からaを除いた内容)
 a氏名 a〒 a住所 a今年出 a今年受 a前年出 a前年受 a前々出 a前々受
・明細部 テキストオブジェクトにて
 t氏名 t〒 t住所 t今年出 t今年受 t前年出 t前年受 t前々出 t前々受
ソースは一般の項目はそれぞれ[氏名][〒][住所]・・・
 年度更新部分(t今年出 t今年受・・・・・・t前々受)は・・・、空白
・イベントは「フォーム開始」チェックする

3.イベントファイル(kev)
名札 メイン
  変数宣言 整数{&判定月}
  変数宣言 文字{&今年出,&今年受,&前年出,&前年受,&前々出,&前々受}
  &判定月=10

  ケース開始
    ケース(&月>=&判定月)
      &今年出=#右側文字列(#文字列(&年+1),2)+"出"
      &今年受=#右側文字列(#文字列(&年+1),2)+"受"
      &前年出=#右側文字列(#文字列(&年 ),2)+"出"
      &前年受=#右側文字列(#文字列(&年 ),2)+"受"
      &前々出=#右側文字列(#文字列(&年-1),2)+"出"
      &前々受=#右側文字列(#文字列(&年-1),2)+"受"
    ケース(その他)
      &今年出=#右側文字列(#文字列(&年 ),2)+"出"
      &今年受=#右側文字列(#文字列(&年 ),2)+"受"
      &前年出=#右側文字列(#文字列(&年-1),2)+"出"
      &前年受=#右側文字列(#文字列(&年-1),2)+"受"
      &前々出=#右側文字列(#文字列(&年-2),2)+"出"
      &前々受=#右側文字列(#文字列(&年-2),2)+"受"
  ケース終了


手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
  ケース開始
    ケース(#項目番号(&今年出)=#U)
      項目属性変更2 挿入&前年出,{&今年受}
      項目属性変更2 挿入&今年受,{&今年出}
  ケース終了
  手続き実行 定義変更()
手続き定義終了

手続き定義開始 定義変更()
  オブジェクト操作 @a今年出.標題 = &今年出
  オブジェクト操作 @a今年受.標題 = &今年受
  オブジェクト操作 @a今年出.標題 = &今年出
  オブジェクト操作 @a前年受.標題 = &前年受
  オブジェクト操作 @a前年出.標題 = &前年出
  オブジェクト操作 @a前々受.標題 = &前々受
  オブジェクト操作 @a前々出.標題 = &前々出
  オブジェクト操作 @t今年受.ソース = "["+&今年受+"]"
  オブジェクト操作 @t今年出.ソース = "["+&今年出+"]"
  オブジェクト操作 @t前年受.ソース = "["+&前年受+"]"
  オブジェクト操作 @t前年出.ソース = "["+&前年出+"]"
  オブジェクト操作 @t前々受.ソース = "["+&前々受+"]"
  オブジェクト操作 @t前々出.ソース = "["+&前々出+"]"
手続き定義終了

※上記内容のうち「フォーム・ソース」等は、半角です。
 表の項目幅や値集合は今回は考慮しておりません。
 なお判定は10月にしてますので、適当に変更してみてください。

ご不明な点は再度ご連絡下さいネ

14651 Re:項目名を変数で 幅田 2002/01/04-14:30
記事番号14646へのコメント
磯田さん

あけましておめでとうございます。
今年もよろしくお願い申し上げます。

>年賀状の整理をかねて住所録のフォームを作っているのですが、その中で
>年賀状の出受の記録をつけるために、それぞれ[00受][00出][01受][01出][02受]
>[02出]…という項目を作成してフォームで表示させています。

全く質問の答えではないので恐縮ですが、
「受」と「出」を別々の項目にしたら、毎年2つづつ項目が増えてしまい
それがいやなので、私の場合、[H12年賀]、[H13年賀]、[H14年賀]という風に、
1年にひとつだけ項目を増やすようにしています。
そして、入力するデータで、「出」「出受」「受」「喪中」という風に4種類に分けて入力しています。

そのようにしたら、絞り込む場合でも、いちいち絞り込み条件を設定する必要もなく、
出しただけの人は「出」
出して、受けた人は「出受」
受けただけの人は「受」
喪中でやりとりのなかった人は「喪中」
の文字で絞り込みすればいいので、簡単でわかりやすいと思いますが、いかがでしょうか?

ちなみに私の場合は年賀状にしか使わない(1年に1度しか使わない)ので
あえてフォームまで作っておりません。
質問の主旨とははずれており、どうもすみませんでした。

年賀状の宛名書きと住所録の管理など、専用の年賀状用ソフトとかを使ってもいいのかもしれませんが、
1年に1度しか使わないので、操作法を思い出すこととか、PCの環境も1年のうちにいろいろ
変わったりすることとかを考えると、普段使い慣れた「桐」で管理して宛名書きをしたほうが
わかりやすくて便利ですね。

14653 Re:項目名を変数で 佐田 守弘 2002/01/05-02:43
記事番号14646へのコメント
磯田さん
●まず質問の件
行訂正で項目名を変数で指定する場合、項目番号のみが指定できます。
そこで、#項目番号という関数を使って、項目名の文字列が何番であるかを調べます。
具体的には、
 行訂正 #項目番号(&年賀[&i])=<設定値>
の様な形になるかと思います。

●別法
他の方も指摘されていますが、この方法では項目数ばかり増えて仕方ないと思います。
そこで、私の場合には、文字列型で、[賀送]、[賀受]という項目を作り、それぞれ
「--21M0」
の様な記録します。ここで、
−:その当時付き合いなし
0:差出し対象外
1:賀状差し出し(受け取り)
2:受け取ってから出した(先に出したのでくれたらしい)
M:喪中欠礼
を記録します。

そして記録の桁位置は年号に対応させています。当初この方法は平成元年から始めたので、
平成年の数字と桁位置を対応させていました(桐ver.5版の住所録)。
そして現在は2000年以降について2000年を1桁目、2001年を2桁目に対応させ、#部分列関数で
所定の桁位置を取り出しております。

なおこの方式の住所録を2年前に出版する予定で作ってありました。いずれシェアウエアとして
公開するつもりでしたので、取りあえず私のサイトに掲載いたしました。
http://www.ne.jp/asahi/m.sada/kiri/JUSHO/JUSHOTOP.html
なおイベントファイルは非公開になって下ります点を御了承下さい。利用は可能です。

佐田守弘(KS-00119)

14655 できました 磯田 2002/01/05-04:19
記事番号14650へのコメント
【多遊】さん具体的なアドバイスありがとうございます。うまくいきました。
また項目挿入までイベントで処理されていて申し分ありません。
イベントの便利さが少しずつですがわかってきました。
桐は解説書が無いのが玉にキズですが、この掲示板がどんな解説書よりもすぐれた道しるべ
になってくれています。
これからもよろしくお願いします。
14656 Re:項目名を変数で 磯田 2002/01/05-04:34
記事番号14651へのコメント
幅田さんいつもお世話になります。この掲示板には本当にお世話になっています。
感謝です。
僕も去年まで年賀状の専用ソフトを使っていましたが、不必要な機能が多すぎたり、
データの加工ができなかったりで結局桐で住所管理をするほうが実用的だという結論に至りました。
またそのソフトを乗せてないとデータも見れないし。
桐ならば僕が持っているコンピュータにはすべて乗せてあるのでその点でも便利です。
住所録管理のテーブルやフォーム、レポートを作ることで桐の勉強にもなります。
フォームなどはイベントを利用すれば年賀状のソフトよりもはるかに使いやすいものができそうです。
イベントなるものを最初に聞いたときは「そんなもの必要なのか?」と思っていましたが、
使い慣れると一括処理よりも手軽に使えるものなのですね。
勉強頑張りたいと思います。これからもよろしくお願いいたします。
14657 Re:項目名を変数で 磯田 2002/01/05-04:50
記事番号14653へのコメント
佐田先生アドバイスありがとうございます。
なるほどそのようにすれば項目数が増えつづけるのを防ぐことができますよね。
そしてそれよりも年賀状をただもらった、送っただけでなく、もらった後で送ったとか送った後でもらったということを記録するということは
とてもいいアイデアですね。
早速取り入れたいと思います。
毎年項目数を増やしていくというのはデータベースの考え方から言うと邪道なのでしょうね。
きちんとデータベースの考え方を勉強する必要があるなとこのごろ感じています。
しかし、桐はデータベースのちゃんとした勉強をしていなくてもそれなりに使えてしまえるところが
すばらしいと思います。
データベースという一般庶民にはあまりなじめないものをとても身近なものにしてくれているように思います。
そういった意味でも桐のますますの普及を願ってやみません。

戻る