過去の桐井戸端BBS (桐ver.9)
23814 LAN上で編集対象表のないフォームが使用中かどうかを調べるにはどうしたらいいのでしょうか 尾形 2003/12/10-07:41
よろしくお願いします

編集対象表のない"メニュー給与計算.WFM"
これがLAN上で他のユーザが開いているか
どうかを調べたいのですがよい方法はないでしょうか?

更新処理をするのに給与計算用のメニューを開いている者がいないか?
を調べるのが目的です

よろしくお願いします

23815 Re:フォームが使用中かを調べる方法 アックン 2003/12/10-08:13
記事番号23814へのコメント
尾形さん、こんにちは。
"メニュー給与計算.WFM"のイベントを下記のようにしておき、
他のフォームのイベントから、探したいパスに行って、
  cond( &menuwin ) ・・  または、
  if( &menuwin )  とすれば、開かれているかどうかわかると思います。

名札 メイン
 var 固有 , 整数 { &メニュー給与計算}

proc フォーム::フォーム開始(長整数 &表番号)
   &メニュー給与計算= &hwindow
end
proc フォーム::フォーム終了()
   &メニュー給与計算= ""
end
23816 Re:フォームが使用中かを調べる方法 アックン 2003/12/10-08:17
記事番号23815へのコメント
尾形さん> 訂正です。<(^^)
 cond( &メニュー給与計算 ) ・・  または、
 if( &メニュー給与計算 )  とすれば、開かれているかどうかわかると思います。

23818 Re:フォームが使用中かを調べる方法 尾形 2003/12/10-08:20
記事番号23816へのコメント
どうも

これって他人(他のパソコン)が開いているのも分かりますか?

23820 Re:フォームが使用中かを調べる方法 アックン 2003/12/10-08:37
記事番号23818へのコメント
尾形さん> そういえば、他人の変数は見えないですね。
タイプを共通にしても見えないはずだし。
なにか他に簡単にできる方法があるんじゃないかと思うんですが。

23823 Re:フォームが使用中かを調べる方法 うにん 2003/12/10-09:27
記事番号23820へのコメント
>なにか他に簡単にできる方法があるんじゃないかと思うんですが。

#ファイル使用("some.wfm", 1)
でいいかと思ったら、tblやkevは「他ユーザ使用中」になるのにフォームは
使用中でも定義モードで開けてしまいました。

対象表を作ってそっちを調べるのが簡単そう。

23824 Re:フォームが使用中かを調べる方法 うにん 2003/12/10-09:33
記事番号23823へのコメント
>#ファイル使用("some.wfm", 1)
>でいいかと思ったら、tblやkevは「他ユーザ使用中」になるのにフォームは
>使用中でも定義モードで開けてしまいました。

あれ〜?先に定義モードで開いてる人がいると、#ファイル使用("some.wfm", 1)=0
なのはいいとして、#ファイル使用("some.wfm", 2)=1なのに開けない。
ちょっと変。
(ちなみにネットワークではなく同じパソコンで桐2つ起動してテスト)
23827 Re:フォームが使用中かを調べる方法 原山 正洋 2003/12/10-10:36
記事番号23815へのコメント
アックンこんにちは。
引用の都合でここにぶら下げさせてもらいます。

>proc フォーム::フォーム開始(長整数 &表番号)
>   &メニュー給与計算= &hwindow
>end
>proc フォーム::フォーム終了()
>   &メニュー給与計算= ""
>end

これを以下のようにしたらどうでしょう?
proc フォーム::フォーム開始(長整数 &表番号)
   copy "a.org","a.tbl"
end
proc フォーム::フォーム終了()
   rm "a.tbl"
end

ネットワークの経験がないので、あとは推測です。
フォームが同時にいくつか立ち上がるのであれば、
,終了状態 = &OK
を付加して返り値をチェックするなり
フォーム開始で"a.tbl"を開き、
フォーム終了でこれを閉じる
などを組み合わせれば可能なのでは?
後は、この表の存在チェックですね。

23828 Re:フォームが使用中かを調べる方法 通りすがり人 2003/12/10-10:51
記事番号23814へのコメント
私なら・・・ということで。

>編集対照表のない"メニュー給与計算.WFM"
>これがLAN上で他のユーザが開いているか
>
>更新処理をするのに給与計算用のメニューを
>開いている者がいないか?を調べるのが目的

更新処理そのものは、このフォームに対してではなく、別にある「表」に対してだと思います。
ならば、直接この表を調べては?
誰が開いているかまでは分かりませんが(サーバーでなければ)、利用状況はわかると思います。

当方では、このメニューのフォームで、#WSNAME 関数にてローカルユーザーの名前を
LAN上の共有フォルダにTXTとして記録(追加処理)、すなわち利用者LOGを取っております。
管理者は、このファイルを直接見て「誰が利用しているか」を判断しています。

利用目的が違いますが、当方ではそういった管理方法もしているということで・・・。

23829 Re:フォームが使用中かを調べる方法 通りすがり人 2003/12/10-10:56
記事番号23823へのコメント
うにんさん いつも発想がきれますね・・・。(^^ゞ

>#ファイル使用("some.wfm", 1)
>でいいかと思ったら、tblやkevは「他ユーザ使用中」になるのにフォームは
>使用中でも定義モードで開けてしまいました。

なら、KEVを調べれば?
なければ、ダミーでKEVを抱え込むとか。
空っぽのKEVを定義してですけど。

23831 Re:フォームが使用中かを調べる方法 尾形 2003/12/10-12:00
記事番号23828へのコメント
皆様どうもありがとうございます

>更新処理そのものは、このフォームに対してではなく、別にある「表」に対してだ
>と思います。ならば、直接この表を調べては?
月次更新のような処理ですので多数の表に対して
更新をかけるので給与計算処理自体をロックしたいとおもった次第です

別途表で管理するような方法でやってみます
23833 Re:フォームが使用中かを調べる方法 うにん 2003/12/10-12:47
記事番号23831へのコメント
>月次更新のような処理ですので多数の表に対して
>更新をかけるので給与計算処理自体をロックしたい
>とおもった次第です

それなら必要な表を全部ロックしてから更新処理に入るのが普通なのでは?
(やったことないのでできるかどうかわかりませんが。)
途中で必要な表を誰かが開いちゃったりしたら困るでしょう。

23835 Re:フォームが使用中かを調べる方法 原山 正洋 2003/12/10-13:40
記事番号23831へのコメント
尾形さん、こんにちは。

>編集対照表のない"メニュー給与計算.WFM"
>これがLAN上で他のユーザが開いているか
>どうかを調べたいのですがよい方法はないでしょうか?

>月次更新のような処理ですので多数の表に対して
>更新をかけるので給与計算処理自体をロックしたい

つまりメニュー給与計算.WFMが開いていない限り、
多数の表は、一つも開いていないと解釈します。
結構回りくどい方法になりますが、

メンテ・ユーザー側それぞれ別メニューを作成し、
ここからメニュー給与計算.WFMを呼び出します。
その際に

メンテ側
1.メニュー給与計算.kev(仮名)が開いているか検査
2.閉じている
3.mkdir "lock_dir"
4.もう一度1.の検査をする
5.やはり閉じていれば、更新作業を開始する。
6.更新終了後 lock_dir を削除

ユーザー側
1.lock_dir があれば、更新中メッセージを出して作業中止

フォームを呼び出す前に上記手順を踏みます。
4.はめったにないことですが、
メンテ・ユーザー側のタイミングがぴったり合ってしまって、
lock_dir があるのにユーザーがメニュー給与計算.WFMを
開いているという事態に備えてです。
当然3と4の間には適当な遅延時間が必要です

もっといい方法があるのでしょうけども・・・
ご参考になれば

23836 Re:フォームが使用中かを調べる方法 通りすがり人 2003/12/10-14:15
記事番号23833へのコメント
>それなら必要な表を全部ロックしてから

管理者側で、最初から専有で処理する表全部を開いておくのって?
表を開いた人勝ち!ですから。
何個の表があるかは分かりませんが・・・・。


戻る