- ベストアンサー
アクセスでのデータ管理について(長文です。)
アクセス初心者です。 これからデータの入力、管理、帳票をアクセスで構築しようと思っているのですが、アクセスはデータを入力した時点でデータが保存されてしまうので過去のデータが残りません。またデータの変更及び共有をうまくやりたいのですがよい方法がわかりません。 今回構築したいデータベースは、 1.過去の記録がすぐわかるようにしたい。(更新前のデータがわかるようにしたい。) 2.データの変更及び共有を簡略化したい。(A社で変更したデータをB社のデータベースにいれこみたい。) 【データベースの概略イメージ】 A社 B社 データベース1 データベース2(1と同じもの) テーブル1 → テーブル1 テーブル2 → テーブル2 テーブル3 → テーブル3 クエリ1 クエリ1 クエリ2 クエリ2 フォーム1 フォーム1 フォーム2 フォーム2 *リレーションあり *A社でテーブル1の内容を変更して、B社のテーブル1を新しいものに置き換えたい。 (本を読むとリレーションが崩れると書いてありました。) *B社で変更してA社に戻すこともある。 テーブル1 項目 ID 100 住所 あああ 氏名 △△様 電話番号 111-1111 *例えば、ID100のデータの氏名を変更するとき、変更前がどうだったかわかるようにしたい。(1月時点では△△様、2月時点では□□様とか) 誰かアクセスの操作方法に詳しい方がおられましたら、よい方法又はアクセスに関する詳しい本とかサイト等教えて下さい。よろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
「アクセスはデータを入力した時点でデータが保存さ れてしまうので過去のデータが残りません」 ↑これはフォームのデータソースがテーブルになってるからで、テキストボックスは全て非連結にし、更新ボタン押下でテーブル更新するように作ればよいです。 テーブルと他のオブジェクトは切り離しましょう。 データソース1.mdb-DB1.mdb データソース2.mdb-DB2.mdb 実体-入物の関係。 データソース1、2にはテーブルのみが入ってます。 DB1、2には残りのオブジェクトたちがが入ってます。 データソース.mdbをA社→B社とかB社→A社とすればよいかと。 リレーションは崩れません。 もちろんAB社とも過去のデータソース.mdbはきっちり保存しておく。 そして検索フォームを作っておけば、すぐ過去データが調査できるかと。 もしくは、データソース.mdbを管理する別mdbを作って、テーブルが更新された際、テーブルをインポートし、中でグループ化すればよいかと。 こちらも長文でわかりにくい。
その他の回答 (5)
- delldelldell
- ベストアンサー率28% (13/45)
ANo.#5です。 この手のツールを作るにはマクロかVBAの知識が必要です。 多分ですが、理解されるべきは 1.非連結フォームを作成し、入力したデータをテーブルにインサートする。 2.テーブルが更新されたらテーブルをまるごとインポートし、クエリでグループ化し、さらにテーブル作成クエリで最新テーブルを作る。 3.データとアプリを分ける。 中でも2を早急に理解されることでかなり実現の近道になるかと思います。 要するに更新履歴が残るという意味です。
前の回答でテーブルが決まってからと言ったのですが「テーブルの更新」についてちょっとだけ書きます。私事ですがちょっと事情がありまして(あとで書きます)。 まずは更新の話。 > *A社でテーブル1の内容を変更して、B社のテーブル1を新しいものに置き換えたい。 > (本を読むとリレーションが崩れると書いてありました。) というのはテーブルそのものを上書きしようとするからでしょう。こういう場合は差分をテーブルに追加(または更新になるんでしょうが)してあげた方がいいと思います。今のところテーブルをどのようにするかが不明確なので具体的な方法はまだ書けませんが(あと、書くと長くなりすぎるので今回はご勘弁)。とりあえずのヒントにしてください。 それで私の事情なんですが、明日からしばらくマシンのない生活を送ることになりました。急なことで申し訳ないのですが私が回答することはもうできません。ごめんなさい。でも私よりもよっぽどできる人がいっぱいいるので大丈夫です(きっと)。なんか途中で投げ出すようで心苦しいのですが御理解下さい(今日はもうちょっと見てますけど)。 この質問を読んでいる方々、「何を勝手なことを」と怒られそうですがSky-Hさんを助けてあげて下さいね。すみません。
全貌がわからないのでもう少し詳しく聞かせて下さい。 このシステムは稼働中、もしくはテーブル構造の変更はしないという前提ですか? > IDを外のテーブルとリンク(リレーション)させないといけない... これは決定ですか?決定でなければ、テーブル1にレコードを識別する項目(例えばrec_idとか)を追加して、これをキーにしてリンクしてもいいと思うんですが。どちらにしても外のテーブルの項目が知りたいですね。 あと、マクロ、VBAとかを使うのはありですか? 更新の話はテーブルが決まってからにします。
> 2.データの変更及び共有を簡略化したい 質問を読みかえしてみると、A社の変更が直ちにB社の方に反映しなくてもいいのかな?例えば1日一回更新するとか。どっちですか? あと、サイトの紹介をしてなかったので参考URLを書いときます。このURLは過去の質問です。とりあえず、ここに書いてあるサイトを覗いてみては。
補足
早速の回答ありがとうございます。 質問がわかりづらくてすみません。 1.過去のデータについて 登録日を追加して、IDと登録日を組み合わせたキーを作成というのも確かに考えたのですが、IDを外のテーブルとリンク(リレーション)させないといけないことを考えるとどうしたらいいのか迷ってしまいました。 2.データの変更・共有について 1つのDBをネットワークを介して共有するのが一番だと思うのですが、それは出来そうにない(技術的にではなく、ネット環境が整いそうにない。)ので、お互い同じDBをもっておいて、基本的にはA社でデータ管理(変更等)を行い、あとでB社のデータを更新するように考えています。項目によってはB社のほうで変更したいテーブルもあるので、データを更新するときにお互いが変更した箇所だけ更新したいと考えています。つまり更新するときにDBそのものを入れ替えるのではなく、テーブルだけとかフォームだけとか更新できないかということです。よろしくお願いします。
> 1.過去の記録がすぐわかるようにしたい 既存のレコードはそのまま置いといて、新規レコードで登録する。登録日のフィールドを追加して、通常は登録日の一番新しいものを使う。履歴が見たかったらIDで抽出すれば見られる。IDは重複するのでキーとなるフィールドも追加する必要がある(もしくはIDと登録日を組合せてキーにする。できたかな?)。 > 2.データの変更及び共有を簡略化したい わざわざDBを2つ作らないで、A社、B社ともに同じDBを使用する。おそらくネットワークを介してアクセスすることを考えているんでしょう。接続方法は環境がわからないので書けません(わかっても詳しくないんですけど。詳しい人が教えてくれるでしょう)。基本的にAccess(MDB)は複数ユーザで使うようには考えられていないので、できれば違うDBを使用した方がいいんじゃないでしょうか。ユーザ数が多くないならMSDEでも。
補足
回答ありがとうございます。 >更新ボタン押下でテーブル更新するように作ればよいです。 更新ボタン押下で更新? >もしくは、データソース.mdbを管理する別mdbを作って、テーブルが更新された際、テーブルをインポートし、中でグループ化すればよいかと。 マクロとかVBとか利用する?グループ化? すみませんが、なにぶん初心者なものでいまいちわかりません。よろしくお願いします。