過去の桐井戸端BBS (桐ver.8) |
2840 | 一括処理中にファイルオープンエラーなどを処理したい | こざる | 1999/10/6-10:31 |
一括処理中にファイルオープンエラーなどを処理したいのですが やり方がわかりません。 一括処理中に他のAPにて「専有」形式?でテーブルをオープン されていると、「ファイルがありません」というエラーが 発生してしまいます。(OKボタン押下で復帰) 夜間バッチとして動作させたいので、メッセージを表示させたく ありません。どのようにエラーを判別して自動で処理するように できるのでしょうか? それとも一括処理ではできないのでしょうか? | |||
2842 | Re: | 宮城 | 1999/10/6-12:05 |
記事番号2840へのコメント こざるさん、こんにちは。 表コマンドでいいんでしたら、パラメーターで終了状態を変数にとり、 1(正常終了=ちゃんと開けたということ)でなければ遅延あたりで 時間を稼ぎ、分岐で表コマンドの前に戻すことはできます。ケース制 御ですがわかりますよね? 桐の表以外でしたら#ファイル使用関数を使います。 ただし、いずれにしても、表(ファイル)の状態が変わらなければ朝 までループしっぱなしになりますが・・・。 | |||
2843 | Re: | 宮城 | 1999/10/6-13:16 |
記事番号2842へのコメント こざるさんの実力を疑うわけではありませんが、念のため。他のかたの ご意見も伺いたく。 名札 表Aオープン 表 "A",終了状態=&終了状態 ケース開始 ケース(&終了状態<>1) 遅延 100 分岐 表Aオープン ケース終了 当然のことながら、同じ表を何回も開ける場合、その箇所ごとに名札名 を変えなくてはなりません。 さらに複数の表をこのやり方で開く場合、そういうプログラムが複数あ ったとすると、表を開ける順を揃えておかないと、 プログラム1、Aを開ける。 プログラム2、Bを開ける。 プログラム1、Bを開けようとしてループ突入。 プログラム2、Aを開けようとしてループ突入。 という悲劇(喜劇?)が起きるおそれもあります。 | |||
2844 | Re: | 幅田 | 1999/10/6-17:39 |
記事番号2840へのコメント DOSのver.5でやってたことが、ver.8で通用するのかどうか 試していませんが、 変数宣言 数値{&ANS} 繰り返し (.NOT #ファイル使用(”該当ファイル名”,1) 機能キー入力 (1,1)−(1,1),プロンプト=””,¥ カーソル=オフ,文字キー=無効,¥ 入力待ち=しない,バッファクリア=する,&ANS 条件 (&ANS=27) 繰り返し中止 繰り返し終了 分岐 (&ANS=27),キャンセル 表 ”該当ファイル名” . . 名札 キャンセル . . #ファイル使用を使って、該当ファイルが開けるかどうか を調べて、開けない間は無限ループに入ります。 開けると同時にループから抜けて、次へ進んで該当ファイルを開きます。 手動でキャンセルしたい場合は、ESCキーを押すと 名札 キャンセルへ分岐します。 | |||
2849 | Re: | 佐田 守弘 | 1999/10/6-23:21 |
記事番号2840へのコメント こざるさん 既に宮城さんが書かれております通り、一括処理コマンドの中で終了状態を取 る事により、エラーを回避できます。これについて、多少の付け加えを行いま す。 ●エラー処理の方法 桐の一括処理コマンドの中には、その時の状況によってコマンドが実行でき ないことが考えられるコマンドがあります。 例えばご質問の表を開くコマンドがそうですし、それ以外にも多数のコマンド があります。 この様なコマンドには、パラメータとして「終了状態=」があります。このパ ラメータを記述すると、コマンドを実行した結果が、指定した変数に戻されま す。この終了状態の戻値は、コマンドによって決まっており、この値を評価し て、コマンドが実行されたか、実行されなかった理由は何かを判断できる仕組 みになっています。 そして、このパラメータを省略した時には、コマンドが実行されないとエラ ーになります。しかしパラメータを付けた場合には、コマンドが実行できなか った場合であってもエラーにはならず、「コマンドが実行できなかった」とい う結果を返してコマンドが終了します。ですからエラーメッセージなどは出さ れません。 返された値をケースコマンドなどで判断し、実行できなかった場合には、そ の対処方法を行います。 ●表を再オープンする場合 方法は宮城さんが書かれている通りです。クライアントが多数あって、複数 のマシンで同じ表を開こうとした場合、極まれに、同時にぶつかり、同じ時間 待って再び同時にぶつかるといった事があり得ます。 そこで、遅延コマンドで遅延させる時間を一定値ではなく、例えば#乱数 (100)+100の様に指定して、待ち時間をランダマイズする方法が考えられます。 ●基本的には更新共有で開くべき サーバ上のファイル複数クライアントで利用する場合には、専有モードで開 かせず、更新共有モードで開かせるべきと考えますが、いかがでしょうか。 佐田守弘(KS-00119) | |||
2855 | Re: | こざる | 1999/10/7-20:49 |
記事番号2840へのコメント みなさん貴重な意見をありがとうございました。 桐のVer8からなのか知りませんが、便利な命令がありました。 #表オープン状態 この命令を使うと、表のオープン状態が取れるので、専有オープン されている場合、スキップできます。 とりあえず、これで回避することにいたしました。 | |||
2857 | Re: | 宮城 | 1999/10/7-21:08 |
記事番号2855へのコメント ちょっと気になります。#表オープン状態はヘルプでは「編集表の共有モード または更新モードを調べます。」となっており、自プログラムが現在開いてい る表の状態を調べるようにとれるのですが・・・。 それから、ほかの誰かが使っていたらとばしてしまってもよいような処理、ち ょっと想像がつきません。 最後に細かいことをいって申し訳ないのですが、#表オープン状態は関数であ り「命令(コマンド)」ではありません。 | |||
2861 | Re: | 佐田 守弘 | 1999/10/8-00:56 |
記事番号2857へのコメント こざるさん 宮城さんが書かれている通り、「#表オープン状態」関数は、その桐が開いてい る表の状態を調べる関数です。その表が他の桐から開かれていても、自身が開い ていないと未定義値が返されます。 佐田守弘(KS-00119) |