- ベストアンサー
アクセスで
アクセスであるテーブルに日付付きの注文した品物の履歴一覧があります。フィールドは"日付""品物目""注文個数"で、このテーブルは毎日追加されていきます。 もう一つのテーブルに品物の単価一覧があります。フィールドは"品物名""単価"です。 クエリで1つ目のテーブルの"注文個数"に2つ目のテーブルの"単価"を掛け合わし"日付""品物名""注文個数*単価=注文金額"としています。 この履歴が3か月分ぐらいありますが、単価は期間関係なしに変更があるものと、変更が無いものとがあり、いきなり何品か変更になったりします。 ですから、単価が変更になった時に、単価一覧テーブルの単価を変更してしまと、変更前データまで影響してしまい、過去のデータを見たい時に困ってしまいます。 単価を変更しても、変更前のデータは残る様にできますか? 品物名は2000種類ぐらいあり、単価変更も何か月に1回ぐらいはあります。又、過去のデータを見る事も度々あり、その時に売上に対して、注文がどの程度あったかなど、非常に大事なデータになっています。 誰か教えて頂けませんか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No3です。 >"今日付けのデータのみ抽出し、履歴保存テーブルに追加" "今日付けの履歴一覧テーブルのデータを削除するクエリを実行" の方法を教えて頂けませんか? これですが、クエリのデザインには 選択クエリの他、追加・更新・削除 他、あるのはご存知ですか? これらを知らない時は参考書やヘルプ等で調べてください。 とりあえず、doradora64さん記載のテーブルとクエリを基に行います。 履歴一覧テーブル(日付・品目名・数量) 単価テーブル(品目名・単価) クエリ1(日付・品目名・数量・単価/単価テーブル・式1(数量*単価) があることとします。 (なかったら空データベースを作成し上記のままのテーブルを 作っておいてください) そして私が記載した履歴保存テーブル(日付・品目名・数量・単価・金額) を新たに作成しておいてください。 そして更新クエリ (クエリ2)を作成します。 クエリデザインを開き、右クリックからSQLビューを開きます。 そこに下記SQLをコピー・ペーストして保存してください。 INSERT INTO 履歴保存テーブル ( 日付, 品目名, 注文個数, 単価, 金額 ) SELECT クエリ1.日付, クエリ1.品目名, クエリ1.注文個数, クエリ1.単価, クエリ1.式1 FROM クエリ1 WHERE (((クエリ1.日付)=Date())); つぎに削除クエリ(クエリ3)を作成します。 同じ手順で下記SQLをコピー・ペーストし保存します。 DELETE 履歴一覧.日付, 履歴一覧.品目名, 履歴一覧.注文個数 FROM 履歴一覧 WHERE (((履歴一覧.日付)=Date())); この2点をデザインモードで開けば、どのテーブルやクエリを基ににし 作成されているか大体つかめると思います。 履歴テーブルと単価テーブルにサンプルデータ作っておいてください。 それで自動実行についてですが、マクロのデザインを開き アクションにSQLの実行を選び、下の方のSQLステートメントに 更新クエリで示したSQLを貼りつけてください。 次の列に移り、アクションを同じくSQLの実行とし、ステートメントには 削除クエリのSQLを貼りつけ、マクロの保存。 このマクロを実行させれば2つのクエリを順番に実行します。 まずはこの動作確認をしてみてください。 又、>データはエクセルから1日1回、200レコードほどインポートします。 についてですが、もしエクセルデータ自体、このレコードに移した時点で 不要になるのであれば、エクセルは2003以前の形式で作成しておき テーブルデザインから右クリックでテーブルのリンクを選び、 ファイルの種類を microoft exel に変えて該当するエクセルを 選択しリンクとするとアクセスのテーブルとして使えますので、 インポート作業は不要です。。。。
その他の回答 (3)
- tag1701
- ベストアンサー率54% (67/123)
やはり履歴データに単価・金額列を追加しておくべきと思います。 本来であれば非連結フォームを作成し、日付入力欄、品物名、注文個数、 単価、金額とし、品目名を入れた際に単価欄に該当単価をセットし 金額を計算。登録ボタンで履歴テーブルに登録という形がスタンダード です。(多少VBAを使用する事になりますが) VBAなしであれば、現在のテーブルの他に履歴保存テーブルとして 前述の全ての項目列で作成しておく。 現在の方法で作業を進める。 一日の終わりに行なう。 追加クエリを作成する。 (今日付けのデータのみ抽出し、履歴保存テーブルに追加されるように 作成) 削除クエリを作成する。 (今日付けの履歴一覧テーブルのデータを削除するクエリを作成し実行) この作業を一連の流れで行なえば、VBAは使わなくても良いですし 一日の終わり作業はマクロに登録しておけば1回の命令で 自動でしてくれるようにも出来ます。 参考まで。。。
補足
データはエクセルから1日1回、200レコードほどインポートします。 保存済インポートからインポートを実行していますが、 このインポート作業と教えて頂いた作業を1回の命令にまとめる事はできますか?できるのであれば教えて頂きたいです。 "今日付けのデータのみ抽出し、履歴保存テーブルに追加" "今日付けの履歴一覧テーブルのデータを削除するクエリを実行" の方法を教えて頂けませんか? よろしくお願いします。
- sazitarius
- ベストアンサー率59% (57/96)
簡単には行かないかな・・ 方法的には2通りですかな 1.単価一覧に日付を追加して過去の単価を残す。 注文の新規入力時に最新の単価のみを表示するようなクエリを作成表示 ただし永遠に単価テーブルが増え続けてしまいます。 2.注文履歴に単価情報を追加して注文の新規入力時に単価一覧から単価を コピーして履歴を残す方法 後者の方が良いと思いますがソフト変更が難しそうですね。
補足
注文履歴に単価フィールドを追加し、注文新規入力時に単価一覧から単価ををコピーして履歴を残す方法を教えて頂けませんか? よろしくお願いします。
- gandl
- ベストアンサー率46% (6/13)
このような場合には通常、履歴一覧のテーブルに単価フィールドを持つ必要があります。 単価一覧テーブルには常に最新の単価を管理しておき、履歴一覧に追加する 時に単価一覧から対象の単価を取得し、単価フィールドに保持します。 このようにすることでデータ追加時点の単価を持つことができます。
補足
履歴一覧に追加する時に、単価一覧から対象の単価を取得し、単価フィールどに保持します。 というのはどの様にしたら良いのですか?
お礼
丁寧に回答頂き、大変助かりました。 ありがとうございました。