マスター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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSでテーブルにあるチェッ...
-
Accessで、フォームに情報を入...
-
Accessの最大レコード数
-
フォーム内のデータをすべて更...
-
ACCESS2000 更新クエリで文字...
-
ACCESS2010 フィルタ後のエク...
-
ACCESSのクエリ機能で重複した...
-
Access 「主キーにはnull値を...
-
アクセスでの追加クエリでのエ...
-
Accessの保存のタイミングについて
-
Accessのオートナンバーについて
-
Accessのテーブル
-
Access:リンクテーブルでの参...
-
mdbの破損「データベース形式・...
-
日付型のフィールドに空白を入...
-
差込印刷での全角表示について...
-
SQL文で パラメータが少なすぎ...
-
アクセスで追加した項目に全て...
-
アクセスのエラー「クエリには...
-
エクセルデータをワードで差し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クエリの結果が文字化け(Access...
-
ACCESSでテーブルにあるチェッ...
-
Accessの最大レコード数
-
Accessで、フォームに情報を入...
-
ACCESS2010 フィルタ後のエク...
-
Access 「主キーにはnull値を...
-
Accessのオートナンバーについて
-
アクセスでの追加クエリでのエ...
-
Accessでレポート内の繰り返し...
-
ACCESSでの関数について
-
Accessのテーブルを開いたとき...
-
フォーム内のデータをすべて更...
-
ACCESS2000 更新クエリで文字...
-
ACCESSでのひとつ前レコードの...
-
文字を含むIDの自動採番
-
レコード件数が0件なら印刷を...
-
アクセス レポートの行数を固...
-
Accessでの宛名ラベル出しについて
-
アクセスのレポートで、空白行...
-
mdbの破損「データベース形式・...
おすすめ情報