掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
排他制御を実現できるDB (ID:114076)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>FLGでおこなうならMSDEに変更することなく、 >MDBのままでも実現可能でしょうか? そもそも Access は複数のユーザにアクセスされる事を想定していない と認識しております。歯痛さんも最初の書き込みで >色々調べたところ、mdbでは限界があるようなので、DBをMSDEに変更しようと >思うのですが、MSDEなら実現可能なものでしょうか?? と書かれてますが、調べた『MDB のままでの限界』に『複数のユーザによる アクセス』に対応する情報は含まれていないのでしょうか?データベースや フラグの処理以前に >複数のユーザーが同時に使用する 時点でボクの中では Access は"無し"です。その状態で『実現可能か?』 と聞かれても何を基準にして答えればいいのか分かりません。 >トランザクション機能がないMDBでは難しいのでしょうか? これも困った質問なのですが、トランザクション処理はデータベース操作に おいて基礎的な知識に分類されると思います。Webでの検索でもたくさん 引っかかります(Googleで143,000件程度)。…もちろん、どのような事を意味 するか当然理解されてると思いますが、では『トランザクション機能がない』 ということは何を意味しますか?。ボクはごくごく簡単に言うなら『データ ベースの整合性が取れない』と理解してます。それはボクにとってはデータ ベースの意味がないと思われることです。何をもって好しとするのか?その 基準がまったく理解できません。ですから答えられる質問ではありません。 ボクの解釈では難しいとか難しくないとかの話ではないのです。 もちろんユーザさんの強い要望や環境的な止むを得ずの場合もあるでしょう。 しかしその判断は歯痛さんのするべき事ですし、それで MDB ファイルが 壊れるかどうかは環境と運に依存しています。実行環境でやってもらうしか ないことですので、ボクが答えられる問題ではないと判断します。 以上、ここまでの質問はフラグがどうとか言う問題ではありません。データ ベースとして Access を使用するのが適切か?という問題です。 で、実際の処理の工夫ですが、 >(80%ぐらい 同時にアクションおこすのが約2秒以内であればoutです。。) …これは明らかにプログラムがマズいと思っています。MDB を使っていても もう少しマシな処理ができるはずです。 その方法も含めて前の書き込みで書いてあります。書き込みした通りの処理を プログラムすればもう少しマシな処理になるハズですが? 重要な点は >固有の端末名やユーザ名を利用して UPDATE を >1つのSQL文で実行してしまいます。 という所です。もっと書きますと、UPDATE の処理と表示の処理を分けます。 つまり、2回SQL文を実行するという事です。ここは 36NET さんの書き込 まれた内容をうまく利用すれば1回でできたりするのかな?…とも思います が、36NET さんの方法をボク自身が試したことがないのでベタに2回実行する 処理で書き込みしておきます。処理を1つに出来るかどうかはご自分で研究 してください。 まず、最初のSQL文は UPDATE TestTbl SET CheckOutUserName = '特攻隊長まるるう' WHERE CheckOutUserName = '' AND 処理対象となるレコードの条件 です。Visual SourceSafe やエクセルのチェックアウトに近いイメージでしょうか? 処理対象となるレコードの更新を1処理でやってしまいます。そして2番目の SQL文は SELECT * FROM TestTbl WHERE CheckOutUserName = '特攻隊長まるるう' です。これだけ書けば理解して頂けたと思いますが、CheckOutUserName として自分の名前で更新できたレコードのみ処理対象として"改めて"呼び出す わけです。更に、これでも同時実行の不具合が起こる場合、1つ目のSQL文 実行と、2つ目のSQL文実行の間に待機時間を起きます。もし同時実行で、 CheckOutUserName = '特攻隊長まるるう' のレコードが CheckOutUserName = '' と判断されて CheckOutUserName = '歯痛' と更新されたとしても、 2回目のSQL文実行までに十分時間を置けば CheckOutUserName = '歯痛' のレコードは処理対象から外れるという仕組みです。 何件のレコードを処理するか等で待機時間の調整の必要があります。 フラグ1or0では、完全に分割された処理ですので処理できません。 CheckOutUserName として端末固有のフラグを立てる必要があります。 1つの端末でアプリケーションの2重起動をするとマズい処理となります。 以上の注意点で実現はそう難しくないと考えます。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.