- ベストアンサー
複数PCからのエクセルブック登録マクロ
- 複数のPCからサーバー上の1つのエクセルブックに登録処理を行う方法について教えてください。
- 複数のユーザーが同時に登録処理をした場合のバッティング回避方法について教えてください。
- サーバーのエクセルブックが読み取り専用の場合に書き込み処理を行う方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一番簡単なのは「サーバー上に、番兵を置く」です。 ファイルにアクセスする前に「番兵ファイルが存在していない事」を確認します。 そして「番兵ファイルが存在していない場合は、確認してすぐに番兵ファイルを新規作成」します。 この時「番兵ファイルの新規作成に失敗」した場合は「同時に新規作成しようとした他のクライアントPCが存在する」と判断して「使用中」として処理し「番兵ファイルが居なくなるまで待つ」ように処理します。 「番兵ファイルの新規作成に成功」した場合は「普通にエクセルにアクセス」して、ファイルを更新します。この時「他のクライアントPCが同じエクセルファイルにアクセスしていない事」が保証されます。 エクセルファイルの更新が正常に終了したら「番兵ファイルを削除」します。 エクセルファイルの更新時に何らかのエラーが発生し「エラーを解消しない限り、更新を行なってはいけない状況」に陥った場合は「番兵ファイルを削除しないで残しつつ、致命的エラーを報告する」ようにします。すると「番兵ファイルが何時までも消えない」ので「それ以上の更新が行なわれない」ので「更新を行なってはいけない状況で、更新処理を行なってしまう」という事故が防げます。つまり「意図的にデットロック状態にする」ことで「更新の禁止」をするのです(エラーが解消したら、手動で番兵ファイルを削除して、通常状態に復帰させます) 良く判らない場合は「セマフォ」で検索して下さい。 http://e-words.jp/w/%E3%82%BB%E3%83%9E%E3%83%95%E3%82%A9.html
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
ここへ質問を出す前に、Googleで「ACCESS 更新制御」や「ACCESS 排他制御」などの記事がたくさんあるから、それを読んで考えること。 Accessを挙げたのは、データべーうソフトとしては仕組み的に簡単なレベルだと思うので例示しただけ。Oracleなどでも関連した解説があろう。 ーー (1)メモリの中は瞬時に変化して当てにできないし他のユーザーの使用メモリを覗くことは、勧められないので、ディスクという、情報を固定するところのデータを当てにすること(2)1か所で管理すること (3)アクセスするものは、もれなく事前に参照する(許可を得る)仕組みにすること そういう場所を作って共同利用者は、いつもそれを守る仕組みにしないといけない。 #1のご回答もあるが、使用中の状態のほかに、加えてエラーなどのステータス的なものも必要ではないかな。 コンピュタ屋さんが考えることは、似ている。伝統がある。 参考 「セモファ」とは https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%9E%E3%83%95%E3%82%A9 由来は単線区間の通行可能権利を示す器具のこと 「センチネル」とは https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%B3%E3%83%81%E3%83%8D%E3%83%AB 番兵や監視兵に由来。
お礼
自分で調べろなんて回答はいりません。
お礼
ありがとうございます。 イメージがつかめました。