レコードのロックについて

このQ&Aのポイント
  • Access2000のデータベースでのレコードロックを調べています。具体的には、社員番号を検索して該当の社員データを表示し、そのデータを変更する処理を行いたいですが、他の人が同時に編集できないようにするにはどうすればいいのか知りたいです。
  • Access2000のデータベースで、レコードを編集中の場合、他の人がそのレコードを開けないようにする方法を探しています。該当のレコードを他の人が編集中であるかどうかを判定する方法を知りたいです。
  • Access2000のデータベースで、特定のレコードを編集中の場合、他の人が同じレコードを開けないようにする方法を知りたいです。別テーブルに編集中のデータ(社員番号)を保存する必要があるのかどうかも教えてください。
回答を見る
  • ベストアンサー

レコードのロックについて

Access2000のデータベースにロックをかけることは 可能でしょうか? 具体的には 社員番号を検索して該当の社員データをHTML形式で表示し その社員データを変更する処理なのですが 該当の社員データを開いている(表示している)間は 別の人がその社員のデータを開けない (もしくは「他の人が編集中」のメッセージを表示)ようにするには どのようにすれば良いですか? 別テーブルに編集中のデータ(社員番号)等を入れておいたり しなければならないのでしょうか? EditModeやLockTypeにて試してみたのですが・・・ 別の人が編集中であるかどうかを取得できればと考えています。 参考になるホームページ等でも構いませんのでよろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.2

こんにちは。itohhといいます。 結構、面倒ですよ。 1.ロックしたとしてロックの解除はどうするのか? 例えば、ブラウザで更新用ページを表示して、気が変わったので更新を止めるため ブラウザを閉じてしまった場合、ロックされたままになってしまいます。 2.k_ebaさんが回答している方法だとRecodSetをページ間で持ち回らないと いけません、これは、Session変数にObject代入して持ち回ると言うことです。 そうなると、Objectを解放(Nothing)するタイミングが難しくなります。 ロック方法の提案。 前提: (1)レコードレイアウトに項目を追加しても良い。 (2)ロックする段階でだれがロックするかという情報を持っていること。(社員IDなど) (前もってログイン画面を経て更新画面に遷移するとかです。) (3)IIS/ASPでSession管理されたサイトである。 まず、ロック情報という項目をレコードのレイアウトに追加します。 ロックをかけるとは、このロック情報に社員IDを設定します。 ロック情報に別の社員IDが入っている場合は、参照も出来ないようにします。 ロックを解除するということは、このロック情報をクリアすることで行います。 上記の問題を解決する方法ですが、 まず、Objectの作成と解放はページの先頭と終わりに行います。ページ間でObjectを 持ち回ることはしません。それでも、ロック情報に社員IDが入っているので他の社員ID では、アクセスできません。(ロックされるということ) ロックの解除ですが、タイミングとしては、更新画面から別画面に遷移するときと Sessionのタイムアウトのときでしょう。そのときに、ロック情報をクリアするSQLの Update文を発行します。 (ロックを解除するタイミングが難しくなりますが...) 参照は許可するのでしたらば、もう少しスマートになるとは思います。 こんな方法ではどうでしょうか?参考にしてください。

sienna
質問者

お礼

ありがとうございます。 やはり社員番号をロック情報としてテーブルに持たせるという 方法ですね。ログイン画面を経て修正をしてもうらうように 考えていましたのでこの方法をもう少し検討してみます。 でも、おっしゃるとおりロック解除の方法が面倒かもしれませんね。

その他の回答 (2)

  • Kalen_F
  • ベストアンサー率25% (2/8)
回答No.3

そのHTML形式で表示するのは、Accessでですか? もしもAccessのフォームで表示するのであれば、レコードソースを、一旦クエリで組んだものを使えば、他の人は修正出来ないハズです。 勿論その場合で、もし後々データの修正する場合は、テーブル直で行えば、OKですよ。

sienna
質問者

お礼

なるほど、Accessを使用するとそんなことが可能とは全然知りませんでした。 データアクセスページ等で作成するという事なんでしょう。 クライアントの方にもAccessがインストールされていないと いけないなんてことも有るのかも知れませんね。 できればASP+DAO(ADO)等で作成する予定です。 ありがとうございまいした。

  • k_eba
  • ベストアンサー率39% (813/2055)
回答No.1

該当アクセスを開いて ツール→オプション→詳細 該当のレコードのロック又は既定の開くモードを指定する ではお気に召しませんか? がんばって下さい

sienna
質問者

お礼

ありがとうございます。 その方法は考えたのですがAccessの入っていないサーバ (普通は大抵はいっていないと思うのですが)で 正常に動くのか不安だったので実は試していません。 どうしてもダメだった場合の最後の手段と考えています。

関連するQ&A

  • Access2000データベースのロックについて

    実は少し前ASPのところで質問した内容に似ているのですが いまだ解決できず困っています。 内容は社員番号入力し表示された詳細を編集させる 処理なのですが、既に別のマシンから開かれている(表示されている) 社員番号の情報を取得する方法はないのでしょうか? 「既に別の人が編集中です。」のようなメッセージや 開く事はできてもなんらかのメッセージが画面上のどこかに表示 されて保存ボタンを押せなくなる等の処理をさせたいのですが。 社員番号等のデータをロック情報として別テーブルにもつ方法が あると思うのですが異常終了時に情報が残ってしまうような気がして 気がすすみません。(データベースの構造はなるべく変更したくない) 参考になるホームページやキーワードだけでも構いませんので よろしくお願いします。 Windows2000sp2 VB6sp5 ADO2.5 DAO3.6

  • レコードロックする方法

    Access2013 VBA 今、アクセスのシステムを作っていますが、おおまかに書きますと ・フロントエンドとバックエンド ・ワークテーブルを使用してデータの編集をして、元テーブルに反映する処理 ・4人ぐらいの利用者を想定 この場合に、 ・レコードロックのようなやり方が可能か ・DAOを使用する場合に、今変更をしようとしているレコードにロックをかける方法はあるのか ・既に他の画面で開いている画面のレコードソースのテーブルを、後から開いた別画面の処理でOpenRecordsetでレコードセットを取得し、そのレコードを編集・新規追加したいのですが、この場合には、Optionには何を使用すれば良いでしょうか? ※先に開いている人には読み取りは可能 ※後から開いた人は、データの編集が可能にする ※先に開いた人が、後から開いた人がデータの編集をしている時に該当レコードの変更は出来ないようにしたい よろしくお願いします。 よろしくお願いします。

  • アクティブレコードの値を取りたい。

    ひょっとしたらすごく難しいことなのかもしれませんが、 表形式のテーブルに各行に編集ボタンをつけます。 編集ボタンを押すと、伝票1の単票形式のフォームが表示され、内容を編集できるという形を作りたいと思っています。ここで問題なのが、編集ボタンを押したときに どうやって、現在、カーソルのあるレコードの 伝票番号を帳票に受け渡すかなんですが、よいアイデア があれば、おしえていただけないでしょうか。 伝票番号   商品   1 りんご    編集ボタン   2      みかん    編集ボタン   3      なし     編集ボタン

  • 別のACCESSデータベースのテーブルのレコードを追加したいのです

    別のACCESSデータベースのテーブルのレコードを追加したいのです 同じ内容のデータベースが二つあります データベース1とデータベース2を其々別の人がデータを入力しています データベース1にデータベース2のテーブルで T_データT_データ明細の二つのレコードを追加したいのですがどの様にすればよいでしょうか ご指導をお願いいたします。

  • Access2003でまたまた質問です。レコード単位で編集ロック、解除は可能?

    初心者ですみません。 Access2003でまたまた質問です。 テーブル、クリエ、フォームそれぞれ、又はフォーム上でデータを入力後、 次データを入力などの作業で登録済みのデータを誤って編集してしまったりを防ぎたいのですが、チェックボックスなどを設けてチェックが入っている行(レコード単位)を編集ロック、解除をすることは可能なのでしょうか。

  • Accessのmdbがすぐロックされてしまう。

    お世話になります。 現在access2002を使ってシステムを構築しています。現状を説明させて頂くと, ・私    テーブル,クエリやマクロ等を作成・編集。 ・ユーザー テーブルやクエリを参照。テーブルの中身を編集。 という状況なんですが,ユーザーがクエリ等を開いているだけで全体にロックがかかってしまい,関係ないマクロやクエリの編集が出来ないことがよくあります。 「ユーザーが使う時間帯に編集しない」「先に開いてずっと所有権をもったままにしておく」「参照するようのファイルを別で作りそちらで参照させる。」等の運用面のカバーは思いつくのですが,ユーザーが現在編集しているテーブル以外にロックがかかる状態がやるせないです。 ・既定の開くモード「共有モード」 ・既定のレコードロック「編集済みレコード」 ・レコードレベルでロックして開くにチェック。 この三つを選択しているので,ユーザーがテーブルを開き,何らかの修正を行っていて,完了させるまではテーブル一つだけがロックされるってなればいいと思うんですがそうではないみたいです。 最終的な質問としては,「ユーザーがテーブルの編集をする度に全体にロックがかかってしまうのを防ぐ方法はないでしょうか?」となります。 お手数おかけしますがご回答宜しくお願い致します。

  • Access特定のテーブルを編集不可にしたい。

    Access2000で作ったMDBがあります。 特定のテーブル(レコード件数は1件)のデータを編集不可にしたいのですが、 可能でしょうか・・?  ・該当テーブルのみパスワードをかける。  ・該当テーブルにロックをかけ、編集不可にする。 など、何か方法はないでしょうか・・・? (隠しオブジェクトは試してみました) よろしくお願いします。

  • INSERTにおいてロック処理は必要か

    データベースでのロック処理に関する初歩的な質問です。 とあるテーブルのとある行をSELECTして、しかる演算処理の後に同じテーブルにUPDATEするときには、ロック処理が必要であることは理解できるのですが、 単純に独自のデータをテーブルにINSERTする場合、ロック処理は必要なのでしょうか? このテーブルには頻繁にユーザーがアクセスしてSELECTもUPDATEも走っている状態です。

    • ベストアンサー
    • MySQL
  • $Keywordのレコードの他のデータの渡し方

    PHPとMYSQLを使ったホームページを作っていますが 次のような値渡しが出来なくて困っています。宜しくお願いします。 1ぺージ 入力フォームに入力された値$keywordをPOSTで次のページに渡す 2ページ目 受け取った$keywordをMYSQLデータベース、テーブルの中を検索、表示 その時に フィールドが 番号 名前 住所 の場合で$keywordは名前のフィールドで次のページには $keywordデータの番号をPOSTしたいのです。 たとえば 番号  名前  住所 12  $keyword 京都府 13  ○ ○ ○ 大阪府   のようなテーブルで 番号の「12」を次のページに POSTする場合どのように書いたらいいのでしょうか。 $keywordのレコードを表示してそのレコードの番号フィールドの値を$iに置き換えてPOSTしようと するのですが、$iには何も入りません。 どうしたらいいのか困っています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • htmlでデーターベースと接続(?)

    (前置き) すいません、素人なもので、 説明がうまくできないのですが…f(^_^;) (唐突ですが) たとえば、100名くらいの社員がいて その社員のデーター(氏名・住所・顔写真など)のデーターがあったとします。 最初のページには社員の氏名がズラ~っとあって そのうちの1人の名前をクリックすると どこか別のデーターベースから、 その人のデーターが呼び出されて表示される。 そんなhtmlをつくりたいのですが、できますでしょうか? そのためのデーターベース(写真入り)も、 なんのソフトで、どのように作ればいいでしょうか? …ほんと、説明が下手ですいませんm(__)m (ちなみに) 簡単なホームページは作成したことがありますが、 ジャバスクリプトやフラッシュは 既存の素材屋さんから引用してくる程度で 解読はチンプンカンプンなワタクシです。 よろしくお願い致します。

専門家に質問してみよう