マスターmdbにメインとなるテーブルを置き
(ID,課,担当者名,商品番号,商品名,価格・・・)
3課まであるのですが、各課の専用フォルダに編集するmdb
(仮に編集mdbとします)を置いて
メインテーブルをリンクし、同じフィールドを用意した編集用テーブルを置き、フォームやクエリを作成して作業しようとしています。
基本的に同じ顧客に一斉に手を加える事はないので
編集用テーブルに一旦格納したデータを追加クエリでリンクしたメインテーブルへ書き込み、削除クエリで編集用テーブルを綺麗にしています。
が。そもそも新規ばかりではなくメインテーブルに既存のデータを読み込んで編集したい事もあります。
この処理をどうしたら良いのか分かりません。誰かがメインテーブルを参照していたら他の人が見れないと思うし、1レコードだけ見るのであればそれだけ一旦編集用テーブルへ置けば良いのかと思いましたが、
一覧を見てソートしてみたりする事もあります。
管理者が全部のデータを掌握したいのでマスターmdbにメインとなるテーブルを置いたのですが、これを課ごとのテーブルに分ければ良いのでしょうか?
Accessをいじればいじる程毎回発見がありますので、知らないだけで他に簡潔な方法などありましたら教えて下さい。宜しくお願いします。
No.2ベストアンサー
- 回答日時:
> メインテーブルをリンクし、同じフィールドを用意した編集用テーブルを置き、
(中略)
> 編集用テーブルに一旦格納したデータを追加クエリでリンクしたメインテーブルへ
> 書き込み、削除クエリで編集用テーブルを綺麗にしています。
これができているのでしたら、既存データの編集もそれほど難しくはないかと思います。
但し、1画面で「上書き更新」と「削除」の双方に対応すると少し複雑になりますので
(→新規追加/既存編集/既存削除とも、同時に複数レコードを扱うことを想定)、
ここでは更新と削除は別として考えることにします。
(メニュー画面に、「新規追加」「既存編集」「データ削除」の3つのボタンがあって、
それぞれ専用のフォームがあるイメージです)
現在行われている「新規レコードの追加」と、今回ご希望の「既存レコードの編集」
及び「既存レコードの削除」を比較して、概要を説明してみます:
<新規レコードの追加>
1)【削除クエリ】編集用テーブルのレコードを全て削除
※前回作業時に、何らかのエラーで削除が行われなかった場合への対応です。
2)【ユーザー】編集用テーブル(を元にしたフォーム)に対して、新規レコードを追加
3)【追加クエリ】コマンドボタンのクリックで、編集用テーブルからメインテーブルに
書き込み
4)【削除クエリ】編集用テーブルのレコードを全て削除
<既存レコードの編集>
1)【削除クエリ】編集用テーブルのレコードを全て削除
※編集用テーブルは、新規レコードの追加用とは別に作成し、「更新」フィールド
(データ型はYes/No型、既定値はNo)を追加しておきます。
2)【追加クエリ】メインテーブルから編集用テーブルに書き込み
※新規追加の時とは逆方向にデータをコピーするということです。
なお、追加クエリでも選択クエリと同様に、絞り込み条件を指定できますので、
担当の課に限定するとか、更に商品名を曖昧検索で抽出する、といったことも
検討してみて下さい。
3)【ユーザー】編集用テーブル(を元にしたフォーム)に対して、既存レコードを変更
※フォームのプロパティシートの『データ』タブで以下を設定しておきます:
「追加の許可」=「いいえ」、「削除の許可」=「いいえ」
※フォームの「更新後」イベントで、「更新」フィールドの値を「Yes」にします。
(フォームにはチェックボックスとして設置の上、プロパティシートの「書式」タブで
「可視」を「いいえ」にしておきます)
4)【更新クエリ】コマンドボタンのクリックで、編集用テーブルで「更新」フィールドが
Yesのもののみ、メインテーブルのレコードを上書き
※双方のテーブルで、共にIDが主キーだと思いますので、このIDで両テーブルを
結合させてクエリを作成し、更新クエリのデザインビューの「レコードの更新」欄に
「[編集用テーブル].[担当者名]」等を記入します(→添付画像)
※主キーであるIDは、上書き更新の対象から外し、それ以外のフィールドを更新。
5)【削除クエリ】編集用テーブルのレコードを全て削除
<既存レコードの削除>
1)【削除クエリ】編集用テーブルのレコードを全て削除
※編集用テーブルは、既存レコードの編集用のものと同様に新たに作成し、
「削除」フィールド(データ型などは「更新」と同じ)を追加します。
2)【追加クエリ】メインテーブルから編集用テーブルに書き込み
3)【ユーザー】編集用テーブル(を元にしたフォーム)に対して、削除したいレコードの
「削除」チェックボックスをYesに更新
4)【削除クエリ】コマンドボタンのクリックで、編集用テーブルで「削除」フィールドが
Yesのもののみ、メインテーブルのレコードを削除
※この削除クエリも、上と同様にIDで双方のテーブルを結合させて作成します。
5)【削除クエリ】編集用テーブルのレコードを全て削除
・・・以上のように、新規レコードの追加の場合に比べて、メインテーブルからの
レコードのコピーが入るのと、編集用テーブルからメインテーブルへの反映に使用する
のが追加クエリか更新クエリ/削除クエリかの違い、です。
(・・・そのわりに、長文になってしまいましたが・・・(汗))
この回答への補足
回答へのお礼の補足なのですが。。。
ワークテーブルを分けた方が、クエリ処理一発で済むのですね。
やはりワークテーブルは3つ作る事にします。
ありがとうございました!
回答ありがとうございます!
編集は、一旦テーブルを全部コピってきて、編集したレコードだけをクエリで上書きする、という事ですね?
成る程成る程・・・と思っていじっていましたが、一覧をソートしたりなんだりする事も発生します。
いっそ1つのワークテーブルに一旦全部コピってきて、更新フラグを
0=新規追加 : 1=編集 : 2=削除 とか数値で立てて
更新フラグが立っている物を、値を見て処理を振り分けるとかしたら変ですか?
あれ・・・?丁寧に教えて頂いたのに変な質問してしまっていましたらすみません;もぅ1つの回答の方と両方試そうと試行錯誤してわたわたしています。すみません。ありがとうございます。
No.1
- 回答日時:
こんにちは。
文面を見るとこの方式で既に作業をされているのでしょうか?
MDBをメインDBと作業用DBに分けるという事は良い事と思います。
アクセスは基本的に5クライアント迄のDBへのアクセスをコンセプト
にしているようです。
よって、作業クライアント数も問題は無いようです。
作り方ですが、せっかくリンクテーブルとしてあるので別に
各テーブルに同じ形式のテーブルを作らず、直接このリンクテーブル
を基にクエリを作成し、データ追加用クエリ・データ編集用クエリ・
データ削除用クエリの大体3種類を作って行なえばよいのでは
無いでしょうか?他のクライアントがテーブルを参照していても
作業者のマシンで同じテーブルは使えるはずです。
又、基本的に同じ顧客に一斉にアクセスしないとの事ですので、
多少不安ながら削除クエリを作動させる際にデータロックも
必要ないのでは?(VBA調べれば、削除実行前にテーブルロック
させる方法もあったはずですのでそれを使えばより安全ですが)
以上、参考まで
回答ありがとうございます!
直にリンクテーブルをいじるのもアリなんですね。
誰かが参照していると開かないのかな…と思っていたのですが。
試しに自分のPC内ではありますが、複数の編集用mdbを作成して
(リンクするテーブルはMaster.mdb)同時に
リンクしているテーブルを参照しているクエリを使ったフォームを開いてみたのですが動きました!シンプルで良いですね。
同時に一覧を眺める事もありそうなので、これは助かります。
データロックは知りませんでした。何かあってはいけないのでその処理を頭に入れておきます。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで、フォームに情報を入...
-
アクセスでの追加クエリでのエ...
-
アクセス レポートの行数を固...
-
Accessの最大レコード数
-
Accessでレポート内の繰り返し...
-
ACCESSでテーブルにあるチェッ...
-
mdbの破損「データベース形式・...
-
フォーム内のデータをすべて更...
-
エクセルデータをワードで差し...
-
日付型のフィールドに空白を入...
-
ACCESSのフィールドの表示順が...
-
SQL文で パラメータが少なすぎ...
-
エクセルのデータをアクセスに...
-
AccessのDLookUpの第3引数の値...
-
Excleピボットでデータのない部...
-
アクセスのエラー「クエリには...
-
アクセスで追加した項目に全て...
-
差込印刷での全角表示について...
-
2つのテーブルに共通するレコ...
-
Accessで日付の比較がうまくい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クエリの結果が文字化け(Access...
-
ACCESSでテーブルにあるチェッ...
-
ACCESS2010 フィルタ後のエク...
-
Accessの最大レコード数
-
Accessで、フォームに情報を入...
-
フォーム内のデータをすべて更...
-
Accessでレポート内の繰り返し...
-
アクセスでの追加クエリでのエ...
-
Accessのテーブルを開いたとき...
-
ACCESSでの関数について
-
Accessのオートナンバーについて
-
Access 「主キーにはnull値を...
-
レコード件数が0件なら印刷を...
-
ACCESS2000 更新クエリで文字...
-
Access:リンクテーブルでの参...
-
ACCESSでのひとつ前レコードの...
-
アクセス レポートの行数を固...
-
access IDの振り直しについて
-
Accessの保存のタイミングについて
-
Accessでの宛名ラベル出しについて
おすすめ情報