過去の桐井戸端BBS (桐ver.9)
29540 一括処理で表を共有していますが他のユーザーが開いているかどうかの判定をしたい 鳴瀬 2005/04/01-21:59
ある作業表「作業表.TBL」を共有更新で開いて、作業終了後、作業表を削除する一括処理を考えています。
単純に
---------------------------
終了 表,編集対象表
ファイル削除 "作業表.TBL"
-----------------------------
だと、もし、この一括を実行しているユーザーの他に「作業表.TBL」を共有で開いているユーザーがいると
ファイル削除の段階でエラーが発生します。
ファイル削除を実行する前処理として、他のユーザーが「作業表.TBL」を開いているのかどうか?
(あるいはファイル削除可かどうか)判定する方法はありますか。

29544 Re:表の共有状態の判定【一括】 宮城 2005/04/01-23:53
記事番号29540へのコメント
次のコマンドのレファランスを参照してみれば答えはおのずから
得られるのでは?

表  <表ファイル名>
ファイル削除  <ファイル名>

「終了状態 = <変数名>」ってのは飾りじゃなかったりして。

29545 Re:表の共有状態の判定【一括】 佐田 守弘 2005/04/01-23:59
記事番号29540へのコメント
鳴瀬さん
まず関数に「#ファイル使用」があり、更新モードで開けるかどうかの判定ができます。
しかし、これは更新モードで開けるかどうかの判定であって、
他に共有ユーザーがいるかどうかの判定はできません。

他のユーザーがその表を開いているかどうかを調べるには、単純に専有更新モードで開いてみて、
開けたかどうかを戻り値で判定する方が簡単かと思います。
開けたら、すかさず閉じて削除すればよいわけですが、その極わずかのタイミングに、
他のユーザーが開く事もないとは言えないので、完全に判断できる方法ではありません。

●本質的な対策として
質問内容から、削除したい表は、作業用の一時ファイルの様に思えます。
 >ある作業表「作業表.TBL」を共有更新で開いて、
と書かれていますが、作業用のファイルを共有で開く必要があるのでしょうか。

作業用のファイルであれば、ユーザー毎にユニークな名前、たとえばユーザー名+"ワーク"の様な名前の表を
使って専有更新で使用する様にすれば、他のユーザーとバッティングする事は基本的に避けられるのではないかと思います。

なお、ファイル削除コマンドの戻り値を調べれば、正常に削除できたかどうか、
あるいはファイルが使用中であったかどうかが判定できます。
削除してみて削除できなければ、その状況を判断して、どの様に処置するかといった方法も可能かと思います。

佐田守弘(KS-00119)
29551 Re:表の共有状態の判定【一括】 鳴瀬 2005/04/02-20:02
記事番号29545へのコメント
宮城さん、佐田さん、ありがとうございました。
第一稿後、しばらく考えていたのですが私も同様の結論に至っていました。

>終了状態 = <変数名>」ってのは飾りじゃなかったりして。
これは付けていたのですがエラーメッセージが表示されて、、、
「リトライ=しない」でよかったんですね。この書き方をしないケースが多かったんで。
勉強になりました。次回からは教訓を忘れず”トライ=したい”です。(@_@)

戻る