• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESSのテーブル設計)

ACCESSのテーブル設計について

このQ&Aのポイント
  • ACCESSのテーブル設計により、入庫情報を適時まとめたcsvファイルをデータベースに取り込むことができます。
  • 出庫時には箱番号と出庫日の情報をテーブルに反映させることができますが、重複する日付や箱番号の処理には工夫が必要です。
  • ACCESSのテーブル設計を活用することで、入庫情報や出庫情報を効率的に管理することができます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> 条件として箱は1日1回しか使わない事いません。 日本語になってませんが、「箱は1日1回しか使わない」つまり 「日付(入庫日)と箱番号の組み合わせでは重複することはない」 ということでいいですか。 Accessで用意するテーブルは、 T_入庫 入庫ID オートナンバー型 主キー 日付 箱番号 製品名 T_出庫 日付   主キー 箱番号  主キー 出庫日 T_入庫には、csvからデータを取り込みます。 その後、下記の追加クエリを実行して、T_出荷に 重複のない 入庫日、箱番号 データを追加します。 INSERT INTO T_出庫 ( 日付, 箱番号 ) SELECT DISTINCT 日付, 箱番号 FROM T_入庫; 既に T_出庫 にデータがある場合、追加できないデータがあるとのメッセージが出ますが、OKを押して実行します。VBAで自動実行する場合は、CurrentDB.Execute で実行するとメッセージを出さずに実行できます。 > (2)出庫するときは、箱番号と出庫日しか情報がない場合 出庫時の入力用フォームは帳票フォームとして、レコードソースを SELECT 日付, 箱番号, 出庫日 FROM T_出庫 WHERE 出庫日 Is Null; とします。 これでまだ出庫されていない箱の一覧が表示されます。 追加の許可、削除の許可は いいえ にしておきます。 フォームヘッダーに非連結のテキストボックスを2つ配置します。 名前は、txt箱番号、txt出庫日、cmd入力, txt出庫日の既定値は、 =Format(Date(),"yyyymmdd") としておきます。 txt箱番号の更新後処理で、 With Me.Recordset .FindFirst "箱番号='" & Me.txt箱番号 & "'" If .NoMatch Then MsgBox "該当する箱番号は有りません。" Else .Edit !出庫日 = Me.txt出庫日 .Update End If End With txt箱番号 に箱番号を入力してEnterキーで該当する箱番号レコードに出庫日が入力されます。 > 出庫した実績をテーブルに反映させ > 日付,箱番号,製品名,出荷日 > 20110303,A001,PPP,20110304 この結果が欲しい場合は、下記のクエリで得られます。 SELECT T_入庫.*, T_出庫.出庫日 FROM T_入庫 LEFT JOIN T_出庫 ON T_入庫.日付 = T_出庫.日付 AND T_入庫.箱番号 = T_出庫.箱番号 これは一例です。例えば、フォームのRecordsetを使って更新してますが、更新クエリで更新してもいいし、帳票フォームにしてますが、非連結メインフォームとサブフォームの組み合わせにしてもいいです。お好みで使いやすいように工夫してください。

hou66
質問者

お礼

hatena1989さん ありがとうございます。 とても助かりました。  また、今後ともよろしくお願いいたします。

hou66
質問者

補足

hatena1989さん ありがとうございます。 日本語間違いですみません。 >> 条件として箱は1日1回しか使わない事いません。 >日本語になってませんが、「箱は1日1回しか使わない」つまり >「日付(入庫日)と箱番号の組み合わせでは重複することはない」 >ということでいいですか。 では、なく 例で書いて見ましたように 箱は1日1回ですが、取り出したCSVには同一日付と箱が重複して出てきますので 一意ではありません。 すみませんがよろしくお願いします。

その他の回答 (5)

回答No.6

> あと、可能でしたら出庫入力のフォームを書き換え出来ないように出来れば > ありがたいのですが・ 各テキストボックスの「編集ロック」を「はい」にすればどうでしょうか。

回答No.5

下記のような業務の流れだと解釈しましたが、あってますか。 箱とは、バーコードのついたコンテナ、パレットのようなもので、入庫したときは、 この箱に複数の商品が積み込まれている。 出庫時は、箱単位でトラックなどに移し替えられて、出荷される。 空いた箱は、入庫側に戻されて、再び、そこに入庫された新たな商品が積み込まれる。 そのデータが、CSVで送られてくる。 この解釈のもとの回答ですので、もし違っている部分があったら、ご指摘ください。

hou66
質問者

補足

hatena1989さん  ありがとうございます。 おっしゃる通りです。希望通りに答えにたどり着くことが、やっと出来ました。 フォームで躓いて、初めに作成したフォームでは、なぜか入力が反映されず 再度同じやり方で行ってみると入力が受け付けられてデータ反映されました。 あと、可能でしたら出庫入力のフォームを書き換え出来ないように出来れば ありがたいのですが・・スナップにすると入力が出来ないので サブフォームにして対応すれば、よいのでしょうか? よろしくお願いします。

回答No.4

> 箱は1日1回ですが、取り出したCSVには同一日付と箱が重複して出てきますので > 一意ではありません。 箱を一日に複数回利用することはないのですね。 ならば、CSV(T_入庫)では重複しますが、出庫側からみた場合(T_出庫)、日付と箱番号の組み合わせで箱を一意に特定できますね。 ですので、ANo.1 のテーブル設計で問題ないと思いますが、どの辺りで躓いてますでしょうか。 提示されている情報からのみ判断したテーブル設計を提案してますが、実運用ではいろいな例外処理(返品とか積み替えとか・・・)が入るのでこのような単純なものでは対応しきれない場合もあるでしょうが、基本としてはこんな感じになるはずです。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

>日付も箱番号も重複するためうまく考えられません 同じ箱が一日に何ども出たり入ったりする と云うことですかね。 良く見受けるパターンとして 1 商品テーブル(在庫?) 2 出荷先テーブル(取引先?) 3 出荷記録テーブル を準備してリレーションを使って在庫管理する方法があります。 この場合 出荷の数量は 必ず 1 である 戻し(返品)の記録もデータに入れる この2つのアドバイスで以下かでしょうか? 入出荷記録テーブル 入出荷日  入出荷時刻 箱番号 出荷数 20110304 12:30:00  A001   1 20110304 14:50:00  A001   ー1 ・・・・ と 記録をデータ化してみては如何でしょうか? 箱が出入りするたびにデータが入る運用が不可欠ですのでバーコードリーダーなど 準備すると良いと思います。 その際に 出荷の際は 出荷数量が 1 戻しの場合は -1と入る様なフォームの 画面を準備します。 出荷可能な箱番号と出荷済みの箱番号を取り出す必要があると思いますが 出荷済みの箱番号は 出荷数の合計が 必ず 1  入荷済み 或いは 戻し後の箱番号は 出荷数の合計が 必ず 0 になりますので ピボットテーブルを使うと一度に集計が出来るはずです。 CSVデータを取り込み後、箱番号で不一致クエリを実行させて入荷のデータにあって 入出荷記録のテーブルにない箱番号を抽出して追加クエリで 入出荷記録のテーブルにデータが追加されるマクロを準備しておくと 一度のボタン操作で作業がすむでしょう。 その他 出荷先テーブル 入出荷区分テーブル など準備して それぞれをリレーションでつなぎ合わせたクエリで表示すると 入出荷日  入出荷時刻 入出荷先 箱番号 製品名 出荷数 区分 20110304 10:30:00       A001  PPP 0   新規 20110304 12:30:00  Aさん  A001  PPP 1   出荷 20110304 14:50:00  Bさん  A001  PPP ー1   返品 ・・・ となる様にすればもっと便利になると思います。 テーブル、クエリの準備は経験や実際の実務に対する知識が必要ですので十分に検討して 実験を繰り返して最終決定を行うと良いです。

  • 007MUKADE
  • ベストアンサー率41% (286/694)
回答No.2

”箱”をメインテーブルとして 箱ID(自動) 箱コード番号 箱の”入荷日”と”出荷日”・・・? 箱単位で 出荷するのですか?  箱の中身の”製品名”での 対応は・・・? >日付も箱番号も重複するためうまく考えられません  入荷日 と 出荷日は 別のフィールドを持つべきです。 ・・・・・ Exell 的な 表を 思い浮かべてられると 躓きます。   追加で・・・ 製品テーブルはもちろん造らないとなりません。 製品こちらの 管理は?  等々でテーブルを考えないと・・・・

hou66
質問者

補足

007MUKADEさん ありがとうございます。 箱単位で出荷します。 >入荷日 と 出荷日は 別のフィールドを持つべきです。 別フィールドということは別のテーブルってことでしょうか? 製品テーブルのことは、特に考えていません。 入荷日のデータは設備からやってくる    その中には一意のデータが存在しない 出荷は 箱 単位で出している 箱には多数の製品が混入されている どうぞよろしくお願いします。

関連するQ&A