• 締切済み

Access レコードロックについて教えてください

現在稼働中の受注管理システムに発生データの登録、管理を行っておりますが、既登録データを呼び出し、追加情報の入力する際等のタイミングで、登録済みの顧客や商品を何だかのミス操作で全く別のレコードに書き換えてしまうケースがあり困っています。 排他制限も考慮しましたが、意向に添わずの状況です。 排他制限ではなく、レコード毎に例えばチェックを入れるだけで安易な書き換え止め、チェックを外せば追加変更ができる様な仕組みは可能でしょうか。 宜しくお願いします。

  • ozoxq
  • お礼率27% (3/11)

みんなの回答

  • panacon
  • ベストアンサー率31% (214/679)
回答No.4

ozoxqさんへ 受注データのロックについては、下記のように対応するのがお勧めです。 受注データをサブフォーム内で、n個書き込んで行くのであれば、サブフォームを編集ロックにして、メインフォームにサブフォームのロックをFalseに代入するボタンをつけます。勿論、ページ移動時には、サブフォームをロックしてしまえば、開いたときやページを移動したときは、ロックされた状態で出現し、ボタンを押したときだけ、編集可能になります。 受注データをメインフォーム内で行っているときは、ロックしたいフィールドをコントロールするボタンをつけること。フィールドひとつずつのプロパティを設定するのが面倒であれば、ロック解除ボタンをヘッダーかフッターに移動して、ページをロックしてしまえばOKです。 私の場合は、ロックしているかどうかが見た目で分かるように、ロックするときと解除するときに、フィールドの背景色も代入するようにしています。

  • panacon
  • ベストアンサー率31% (214/679)
回答No.3

ozoxqさんへ 商品コードと商品名などのn個積み上げのデータは、サブフォームに収めているのではと思います。 私なら、レコード移動時のアクションで、メインフォームの顧客コードのフィールドをロックすることと、フィールドの移動で、ロックされた顧客コードに移動するようにします。顧客名称は最初から編集ロックしてしまいます。 そうすると、移送した再に誤ってタッチしてしまって、Key情報を消してしまうリスクが減ります。 新規登録時には、新規登録ボタンを付けて、そのマクロの中で、顧客コードのロックをはずします。また、顧客コードをコンボボックスにして、顧客コードと顧客名を表示させ、顧客コードの更新後処理で、カラム関数で顧客名を代入します。 こんな感じです。

ozoxq
質問者

補足

ご回答をありがとうございます。 参考にさせていただき色々やってみたいと思います。 受注データのロックだと如何でしょうか。 ご回答頂きました設定は受注テーブルに対しても同様に考えればいいのでしょうか。 宜しくお願いします。

  • chie65535
  • ベストアンサー率43% (8525/19377)
回答No.2

>「受注テーブル」に登録した「顧客テーブル」或は「商品テーブル」が後作業で、別顧客や別商品にデータ変更が容易に容易に変更出来てしまう事です。 あ~、そういう事ね。 普通は、顧客や商品には「顧客コード」や「商品コード」など「重複しない固有のコード」を割り当てて、それで管理します。 受注テーブルには、「顧客コード」と「商品コード」と「受注日」や「出荷予定日」や「受注数」を入力します。 この時、顧客の情報や、商品の情報は、受注テーブルには入れません。 受注データから、顧客の情報や、商品の情報を引っ張る場合には、受注テーブル内の「顧客コード」や「商品コード」から、それぞれのテーブル内の該当レコードを呼び出して、常に最新の情報を表示するようにします。 商品や顧客を管理する場合、一度使った「固有のコード」は、使い回ししないようにします。 逆に「顧客が住所変更した」とか「顧客が結婚などで姓が変わった」とかって場合は、新規に顧客を作らないで、既存の顧客の情報を変更します。 顧客マスターを書き換えても、受注テーブルには「顧客コードしか入ってない」ので、問題は起きません。 受注テーブルを元に、受注した顧客を表示する際には、コードから最新の顧客の情報を引っ張るので、顧客テーブルを更新すれば、常に最新の顧客の情報が出ます。 商品の場合は、ちょっと工夫が必要。 仕入先が変わったなどの場合は、既存の商品のデータを更新すれば良いですが、価格改定があった場合は、新しい商品コードを割り当て直して「同じ名前の別の商品」として扱います。 例えば「りんご」が「105円」から「108円」に変わったら、以下の2レコードが商品テーブルに存在する事になります。 コード 商品名 単価 備考 0001  りんご 105  新規受注禁止 0002  りんご 108 価格改定前に105円で受注した「りんご」は、コード「0001」で受注データを打ち込みます。すると、自動的に受注データは「105円で受注」したことになります。 価格改定後に108円で受注した「りんご」は、コード「0002」で受注データを打ち込みます。すると、自動的に受注データは「108円で受注」したことになります。 うっかり、価格改定後に「コード0001」で受注データを打ち込んだ場合は、備考に「新規受注禁止」と入っているので、打ち間違いに気付きます。 商品マスタの単価を、いきなり105円から108円に書き換えてはいけません。 単価を書き換えると、旧単価で受注した物と、新単価で受注した物が、区別できなくなります。 ここで重要なのは「受注テーブルには、商品や顧客の情報は入れない」と言う事です。 受注テーブルに、商品や顧客の情報を入れてしまうから「受注テーブルの商品&顧客の情報と、商品テーブル&顧客テーブルの内容が食い違ってしまう」のです。 そして、質問者さんは「受注テーブルの商品&顧客の情報と、商品テーブル&顧客テーブルの内容が食い違ってしまうから商品テーブルや顧客テーブルを変更不可にしたい」と言う「誤った対処方法を探す事になっているのです。 「根本的な運用方法が間違っている」ので、そこから考え直しましょう。 基本は「受注テーブルには、商品や顧客の詳細情報は入れない。商品や顧客の最新データを引っ張るための固有のコードだけを入れる」です。 根本的な部分で「運用を間違っている」ので「受注管理システムの使い方を根本的な部分から改める必要がある」と思います。

  • chie65535
  • ベストアンサー率43% (8525/19377)
回答No.1

>登録済みの顧客や商品を何だかのミス操作で全く別のレコードに書き換えてしまうケースがあり困っています。 クエリでレコードをアップデートしている限り、そういうバグは発生しません。 そういうバグが発生するのは、自前で書き換えるべきレコード位置を調べて、そのレコードの内容を自前で書き換えている場合だけです。 「レコード位置を調べる」と「レコードの内容を自前で書き換える」の間に、並列処理で「レコードの更新」が行われると、もう既に「調べた位置に、目的のレコードが存在せず、別の場所になっている」と言う可能性があります。 レコードの更新を「クエリのUPDATE文」で行う限り、上記のような「並列処理の問題」は起きません。 また、アクセスのmdbは「定期的に最適化を行わないと、ガベージコレクションでのゴミが溜まって、修復しないとアクセス不可能になる」ので、日次処理などで毎日のバックアップを行う際に、データベースの最適化を実行しましょう。

ozoxq
質問者

補足

ご回答頂きありがとうございました。 「レコードの更新 クエリUPDATE」についてを再度調べさせて頂きました。 私の質問の仕方が下手だったのでしょうか、質問させて頂きました内容に外れている、或は知識不足の為、理解できずなのか判らない状況です。 改めて補足させて頂きます。宜しくお願いします。 現在、登録済みの「顧客テーブル」と「商品テーブル」を紐づける「受注テーブル」を日々入力の積み重をしています。「受注テーブル」は受注時点で既存の「顧客テーブル」の「商品テーブル」から選択しています。「受注テーブル」は商品の発送時点等で再度呼び出し入力しているのですが、ここで困っている事が今回の質問です。 「受注テーブル」に登録した「顧客テーブル」或は「商品テーブル」が後作業で、別顧客や別商品にデータ変更が容易に容易に変更出来てしまう事です。 追加情報の入力が前提なので、追加・変更が出来て当たり前なのですが、顧客そのものが容易に変わってしまう事に困っています。 チェックボックス等を設け、外せばそのレコードの変更が出来る様な、或はその程度の方法を探しています。 ご回答頂きました「レコードの更新 クエリUPDATE」はこの事に該当しているのでしょうか。 知識不足で恐縮ですが、宜しくお願いします。

関連するQ&A

  • ACCESS2000で最大値のレコードを取り出したいです。

    マイクロソフト ACCESS2000 についての質問です。 何万行かの受注データがある中で、顧客ごとに  ・最初に購入した受注レコード  ・最後に購入した受注レコード をそれぞれ出したいと思っています。 MAX関数やMIN関数を使うのかと思いましたが、 なかなかうまくいかず・・・ 最近SQLを学び始めたためどうもよくわかりません。 どなたか力を貸してください。 よろしくお願いします。

  • ACCESS2002、レコードのインポートができません!

    初心者です、よろしくお願いします。 ■ 仕様環境 WinXP Access2002 アクセス2002で顧客管理システムを作ってます。 アクセスAのテーブルにアクセスBのテーブルをインポートする時、 レコードだけインポートできないのでしょうか? どうしても違うテーブルが作られてしまいます。 例えば・・ アクセスAに「住所」という項目があり、そこには既にレコードが 何件か入っているのですが、そこにアクセスBの「住所」のレコードを追加したいのですが、 うまくいきません。そういう機能はついていないのでしょうか? また、アクセスBの情報をエクセルファイルに変えて「次のテーブルに保存する」で インポートしたのですが、最後の「完了」ボタンを押すと「エラーが発生し、 インポートできませんでした」という表示がでてインポートできません。 同じように電話番号や名前、メールアドレス等もアクセスAに追加したいのですが、 一つ解決しないと先に進まない気がするのでとりあえず住所だけにしぼってみました。 データを”追加”するような感じでしたいのです! 誰かお知恵を貸してください!

  • Accessでのフォーム入力エラー

    顧客管理を 顧客マスタ 受注明細 入金明細のテーブルを作成し、リレーションシップの設定をしてあります。テーブルには、この形で入力できるのですが、フォームをウィザードを使って作成(サブフォームのリンクされたフォーム)しました。 新規入力することができません。「テーブル’顧客マスタ’にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更をおこなうことはできません。」のメッセージが出ます。 どうしていいのか、わかりません。教えてください。

  • Access2010で、レコードを自動挿入する方法

    Windows7、Access2010を使い、仕事でデータベースの設計を行っています。 作成しているものは、ネットアプリの顧客情報管理が目的で、利用代金回収チェックをメインにしています。 お客様の入金を確認したら、使用者がフィールドに「済」と、データを入れるまではいいのですが、次の代金回収用レコードを自動挿入したいのです。 例えば、あるお客様の今月の使用料が振り込まれたら、ユーザーが確認用フィールドに「済」と入れます。すると、翌月のレコードがひとりでに作られているという仕組みを作成したいのです。もちろん、集金確認用フィールドは、空白の状態です。 できれば、VBA以外の方法でできると助かります。 宜しくお願いします。 イメージ図 顧客ID お客様名 請求日 入金確認 1    山田   4/25日  済   ↓(入金確認フィールドに「済」とデータが入ると) 1    山田   5/25日  (Null) が自動的に入る

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

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

  • アクセス97

    データ入力フォームからデータ検索をして同フォームに表示させる。一部書き換えた後 新しいレコードとして登録したいのですがどうしても同じレコードが書き換わってしまいます 助けてください。 具体例: 登録フォーム”A”に入力項目がID(主キー、オートナンバー)会員番号、名前、購入品、 購入日時等があります。”A”フォームから会員番号で名前を抽出して他の項目内容を 新たに入力し、追加レコードとして登録したい。 ”A”フォームにデータ抽出は出来るのですがレコード内容の書き換えになってしまいます。 回答よろしくお願いします。

  • ファイルメーカーPro8 直前のレコードからデータを引っ張る

    使用OS:Windows XP Prosessional 使用ソフト:ファイルメーカーPro8 現在、受注データベースを作成し管理しています。 新規レコードを作成する際に、初めての顧客であれば 今まで通りの新規レコード作成で良いのですが、 常連顧客の受注時は、作成の手間を少しでも省きたいと思い、 ・顧客名 ・住所 ・電話番号 を自動的に入力した状態で新規レコードが作成できるスクリプトを 新たに作りたいのですが、スクリプト作成がうまくいきません。 実際に、このような使い方をしたいです↓ 「常連新規」なるスクリプトボタンを押すと、 直前まで選択していたレコードに入力されていた 顧客名、住所、電話番号があらかじめ入力された状態で レコード作成される、、、という形です。 現在、このようなスクリプトを作成しています。 (これだと単なる新規レコードが作成されてしまいます) -------------- 新規レコード/検索条件 直前に参照したレコードから挿入[選択; 受注データベース::顧客名] 直前に参照したレコードから挿入[選択; 受注データベース::住所] 直前に参照したレコードから挿入[選択; 受注データベース::電話番号] -------------- お分かりになる方、是非間違いをご指摘ください。 それでは何卒宜しくお願い申し上げます。

  • Accessで自動採番の方法がわかりません。

    今月より弊社工場で、私が生産管理システムの構築を担当することになりました。 Accessでの構築です。また、Accessは初心者です。 質問は、受注登録時に受注登録フォーム(F_受注登録)で管理番号を自動採番したいのですが、やり方がわかりません。また、管理番号の自動採番実現のためにテーブルの手直し等ありましたらご教授願います。 管理番号の構成 MSSF-10001-1 MSSF→自社番号です。T_自社にMSSFとMSSTを登録しています。 10001→顧客番号と部署番号を結合しています。上3ケタが顧客番号、下2ケタが部署番号です。また、部署番号は顧客の部署になります。 1→枝番号です。1から順にカウントしていきます。例)MSSF-10001-1、MSSF-10001-2、MSSF-10002-1、MSSF-20001-1、MSST-30001-1 質問部分のフローと現在の進捗状況を記載します。 フロー F_受注登録を開く→受注内容を入力→受注内容登録時、管理番号を自動採番し、登録を完了する 現在作成済のテーブル、フォーム T_顧客、T_自社、T_ 受注一覧、T_部署、F_顧客登録、F_受注登録、F_受注一覧 T_顧客→顧客番号、顧客名 T_自社→自社番号、自社名 T_受注一覧→管理番号、顧客名、部署名、担当者、状態、工番、No、品番(図番)、品名、数量、納期、確定納期、出荷日、送り状番号、加工先、材料、材質、備考 T_部署→部署番号、部署名 F_顧客登録→T_顧客へ登録ができます。 F_受注登録→T_受注一覧へ登録ができます。 F_受注一覧→T_受注一覧の閲覧ができます。 ご不明な点等ありましたら、ご連絡ください。 よろしくお願いします。

  • Accessのクエリについて質問です。

    Accessのクエリについて質問です。 T_元データ、T_書換データという2つのテーブルがあります。 それぞれのテーブルは顧客番号、金額1、金額2、金額3というフィールドがあります。 テーブル生成クエリで、以下のような新規テーブルを生成したいと思います。 ---------------------------------------------------------------- 【1】顧客番号が一致した場合、T_元データの金額1、金額2、金額3を T_書換データの金額1、金額2、金額3に書き換えたい。 【2】顧客番号一致しない場合、T_元データの金額1、金額2、金額3を をのまま表示させたい。 ---------------------------------------------------------------- 【1】については正常に書き換えができていますが、 顧客番号が一致しない場合は、金額1、金額2、金額3がブランクになってしまいます。 【2】のような動きにするにはどうしたらよいのでしょうか? ちなみに、結合プロパティは以下のように設定しています。 左のテーブル名:T_元データ  右のテーブル名:T_書換データ 左の列見出し:顧客番号    右の列見出し:顧客番号 2を選択 ('T_元データ'の全レコードと'T_書換データ'の同じ結合フィールドのレコードだけを含め る。) よろしくお願いいたします。

  • access での値参照およびコピー

    はじめまして、 どなたかアクセス2007での処理方法を教えてください。 アクセス初心者です。よろしくお願いいたします。 以下のような3つのテーブルがあります。 salesテーブルはcsvファイルをインポートしたワークテーブルです。 テーブル名:sales(ワークテーブル) 受注番号 名前   住所 3   さぶろう 長野県 4   しろう  愛知県 ここから追加クエリで以下のテーブルにデータを追加しました。 (ID12と13、IDはオートナンバーです。) テーブル名:顧客マスター 顧客ID 名前 住所  10 たろう 東京都 11 じろう 神奈川県 12 さぶろう長野県 13 しろう 愛知県 そして以下のテーブルにも追加クエリでワークテーブルの情報を追加しました。 テーブル名:受注情報(受注番号3と4を追加) 受注番号 顧客ID  商品名 1    10   りんご(すでにあるデータ) 2    11   ばなな(すでにあるデータ) 3         りんご(今回ワークテーブルから追加したデータ) 4         みかん(今回ワークテーブルから追加したデータ) 上記の場合で、受注情報テーブルに顧客IDを挿入するには どのような方法で追加すればよいのでしょうか? ワークテーブルの中に顧客IDはないので単純な追加クエリでは できなのでどうやったらよいか分かりません。 (顧客テーブルと受注情報テーブルは結合されています。) 同姓同名を避けるためにsalesテーブルの名前&住所と顧客マスターテーブルの 名前&住所を比べて、同じものの顧客IDを受注情報テーブルの顧客ID欄に入れたいのです。 そうすると顧客テーブルと受注情報テーブルの顧客IDのリレーションシップに矛盾が 起きないのではないかと思っています。 よろしくお願いいたします。

専門家に質問してみよう