みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつも勉強させてもらってます。(長い文章ですみません)
Fms11×1、 Fmp11 win7 ×8台です。
現在、案件管理などに使用している元テーブル数が8個、テーブルオカレンスとしているのが37個ほどあり、ER図は親子関係も分からないくらいぐちゃぐちゃ状態で整理中なのですが、この際、以前から困っていた「処理中に横から入ってきてもらいたくない排他処理」をちゃんとやりたいと思っています。
明細数が10万を超えるテーブルが3つほどあり、ひとつひとつロックするのは途方もないので、対象レコードや全置き換えなどの最中に横から入って書換わらない様にしたいと考えています。また、エラーが発生した場合、元の状態に復帰できないか思案しています。
そこで、過去の質問の中の
https://fm-aid.com/bbs2/viewtopic.php?id=772 でHiroさんが紹介してくれたポータルを使用することによってロックが可能というLink先を読みました。
ポータル上で複数レコードを同時にロックしたい場合、レコードロック用のテーブルを作り、親に対し子のポータルは関連になるので同時にロック設定が可能かと思うのですが、親レコード数が30あれば、都度ロック処理を行うということなのでしょうか。これだと、レコードロック用のテーブルを作る意味がなくなっちゃうのかなと、元のレイアウトでよいのかなって思うのですが、足りない頭ですみません・・・
<子ポータルロック>
エラー処理
レイアウト切り替え ["レイアウト名"]
オブジェクト移動[オブジェクト名:"子テーブル"]
Loop
レコード/検索条件を開く
変数を設定[$erko;値:Get ( 最終エラー )]
Exit Loop if[$erko ≠ 0]
ポータル内の行へ移動[選択;次の;最後まできたら終了]
End Loop
#1行1行ループさせてロックする方法で、作ってみたのですが、エラーが発生した場合、元に戻すのは、
#単純に
if[$erko≠ 0]
レコード/検索条件復帰
End if
でよいのでしょうか?
あれ?戻ったのかどうか確認できないか・・・
そこはまだロック作業の途中だから、確定でもいいのでは。
全部ロックし終わって、何か処理をした後に中止したい場合は、復帰
だけど、処理中にユーザ操作があるならユーザが確定させないようにトリガの設定とか
処理中にクライアントがこけると無条件に確定されてしまうとか
そこはまだロック作業の途中だから、確定でもいいのでは。
全部ロックし終わって、何か処理をした後に中止したい場合は、復帰だけど、処理中にユーザ操作があるならユーザが確定させないようにトリガの設定とか
処理中にクライアントがこけると無条件に確定されてしまうとか
Layouterさん、ご忠告ありがとうございます。
そうですよね、これじゃロックできないですよね
やはり、処理中のクライアント操作が予想されまして・・・、本当なら誰も居なくなった後か、朝早く処理するのがいいのでしょうけど・・
トリガ使ってもっと思案してみます。
30のマルチ照合キー一覧にOR照合するポータルを組めば、一括ロックが掛けられますが...。
Offline
30のマルチ照合キー一覧にOR照合するポータルを組めば、一括ロックが掛けられますが...。
えっ、えっ!?
マルチ照合テキストを作って、そこに親テーブルIDを30改行させてOR照合するポータルを作るっていうことでしょうか?
ということは、親テーブルとマルチ照合のための別テーブルが必要になるのかなぁ・・・
さっそくやってみます。
Hiroさん、度々ありがとうございます。
Hiroさん、凄いです!ありがとうございます。
何度か子テーブルのキーの照合で失敗しましたが、新たに作ったマルチキーテキストを置くテーブル自体が排他制御テーブルになりました。
このマルチキーテーブルのテキストをIDにして、親テーブルIDで結んだポータルと、子テーブルに新たに作った親IDのポータルの照合して親子ポータルの両方を置けば、一括ロックも親子の関連ロックもこのテーブルひとつでいけそうです。
レコードロック用のテーブルを別途作る事に意味が無いと思っていましたが、たぶんこの事だったのかと・・・やっと気付きました。
私の能力では到底考えもつかない方法なのでとても感謝しています。
後は、マルチキーを制御してロックのスクリプトをしっかり組めれば、の話ですが、なんとかいけそうな気がしてきました。
Layouterさん、スクリプトはもう少し考えてみます。
スクリプトは
エラーがあった場合
「割り込んでます」というダイアログを作って上記のまま復帰で、エラーがなければ続行確定すれば、いいような気がしました。
コピーしたテストFileでしっかり検証して、よければ移植したいと思います。
たぶん運用的に関連ファイルだけロックという事はなさそうなので、一括オンリーにしたいと思います。
書換えについてもこの排他制御テーブルで出来そうなので、相当楽になりそうです。
Layouterさん、Hiroさん、ありがとうございました。
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 522.59 KiB (Peak: 527.5 KiB) ]