イベント初心者講座 その2 または The Compleat Angler For Kiri 桐V8の釣魚大全
「かっこう」掲示板の投稿記事から、主に藤野さんとONnojiの問答集を作りました。何か役に立つ話が見つかるカモ?
トップページに戻る あらすじ その1 その2 その3 その4 その5 その6 その7 その8 その9
イベント初心者講座第1弾 第2章 - 藤野 2002年01月30日 21時05分イベント初心者講座第1弾 第2章 - 藤野 2002年01月30日
21時05分
前回で今回の写真展準備のための保存や準備処理が完成です。
次は今回要綱を入力する表、及びフォームを作る必要があります。
表 写真展要綱(ハガキ用).TBL
定義内容
記入例
回数 数値 第51回
会期(開始日)文字列
曜日(開始日)文字列 H.13.11.2(金)〜5(月)
時間(開始日)文字列 10時〜18時
会期(終日) 文字列 *上記のようになりますので文字列
曜日(終日) 文字列 *にしました
時間(終日) 文字列
会場 文字列
会場住所 文字列
会員名 文字列
コメント1 文字列 挿入初期値に ポストカード差し上げます
コメント2 文字列 挿入初期値に ご芳志はご辞退申し上げます
事務局住所 文字列
事務局電話 文字列
メニューフォームはNULLホームで今回要綱のボタンを押すと写真展
要綱(ハガキ)Wfmが開くようにしました。
オブジェクト名 今回要綱入力CLICK
今回要綱入力
開く "写真展要綱(ハガキ)Wfm"
写真展要綱(ハガキ)Wfmが開きます
コマンドボタンは 終了(X)だけです
ここは コマンドボタン 写真展要綱(ハガキ)Wfm終了
オブジェクト名 終了&X
閉じる
タブオーダーはt回数がOFF
t会期(開始日)以後はONです
会期開始日を入力すると曜日が自動で入力する方法も考えて
見ましたが、カレンダーがあればそのまま入力できるかな
と思いH.13.11.2 (金) などテキストに入力します。
入力後イベントなどで整形できるのでしょうが・・・。
こんな感じですがいかがでしょうか?
Re:イベント初心者講座第1弾 第2章 - ONnoji
2002年01月30日 22時31分
> 前回で今回の写真展準備のための保存や準備処理が完成です。
> 次は今回要綱を入力する表、及びフォームを作る必要があります。
> 会期開始日を入力すると曜日が自動で入力する方法も考えて
> 見ましたが、カレンダーがあればそのまま入力できるかな
> と思いH.13.11.2 (金) などテキストに入力します。
> 入力後イベントなどで整形できるのでしょうが・・・。
> こんな感じですがいかがでしょうか?
第2章 始まりですね。
ご返事には少しお時間をください(^^ゞ。
お手数おかけします - 藤野 2002年01月30日
22時51分
文章で説明するのって結構大変です。
分かりにくい時は言ってください、ファイルメールで送ります。
よろしくお願いします。
第2章フォームは少し休みまして印刷イベントについて
- 藤野 2002年02月02日 00時03分
ご多用中すみません、フォームは少し休憩です。
急ぎません時間が空いた特ご指導お願します。
休憩中に、印刷イベントについて質問です。
NULLファームから手続きで下記のようにしました
手続き定義開始 cmdハガキ印刷click()
*ハガキを印刷します
表 "写真展住所録.TBL"
変数宣言 自動,数値{&ans}
変数宣言 自動,文字列 {&msg}
&msg="ハガキを印刷しますよろしいですか?"
確認 &msg,&ans
if(&ans)
レポート印刷 "鼎案内.rpt",開始ページ=1,終了ページ=0,編集表=する,部数=1,繰り返し数=1,罫線印字=する,カラー印刷=する,ソート=しない,
&msg="印刷終了しました"
else
&msg="キャンセルしました"
確認 &msg
end
終了 表 編集対象表
手続き定義終了
実は印刷のとき範囲を指定したいのですが・・・・
このように考えてみました
@ 表にNOの項目を増やし直前値+1を印刷のイベントの最初に
行い、NOを1〜50とかに範囲指定絞込みで実行する。
A 行番号を取得して1行から50行のように指定する。
@の方法なら出来そうなきがしますがAは&行番号などで上手く
指定できるのでしょうか。
Re:第2章フォームは少し休みまして印刷イベントについて
- ONnoji 2002年02月02日 16時34分
藤野さんへ
> NULLフォームから手続きで下記のようにしました
> 手続き定義開始 cmdハガキ印刷click()
> *ハガキを印刷します
> 表 "写真展住所録.TBL"
> 変数宣言 自動,数値{&ans}
> 変数宣言 自動,文字列 {&msg}
> &msg="ハガキを印刷しますよろしいですか?"
> 確認 &msg,&ans
> if(&ans)
> レポート印刷 "鼎案内.rpt",…省略…
> &msg="印刷終了しました"
> else
> &msg="キャンセルしました"
> 確認 &msg
> end
> 終了 表 編集対象表
> 手続き定義終了
> 実は印刷のとき範囲を指定したいのですが・・・・
> このように考えてみました
> @ 表にNOの項目を増やし直前値+1を印刷のイベントの最初に行い、NOを1〜50とかに範囲指定絞込みで実行する。
> A 行番号を取得して1行から50行のように指定する。
> @の方法なら出来そうなきがしますがAは&行番号などで上手く指定できるのでしょうか。
拝読しましたが…(^^ゞ…藤野さんがどうしたいのか曖昧でよく理解できません。
50行印字したら、いったん停止して、「続けますか?[OK][キャンセル]」を出すという意味ですか?
葉書だからこの場合は50枚になるかもしれませんが…
印字は先頭行から開始するのですか?
途中行から開始するのでしょうか?
もしも、途中行から印字するとしたら、どのように行を指定するのでしょうか(コマンドとは別の話です)?
追伸
"手続き定義開始 cmdハガキ印刷click(
)" と書くのはいい習慣ですね。
さっそく実行していただいてありがとうございます。
こうすると、
(1)フォームにオブジェクト名が「cmdハガキ印刷」というコマンドボタンオブジェクトが存在する
(2)cmdハガキ印刷の標題は「ハガキ印刷」である
(3)このコマンドボタンの機能名:「手続き実行」でこの一般手続きが呼び出さている
ということが、何の説明がなくてもすぐにわかるでしょう。
こういうちょっとした工夫がわかりやすいプログラムを作るのです。
なお、「手続き定義開始 cmdハガキ印刷click(
)」は正確にはイベントではありません。
正しくは一般手続きですが〜、が〜、あまり細かいことはいいですか〜。(^^ゞ
改めて印刷一般手続きについて - 藤野 2002年02月02日
18時04分
手続き定義開始 cmdハガキ印刷click()
> *ハガキを印刷します
表 "写真展住所録.TBL"
変数宣言 自動,数値{&ans}
変数宣言 自動,文字列 {&msg}
&msg="ハガキを印刷しますよろしいですか?"
確認 &msg,&ans
if(&ans)
レポート印刷 "鼎案内.rpt",…省略…
&msg="印刷終了しました"
else
以下省略
さて600名ほどハガキを出す必要があります。
でも一度に600名は無理です(時間の関係でインクジェットでは無理)
そこで今日は50人まで明日は51人から100人まで・・・・
というように、分けてプリントしたいと思います。
if(&ans)
"何行目から印刷しますか?"。"何行目まで印刷しますか?"。
1行目から50行目まで
翌日は作業を開始するとき
"何行目から印刷しますか?"。"何行目まで印刷しますか?"
51行目から100行目までのようにして
行を絞り込んで印刷したいのです。
この後 レポート印刷 "鼎案内.rpt",…省略…
この説明で分かりますか?
Re:まずコマンドのことはひとまず忘れてください。
- ONnoji 2002年02月02日 22時27分
藤野さんへ
> さて600名ほどハガキを出す必要があります。
> でも一度に600名は無理です(時間の関係でインクジェットでは無理)
> そこで今日は50人まで明日は51人から100人まで・・・・
> というように、分けてプリントしたいと思います。
> "何行目から印刷しますか?"。"何行目まで印刷しますか?"。
> 1行目から50行目まで
> 翌日は作業を開始するとき
> "何行目から印刷しますか?"。"何行目まで印刷しますか?"
> 51行目から100行目までのようにして
> 行を絞り込んで印刷したいのです。
> この説明で分かりますか?
はやる気持ちはわかりますが、まずコマンドのことはひとまず忘れてください。
"何行目から印刷しますか?"ですか…
なるほど、「何行目から何行目まで」というのは一見すると良さそうですが、
これは行に着目していて、データに着目していませんね。
何行目というのは、正確にはその時の何行目です。
何行目という指定では、常に同じデータとは限らないので具合悪いですよ。
ちょっと寄り道をして、データのお話をいたしましょう。
600名のデータがあるわけですよね。
データを考える場合、「データとは現実の実体に対応したものである」という基本的な性質があります。
ですから、人という実体の600人の集合に対してデータを用意するということになるわけです。
したがって、一人を1行に記録するというのが正しい方法です。
ところが、600人も人がいると同姓同名の人も出てきます。
ある人物を特定する場合、名前(姓名)が不向きなことは用意に想像できますよね。
電話番号なら大丈夫でしょうか?しかし、これも絶対に特定できるか怪しいところがあります。
したがって、ある人物を特定するにはその人物の名前や電話番号などといった属性を用いるのはよくないのです。
そこで、実体とは別に、一人一人に重複しないデータを割り振ることが必要になります。
これは一般にはIDといわれるものですが、重複しないデータであれば何でもいいのです。
学生時代の学籍番号や運転免許証やパスポートの番号がこれにあたります。
なおIDは、数字の0〜9を用いた番号でなくてもかまいません。
もう一度、重複しないデータであれば何でもいいということを思い出してください。
例えば自動車のナンバーにはひらがなが一部使われています。
ただ、一般的には数字の0〜9を用いたほうが、IDの取り扱いが簡単になります。
ここで注意です。数字の0〜9を用いるのだから数値だと早合点してはいけません。
数値というのは重量や高さとか、試験の点数といった、掛けたり割ったり足したり引いたりするための値のことです。
IDの目的は一意にデータを特定するものであって、IDは計算の対象ではありません。
したがってIDは文字列であることが自然です。(^^ゞ
もちろん取り扱いのことを考えて、数値にしても問題ありません。(T_T)
さて、話を戻しましょう。
> "何行目から印刷しますか?"。"何行目まで印刷しますか?"。
という方法は適切でしょうか?
600人の一人一人を特定するためのIDとなるデータは用意してあるのでしょうか?
リプライをお待ちしています。
なお、リプライには手続きはお書きにならないで下さい。
まず、データの設計をまとめましょう。
追伸
コマンドで考える前に、データの設計の方が優先します。
これはプログラムを作る場合の基本です。
データが先で、プログラム論理は後です。是非覚えてください。(^^ゞ
なお、ご注文された書籍にはデータ中心設計という章がありますのでご一読下さい。
Re:まずコマンドのことはひとまず忘れてください。
- 藤野 2002年02月02日 23時06分
早速レスありがとうございます。
IDですが今は設定していません。
写真展の案内状ぐらい住所と氏名を入れて印刷できればいいや、ぐらい
のキモチでやっていました。
ONnojiさんの説明でIDは凄く大事な事なのですね、そういえば
1商品は1コードなおかつコードは重複禁止にチェックをなどど以前に
言われたことがあります。
行番号を使って手続きが出来たのですが(上手い具合に動く)これは
IDの件が終了してからにします。
本は明日届きます。
Re:案内状番号という項目を追加 - ONnoji 2002年02月03日
10時32分
藤野さんへ
> IDですが今は設定していません。
> 写真展の案内状ぐらい住所と氏名を入れて印刷できればいいや、ぐらい
> のキモチでやっていました。
了解しました。
IDというといかめしいので、IDと呼ばずに案内状番号と呼ぶことにしましょう。
お年玉付きの年賀状にある、番号と同じようなものと考えればいいですね。
したがって、案内状番号という項目を追加してください。
データ型は数値型にしましょう。
[案内状番号]は計算対象ではないのですが、取り扱いが楽なので数値型でいきましょう。
項目を追加したら、項目置換で計算式に #連番
を指定して置換してください。
そうすると、1から600の連番が振られるはずです。
ダイレクトメールの場合には、送ったものの住所が間違っていて戻ってくることが考えられますよね。
そこで、ハガキの任意の場所に[案内状番号]を印字しておくと便利なのです。
戻ってきたハガキの[案内状番号]を見れば、名前で検索しなくても、
ハガキにい印字された[案内状番号]の一致するデータがある行が誤っているということになります。
50人印字する場合には、
「印字を始める案内状番号? [9999]」「以降何件印字しますか? [9999]」という感じの対話操作が考えられます。
また、印字の場合には、常に印字失敗を想定する必要があります。
紙が詰まって印字を中断した。(ジャムるといいます。)
印字が薄くてもう一度印字する必要がある。
といったことは日常茶飯事ですね。
この場合も「印字を始める案内状番号? [9999]」「以降何件印字しますか? [9999]」で対応できそうですね。
以上を参考にしてプログラムしていただきたいのですが…その前に、
必ず、新しいコマンドボタン=オブジェクト名:cmdテスト、標題:テスト
を作り、
新しい一般手続き cmdテストclick( ) で試してください。
このようにテスト用のものを作ると、
すでに完成?している部分をいじり壊さないで済みます。
ところで実際にレポート印刷すると紙が無駄になります。
レポートコマンドはコメント行にして、あたかも実行したかのようなつもりになってください。
それでは以上のことを参考にしてテストプログラムを作ってみてください。
リプライをお待ちしています。
追伸
プログラムは最初から凝った内容にしないことがコツです。
凝るとどうしても内容が複雑になります。
基本的な流れが重要なのです。おまけや飾りは重要ではありません。
さっそく作って見ました - 藤野 2002年02月03日
21時41分07秒
項目を追加して、早速下記のように手続きを書いてみました。
いかがでしょうか?
手続き定義開始 cmdハガキテストclick()
*ハガキを印刷します
表 "写真展住所録.TBL"
変数宣言 自動,数値{&ans}
変数宣言 自動,数値{&案内状番号,&案内状番号1,&案内状番号2}
変数宣言 自動,文字列 {&msg}
キー入力 (20,20),プロンプト="案内状開始番号を入力して下さい",&案内状番号1
キー入力 (20,20),プロンプト="案内状終了番号を入力して下さい",&案内状番号2
絞り込み [案内状番号] {&案内状番号1 <=[]<=&案内状番号2
}
&msg="案内状番号"+#文字列(&案内状番号1)+"〜"+#文字列(&案内状番号2)+"を印刷しますよろしいですか?"
確認 &msg,&ans
if(&ans)
レポート印刷 "鼎案内.rpt"・・・・省略
&msg="完了しました"
絞り込み解除
else
&msg="キャンセルしました"
確認 &msg
絞り込み解除
end
終了 表 編集対象表
手続き定義終了
Re:さっそく作って見ました - 【多遊】 2002年02月03日
22時08分
一般のお話ですが・・・
> if(&ans)
> レポート印刷 "鼎案内.rpt"・・・・省略
> &msg="完了しました"
>
> 絞り込み解除
> else
> &msg="キャンセルしました"
> 確認 &msg
> 絞り込み解除
> end
この場合、印刷してもしなくても 「絞り込み解除」を行うのですから、
end の 外に1回の記載ではいかがですか
また、内容を拝見すると特に印を付けるとかもされてないようですので、
> 終了 表 編集対象表
より、「中止」コマンドが早く終了すると思いますが・・・・
ただ、私も構造化とかはあまりわかりませんので、よけいなお世話でしたら
申し訳ございません。
Re:さっそく作って見ました - 藤野 2002年02月04日
18時46分
多遊さんどうもありがとうございます。
絞込み解除のところは、実は迷ったのです、中止だから
当然、絞込みしないよなとか・・・。
いかんせん、一般手続などは記述を始めてあまり日が
たっていませんので参考にさせていただきます。
中止の件も早速実験します。
色々、勉強になります。今後ともよろしくお願いします
Re:別のツリーに続きを作りました - ONnoji
2002年02月04日 10時39分
藤野さんへ
> 項目を追加して、早速下記のように手続きを書いてみました。
> いかがでしょうか?
> 手続き定義開始 cmdハガキテストclick()
> *ハガキを印刷します
> 表 "写真展住所録.TBL"
> 変数宣言 自動,数値{&ans}
> 変数宣言 自動,数値{&案内状番号,&案内状番号1,&案内状番号2}
> 変数宣言 自動,文字列 {&msg}
> キー入力 (20,20),プロンプト="案内状開始番号を入力して下さい",&案内状番号1
> キー入力 (20,20),プロンプト="案内状終了番号を入力して下さい",&案内状番号2
>
> 絞り込み [案内状番号] {&案内状番号1
<=[]<=&案内状番号2 }
> &msg="案内状番号"+#文字列(&案内状番号1)+"〜"+#文字列(&案内状番号2)+"を印刷しますよろしいですか?"
> 確認 &msg,&ans
> if(&ans)
> レポート印刷 "鼎案内.rpt"・・・・省略
> &msg="完了しました"
>
> 絞り込み解除
> else
> &msg="キャンセルしました"
> 確認 &msg
> 絞り込み解除
> end
> 終了 表 編集対象表
> 手続き定義終了
なるほど、上手に出来ましたね。
これはこれでOKですね。
なお、すでに気が付かれていると思いますが、エラー対策は不充分です。(最初の段階ですからOKですよ。)
&案内状番号2が&案内状番号1より小さな値だったら…?!
&案内状番号2が未定義だったら…?!(うっかりエンターしたら)
しかし、最初からエラー対策を考える必要はありませんから、最初の段階ではこれでOKなのです。
ということで、エラー対策は後でゆっくりやりましょう。
ところで、私が提唱するフォームアプリケーションでは、「キー入力」コマンドのように画面座標を指定するコマンドは一切使用しません。
画面座標を指定するコマンドは[一括処理実行]ウィンドウを使用する場合に限定すべきです。
画面座標を指定するコマンドの多くは[一括処理実行]ウィンドウ以外では動作しませんが、「キー入力」コマンドは動作しますね。
使えるから使うという考え方もあるでしょうけれど、「キー入力」コマンドは使わないようにしてください。
※「キー入力」コマンドを使うと一括処理の考え方から抜け出せません。
それでは、「キー入力」コマンドの代わりに何を使うか…???
答えは「コマンドでなくフォームを使う」です。
次のように新しいフォームを作ってください。
(1) 新しいNULLフォームを作る。(最初はNULLフォームで作りますが、後で編集対象表を指定します。)
(2) 変数管理でこのフォームの局所変数を作る
変数名:mBeginning 数値 ※変数管理ではアンパサンド記号(&)は省略します。
変数名:mEnd 数値
※〜1とか〜2のように番号で区別するのはよくないです。使用する目的がハッキリ分かる変数名にします。
(3) テキストボックスを2つ作り、それぞれのソースに
&mBeginning と &mEnd を指定します。
オブジェクト名:txtBeginning
オブジェクト名:txtEnd
(4) コマンドボタンオブジェクトを2つ作ります。
オブジェクト名:cmd実行 ※機能名はとりあえず指定しません。
オブジェクト名:cmd閉じる ※機能名1:表示 機能名2:閉じる
と、ここまで作ってみてください。
リプライをお待ちしています。
やっぱりフォームだった!! - 藤野 2002年02月04日
18時55分
ONnojiさん
フォームは一度考えたのですよ、フォームからフォームを呼び出す、方法ですね。
でも何かコマンドがあるはずとコマンドを当たってみたら前回のような結果に、なったのです。
でも不満もありました開始番号と終了番号が一行で入力できると便利だなでした。
でも出来た嬉しさでつい書き込みしました。
フォームなら1つのフォームで出来ますよね。
今晩、試して見ます。
それから本読み始めました・・・。
Re:やっぱりフォームだった!! - ONnoji 2002年02月04日
19時20分
藤野さんへ
> ONnojiさん
> フォームは一度考えたのですよ、フォームからフォームを
> 呼び出す、方法ですね。
> でも何かコマンドがあるはずとコマンドを当たってみたら
> 前回のような結果に、なったのです。
> でも不満もありました開始番号と終了番号が一行で入力でき
> ると便利だなでした。でも出来た嬉しさでつい書き込みしました。
> フォームなら1つのフォームで出来ますよね。
> 今晩、試して見ます。
成功を祈ります。
> それから本読み始めました・・・。
HIPOはあまり役に立ちませんので、
HIPOに関する部分は読み飛ばしてください。
リプライお待ちしてます。
フォーム出来ました でも・・・ - 藤野 2002年02月04日
19時22分
フォームできました。
でもcmd閉じる 機能名 表示を選ぶと 機能名2は破棄する
とかが出ます、閉じるが出ないのですが・・・・?
どこか違ってますか
機能名の選択で"編集"から 表示を選びました。
Re:機能パラメータリストは指定しません - ONnoji
2002年02月04日 20時16分
> フォームできました。
> でもcmd閉じる 機能名 表示を選ぶと 機能名2は破棄する
> とかが出ます、閉じるが出ないのですが・・・・?
> どこか違ってますか
> 機能名の選択で"編集"から 表示を選びました。
このように設定してください。
cmd閉じる
機能名 ※機能パラメータリストは指定しません
[1]表示
[2]閉じる
[3]なし
[4]なし
ここまでは出来ました。次は・・・ - 藤野 2002年02月04日
20時27分
閉じる
挿入できました。
次はどうするのですか?
Re:ここまでは出来ました。次は・・・ - ONnoji
2002年02月04日 20時48分
> 閉じる
> 挿入できました。
> 次はどうするのですか?
>
(1) フォームの属性の[編集対象表]タブで、
[参照表]と[編集対象表]を指定してください。
こうすると、表 "filename.tbl" は必要無くなります。
(2) cmd閉じる で [2]機能名:閉じる を指定したので、
"終了 表 編集対象表" は必要無くなります。
(3) コマンドボタン:cmd実行 は次のように設定してください。
機能名 機能パラメータリスト
[1]表示
[2]手続き実行 cmd実行Click
[3]なし
[4]なし
(4) 新しく作ったフォームと同じ名前のイベントファイルを作ってください。
さあ!後は、いままでの応用です。
頑張って下さい。(^^ゞ
こんな感じですが・・・。 - 藤野 2002年02月04日
23時13分
手続き完成しました。
ただしまだエラー処理はまったくしていません。
手続き定義開始 cmd実行click()
変数宣言 自動,数値{&ans}
変数宣言 自動,文字列 {&msg}
絞り込み [案内状番号] {&mBeginning <=[]<=&mEnd
}
&msg="案内状番号"+#文字列(&mBeginning)+"〜"+#文字列(&mEnd)+"を印刷しますよろしいですか?"
確認 &msg,&ans
if(&ans)
レポート印刷 "鼎案内.rpt"・・・省略
&msg="完了しました"
else
&msg="キャンセルしました"
確認 &msg
絞り込み解除
end
手続き定義終了
質問です。
フォームが開いて&Beginningを入力するときスペースキーを叩かないと入力モードにならないのですが。
初めから入力モードにするには入力前イベントが必要なのですか?
入力前イベント
&Beginning=#未定儀
訂正
とか・・・・。
よろしくお願いします
Re:こんな感じですが・・・。 - ONnoji 2002年02月05日
11時00分
藤野さんへ
> 手続き完成しました。
> ただしまだエラー処理はまったくしていません。
エラー処理は最後にゆっくりやりましょう。だから今はぜんぜん気にしないことです。(^^ゞ
> 手続き定義開始 cmd実行click()
> 変数宣言 自動,数値{&ans}
> 変数宣言 自動,文字列 {&msg}
> 絞り込み [案内状番号] {&mBeginning
<=[]<=&mEnd }
> &msg="案内状番号"+#文字列(&mBeginning)+"〜"+#文字列(&mEnd)+"を印刷しますよろしいですか?"
> 確認 &msg,&ans
> if(&ans)
> レポート印刷 "鼎案内.rpt"・・・省略
> &msg="完了しました"
> else
> &msg="キャンセルしました"
> 確認 &msg
> 絞り込み解除
> end
> 手続き定義終了
なるほど、上手に出来ましたね。
これはこれでOKです。
フォームに編集対象表があるのだから、「表
"filename.tbl"」コマンドで表を開く必要はありませんね。
さらに、「終了 表 編集対象表」コマンドで表を閉じる必要もありません。
※この場合「表 "filename.tbl"」「終了
表 編集対象表」を実行しようとしてもエラーになりますが…(^^ゞ
フォームが開くときに編集対象表が開くこと、
編集対象表が閉じられるのは、そのフォームが閉じられるときということを覚えてください。
この一般手続きは一応OKなのですが、合格点は差し上げられません。
とても肝心なことが考慮されていないからです…???
それは絞り込みの結果の成功と不成功をまったく考慮していないからです。
プログラムで絞り込み(または検索)を行った場合には、
直ちに、その結果が成功( successful )だったか、不成功(
unsuccessful )だったか判断するのが基本です。
※不成功は結果であって、エラーではありません。ですからこれはエラー処理ではありません。
これは二者択一になりますので、if…else…end
を用います。
絞り込み(または検索)が成功のとき、行の位置は終端行になりません。
つまり #終端行 関数の返す値は0(ゼロ)です。
絞り込み(または検索)が不成功のとき、行の位置は終端行になります。
つまり #終端行 関数の返す値は1(イチ)です。
ところで、順当な結果を判断の基準にするのが普通ですから、成功を基準に判断します。
成功は #終端行 = 0 です。
しかし、「コラム3 論理値のこと」で説明しているように、
論理演算子 .not を用いて .not #終端行 とするのが基本です。
なお、#終端行 は #eof と書いてもいいです。
eof とは End Of File の意味です。
プログラムの世界ではeofという用語は一般的なものなので、#eof
と書くことを習慣にしてください。
なお、「絞り込み」コマンドを実行する前に「解除 *」コマンドで表を基本状態にすることも重要です。
「絞り込んでから解除するのではなく、解除してから絞り込む」ということを覚えてください。
以上のことから、概要は次のようになります。(これは概要です、応用してください。)
:
解除 *
絞り込み [案内状番号] {&mBeginning <=[]<=&mEnd
}
if ( .not #eof )
確認 "絞り込み成功"
確認 "印刷しますか?"
else
確認 "絞り込み不成功=該当するデータがありません"
end
:
さあ!後は、いままでの応用です。
頑張って下さい。(^^ゞ
追伸
> 質問です。
> フォームが開いて&Beginningを入力するときスペースキーを
> 叩かないと入力モードにならないのですが。初めから入力モード
> にするには入力前イベントが必要なのですか?
> 入力前イベント
> &Beginning=#未定儀
> 訂正
これは完成してからゆっくりやりましょう。
いっぺんにあれこれすると、わからなくなってしまいます。
一歩ずつ進みましょう。
エラー処理は今回も考えないでください。
ほとんどのエラーは入力値のエラーです。
変わってないといわれそうですが・・・(^^ゞ
- 藤野 2002年02月05日 19時40分
下記のようにしました、ちょっと確認のメッセージがたびたび
出ますが、これでいいのでしょうか。
それともう1つif else end if else end の繰り返し
になりますが、これはこれでいいのですか?
そのままONnojiさんのをコピーしただけのようですね (~_~;)
手続き定義開始 cmd実行click()
変数宣言 自動,数値{&ans}
変数宣言 自動,文字列 {&msg}
解除 *
絞り込み [案内状番号] {&mBeginning <=[]<=&mEnd
}
if ( .not #eof )
確認 "印刷用データーが選択されました"
確認 "印刷しますか?"
else
確認 "絞り込み不成功=該当するデータがありません"
end
&msg="案内状番号"+#文字列(&mBeginning)+"〜"+#文字列(&mEnd)+"を印刷しますよろしいですか?"
確認 &msg,&ans
if(&ans)
レポート印刷 "鼎案内.rpt",開始ページ=1,終了ページ=0,編集表=する,部数=1,繰り返し数=1,罫線印字=する,カラー印刷=する,ソート=しない,
&msg="完了しました"
else
&msg="キャンセルしました"
確認 &msg
絞り込み解除
end
手続き定義終了
Re:擬似コードを示します - ONnoji 2002年02月05日
20時44分
藤野さんへ
> 下記のようにしました、ちょっと確認のメッセージがたびたび
> 出ますが、これでいいのでしょうか。
> それともう1つif else end if else end
の繰り返し
> になりますが、これはこれでいいのですか?
> そのままONnojiさんのをコピーしただけのようですね (~_~;)
どうも…私が示した例が分りにくかったようですね。m(__)m
それでは〜、擬似コードを示しますので、桐V8のコマンドで書換えてください。(^^ゞ
※擬似コードは書籍のp118〜122を参照。