過去の桐井戸端BBS (桐ver.8)
11591 共有モード使用表中の表を対象表とするフォーム呼び出しコマンド 小松亀一 2001/06/14-16:35
仙台の小松と申します。久しぶりの質問をお許し下さい。

法律事務所を営む者で、事務所事件管理を、顧客簿、事件簿の2表中心に行っています。

主要な項目として、
顧客簿は [顧客ID]、[名称1]、
事件簿は、[顧客ID]、[事件ID]、[名称1]
があります。

以前は、[ID]を顧客簿と事件簿の共通項目として作り、訴状、準備書面等
各種文書作成の表とこの[ID]経由でリンクさせて活用していました。

この方法だと1事件1顧客となり、顧問先など1顧客で10件以上の事件がある場合、
顧客簿も同じ数の入力が必要なり、面倒でした。
そこで最近、[顧客ID]と[事件ID]に分け、同一顧客の複数事件は、
顧客簿は1行のまま、事件だけ事件簿の行を増やす方法に変えました。

新規顧客の場合、先ず顧客簿の [顧客ID]、[名称1]入力し、次に事件簿の[顧客ID]、[事件ID]、[名称1]と入力します。
事件簿の[顧客ID]は、顧客簿から表引きで入力し、[名称1]は[顧客ID]による表引き関数での計算式に設定しています。

表引きは受付日の新しい順に表示するよう設定し、新規顧客の場合は、
表引き表の1行目に出てきますので入力が簡単です。
しかし従前からの顧客の場合、顧客簿には1000件以上のデータが入っており、
表引きで探すのが大変になりました。

そこで事件簿フォームに、顧客検索コマンドボタンを貼り付け、イベントのフォーム呼び出しコマンドで顧客簿を開いて従前顧客を検索し、
検索した顧客簿の[顧客ID]を事件簿の[顧客ID]に行追加で入力するイベントを組みました。

ところが他のクライアントパソコンで、顧客簿を使用している場合(共有モード使用です)、顧客簿は他のユーザーが使用中という表示が出て、
フォーム呼び出しが出来ません。
尚事務所はNTサーバー1台に10クライアントパソコンを置いています。

この場合、他のユーザーが顧客簿を使用中でも、フォーム呼び出しコマンドで顧客簿を開く方法があればご教示頂ければ幸いです。
尚、このような検索をより合理的に行う方法があればご教示いただければ幸いです。

尚、フォーム呼び出しのイベントは以下のように記述しています。
手続き定義開始 顧客検索()
フォーム呼出し 顧客検索1,許可作業=なし,編集表=しない,終了状態=
&顧客検索
手続き定義終了

顧客検索1が顧客簿を開いて顧客検索するためのフォームです。
長文且つ内容が判りにくい質問で恐縮ですが、宜しくお願い申し上げます。

11592 Re:共有モード使用表中の表を対 象表とするフォーム呼び出し コマンド 小松亀一 2001/06/14-16:36
記事番号11591へのコメント
書き落としました、桐はv8sp6を使用しております。
11596 Re:共有モード使用表中の表を対 象表とするフォーム呼び出し コマンド 島尾 2001/06/14-17:40
記事番号11592へのコメント
この辺でしょうか?

http://www.fuku3.com/~habata/kbbs/kakov8/07299.htm
http://www.fuku3.com/~habata/kbbs/kakov8/07764.htm

11606 Re:共有モード使用表中の表を対 象表とするフォーム呼び出し コマンド 小松亀一 2001/06/14-20:49
記事番号11596へのコメント
仙台の小松です。

島尾さん、早速のレス有り難うございます。
>
>http://www.fuku3.com/~habata/kbbs/kakov8/07299.htm
>http://www.fuku3.com/~habata/kbbs/kakov8/07764.htm
過去BBSにはフォーム呼び出しコマンドのキーワードで当たったのですが
関連記事を見つけることが出来ませんでした。

上記2つの過去記事見てみましたが、事前に表引き対象表の顧客簿を共有モードで開いておくと、
後で開いた事件簿において顧客簿を表引き表として利用できますね。

しかし顧客簿を開いた状態では、後で開いた事件簿のフォーム上のコマンドボタンに貼り付けたイベントのフォーム呼び出しでは、
顧客簿は使用中との表示が出て、開けませんでした。
悲しげさんご指摘の編集表タブ→許可作業ボタン→多重化をチェックしても結果は同じでした。

フォーム呼び出しコマンドで開く顧客簿も共有モードで開く指定が出来ればと思いますで、その指定方法が判りません。

何方かご存じの方が居ましたら、ご教示頂ければ幸いです。
11607 Re:共有モード使用表中の表を対 象表とするフォーム呼び出し コマンド 今村 誠 2001/06/14-20:56
記事番号11592へのコメント
小松亀一さんこんにちは、共有をやめて専有にすることはできないのでしょうか
事件簿は共有でよいと思いますが、顧客名簿は更新が多数発生することがないのであれば、
サーバのデータを朝一番にコピーして、更新処理で、訂正や追加のあったデータのみにフラグをたてて
一日の最後に、併合してはいけないのでしょうか。
もっと良い方法もあるかもしれませんが、一案ということで
11620 Re:訂正します 今村 誠 2001/06/15-00:52
記事番号11607へのコメント
やはり共有でないと新規の追加ができないと思いましたので、前言撤回します。

参照するだけでしたら、フォーム呼び出しでコピーしたものでも良いと思います。

>事件簿は共有でよいと思いますが、顧客名簿は更新が多数発生することが
>ないのであれば、サーバのデータを朝一番にコピーして、
11622 Re:訂正します 小松亀一 2001/06/15-07:07
記事番号11620へのコメント
今村 誠さん、おはようございます。
レス有り難うございました。

>やはり共有でないと新規の追加ができないと思いましたので、
>前言撤回します。
顧客簿を専有で開いておくと、その間は顧客簿を表引きで使用している事件簿も開けなくなりますね。

>参照するだけでしたら、フォーム呼び出しでコピーしたものでも良いと思います。
フォーム呼び出しで開いた顧客簿は、専有モードで開いているようです。
だから共有モードで顧客簿を開いていると、他のユーザーが使用中という表示が出て開けなくなります。

そのため顧客簿を閉じたまま、Aパソコンで顧客簿を表引きで使用している事件簿を開いておくと、
その間、顧客簿使用の必要が生じて、Bパソコンで顧客簿を開こうとすると、
今度は、顧客簿は事件簿で表引き表として使用されているため、
他のユーザーが使用中という表示が出て開けなくなります。

先ずAパソコンで、顧客簿を開いておくと、次にBパソコンで事件簿を開いても、
その後Cパソコンで顧客簿を開くことが出来ると教えられましたので、
先ずAパソコンで常に顧客簿を開いたままにしておりました。

これは、7771の野良犬さんの次の記述に理由が書いてありますね。
>そのままでは専有で開かれてしまう表引き表を、先に共有参照などのモードで
>開いておくことで他のユーザーからも利用できるようになります。

常にAパソコンで顧客簿を開いておくことでその他のパソコンで顧客簿も事件簿も自由に使えるようになりましたが、
事件簿でフォーム呼び出しコマンドを利用して顧客簿を開こうとすると、
フォーム呼び出しコマンドでは、専有モードで開かれるため、既にAパソコンで顧客簿を開いているため
他のユーザーが使用中という表示が出て開けなくない訳です。

フォーム呼び出しコマンドで開く場合も、共有モードで開くとの指定が出来れば解決すると思うのですが、
その方法が判らず困っています。

大変ややこしい質問で恐縮ですが、何方かご存じの方が居ましたら、ご教示頂ければ幸いです。


11630 Re:共有モード使用表中の表を対 象表とするフォーム呼び出し コマンド 島尾 2001/06/15-08:42
記事番号11606へのコメント
願客検索1のフォームの属性の編集対象表の共有=する、更新=する
にしておいて、フォームを開く前に表引き表を事前に共有で開いて
置けば全部共有更新で開かれると思いますけど。
他のフォームもフォーム呼び出しの直前に共有更新で開いておけば
よろしいかと。
----------------------------------------
表 "顧客簿",モード=共有更新
フォーム呼出し "顧客検索1"
-----------------------------------------


しかしこの場合は、もっと根本的な解決方法があります。
それは、顧客簿.TBLと事件簿.TBLを参照整合性で結んでしばえば、
どちらかの表を開くだけで、自動的に他方も共有で開かれるようになります。

顧客簿は主キーを[顧客ID]に、
事件簿は主キーを[事件ID]に
表の主キー定義で定義します。
その後、事件簿の[顧客ID]に表定義から参照整合性定義をします。

参照項目 [願客ID]
主キー表 願客簿.tbl
主キー項目 [願客ID]
主キーを削除するとき
 参照項目があるときは削除禁止
主キーを更新するとき
 参照項目も更新する

(再定義でオープンしないと定義できませんので注意)

これで特に表の事前オープンに気を遣うことなく、どちらかを共有更新でひらけば、
他方も勝手に共有更新で開かれることになります。

11666 Re:共有モード使用表中の表を対 象表とするフォーム呼び出し コマンド 小松亀一 2001/06/15-22:44
記事番号11630へのコメント
島尾さん,こんばんは。ご丁寧なレス有り難うございます。

>願客検索1のフォームの属性の編集対象表の共有=する、更新=する
>にしておいて、フォームを開く前に表引き表を事前に共有で開いて
>置けば全部共有更新で開かれると思いますけど。
有り難うございます。編集対象表の共有設定は全く気づかず、ご教示の設定をしてやってみたら、願客検索1のフォームが開けました。

>他のフォームもフォーム呼び出しの直前に共有更新で開いておけば
>よろしいかと。
>----------------------------------------
>表 "顧客簿",モード=共有更新
>フォーム呼出し "顧客検索1"
>-----------------------------------------
表 "顧客簿",モード=共有更新を入れて願客検索1のフォームを開こうとすると
「顧客簿は既に使用されています」と言う表示が出て、願客検索1のフォームは開けませんでした。
表 "顧客簿",モード=共有更新を削除すると、上記の通り、顧客検索1のフォームを無事開くことが出来ました。
編集対象表の共有=する、更新=すると設定することにより、フォーム呼び出しコマンドで表を開く場合の、
共有モードで開くの設定になるのですね。

>しかしこの場合は、もっと根本的な解決方法があります。
>それは、顧客簿.TBLと事件簿.TBLを参照整合性で結んでしばえば、
>どちらかの表を開くだけで、自動的に他方も共有で開かれるようになります。
ご教示の設定をして見ましたが、これだけでは解決できませんでした。
「上記編集対象表の共有=する、更新=する」と設定により何とか解決しました。

鳥尾さんのご教示により何とか当面の課題を解決できました。
心より御礼申し上げます。
11693 複数ユーザーでの共有 佐田 守弘 2001/06/16-16:25
記事番号11622へのコメント
小松亀一さん

やはり最も理想的な解決方法は、#11630で島尾さんが書かれている通り、
関係する表どうしの間に参照整合性を設定する事だろうと思います。
桐の表は専有や共有、参照整合性の設定の有無などの点で、いろいろなモードでの使い方ができ、
またその利用モードによっていろいろと挙動が変わります。

どの様な使い方をしても誤りではないのですが、単独ユーザーで専有に徹するか
複数ユーザーモードではきちんと参照整合性を設定し、専有モードで使うのが
1つのパターンかも知れません。
もちろんこの場合には、バックアップが使えない、索引が無効になる、行挿入ができない、
など、ご存知の様な桐らしい機能が失われ、他のDBに近いモードになります。

佐田守弘(KS-00119)
11705 Re:共有モード使用表中の表を対 象表とするフォーム呼び出し コマンド 島尾 2001/06/18-08:59
記事番号11666へのコメント
>ご教示の設定をして見ましたが、これだけでは解決できませんでした。
>「上記編集対象表の共有=する、更新=する」と設定により何とか解決しまし

すみません。書き忘れましたが参照整合性を組んである場合でも
開くフォームは
編集対象表の共有=する、更新=する
にする必要があります。
11808 フォームから開く場合の共有モード設定 小松亀一 2001/06/22-06:30
島尾さん、おはようございます。

済みません。最新20ツリーからはずれていたため以下のメールに気付きませんでした。

>書き忘れましたが参照整合性を組んである場合でも
>開くフォームは
>編集対象表の共有=する、更新=する
>にする必要があります。

参照整合性を組んでなくても、「編集対象表の共有=する、更新=する」を設定しておけば、
フォーム呼び出しコマンドで開いても共有モードになり目的を達せますね。

結局、「編集対象表の共有=する、更新=する」の設定だけで目的を達することが出来ました。

その後、マニュアルを見るとフォームの278頁、グラフ・結合表の124
頁に、ネットワーク使用の問題が詳しく解説してありますね。

お陰様にて大変勉強になりました。
11894 Re:フォームから開く場合の共有モード設定 島尾 2001/06/26-08:34
記事番号11808へのコメント
>結局、「編集対象表の共有=する、更新=する」の設定だけで目的を達する
>ことが出来ました。

それプラス、表引き元の表は事前に共有で開いておく必要ありますよね。
事前に開かないと参照で開かれてしまい、表引き表を他のユーザが編集できないと思います。
しかしこの手法だと意外な盲点があります。単なる複写型表引きなら問題ないのですが、
計算項目に設定した表引きは、表引き元の項目を他のユーザが書き換えた場合、そのままでは表引き先に反映されません。
置換コマンドせ再計算をする必要があるのですが、共有だと置換が出来ません。

ここの問題も回避する根本的な問題解決という意味で、
桐の機能の一つである参照整合性を紹介させていただきました。
障害に当たらないのなら事前共有オープンの表引き共有で問題ないと思います
11915 Re:フォームから開く場合の共有モード設定 小松亀一 2001/06/27-06:51
記事番号11894へのコメント
島尾さん,おはようございます。

>それプラス、表引き元の表は事前に共有で開いておく必要ありますよね。
>事前に開かないと参照で開かれてしまい、表引き表を他のユーザ
>が編集できないと思います。
そうですね。以前これが判らず難儀しました。

>しかしこの手法だと意外な盲点があります。単なる複写型表引き
>なら問題ないのですが、計算項目に設定した表引きは、表引き元の項目を
>他のユーザが書き換えた場合、そのままでは表引き先に反映されません。
これもそうですね。これも以前どうするのか判らず難儀しました。

>置換コマンドせ再計算をする必要があるのですが、共有だと置換が出来ません。
ある時、再計算に気付き、フォームから表に戻して再計算で一気に表引き元の書換が反映して感動しました。
今試しに共有で使っている表に置換をかけてみましたが、表編集の場合は、置換可能ですね。
理屈で考えると共有でロックがかかった行がある場合は、置換出来ないと言うことですね。

>ここの問題も回避する根本的な問題解決という意味で、桐の機能の一つ
>である参照整合性を紹介させていただきました。
私は、リレーショナル化は全て表引き関数で間に合わせ、結合表は全く使用していないので、
どうして参照整合性が必要なのか疑問に思っていましたが、そういう意味でしたか。

大変勉強になりました。有り難うございました。

11916 Re:フォームから開く場合の共有モード設定 島尾 2001/06/27-08:14
記事番号11915へのコメント
>理屈で考えると共有でロックがかかった行がある場合は、置換出来ないと言うこ
>とですね。

だれかが編集中だと置換できないはずだと思いました。

戻る