- ベストアンサー
ACCESSで1月1日~12月31日までの日付を入れる方法
ACCESSで日報を作成するのですが、365日分のレコードを作りたいと思っています。 (記入のない日にもその日付と記入欄があるようにしたいです) こういうテーブルを作ろうとする際には、やはり予め365日分の日付を入力しておかなければなりませんでしょうか。 くだらない質問で申し訳ありませんが、ご教授お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>(記入のない日にもその日付と記入欄があるようにしたいです) いろいろな考え方があると思いますが、私はこのような時 テーブルを2つに分けることが多いです。 一つ目のテーブルはただ単に日付のみを入れておくもの、 二つ目のテーブルには日報のデータ(記載日時、対象日付、記録者ID、記載内容、、、、)を入れておくものとします。 情報を表示する際に、リレーションシップをつけて処理します。 こうすることにより、無駄なデータをなくすことができます。 >予め365日分の日付を入力しておかなければなりませんでしょうか。 あらかじめ箱を作っておくという考え方は、必ずしもだめというわけ ではありません。 (一月単位で行われることはよくあります。)
その他の回答 (2)
<日報> ID____________日付____________報告_1________________________報告_2 1_____________2007/01/01___報告します_1 2_____________2007/01/02____________________________________報告します_2 3_____________2007/01/03 4_____________2007/01/04 ・・・・・ 365_________2007/12/31 さて、今、日報の雛形を作成し、1/1と1/2の報告_1、報告_2を更新してみました。 この場合に、私が新たに書いたコードは以下のようです。 Option Compare Database Option Explicit Private Sub コマンド0_Click() Dim I As Long Dim Hiduke As Date For Hiduke = "2007/01/01" To "2007/12/31" I = I + 1 CnnExecute "INSERT INTO 日報 (ID, 日付) VALUES (" & I & ",#" & Hiduke & "#);" Next Hiduke End Sub Private Sub コマンド1_Click() CnnExecute "UPDATE 日報 SET 報告_1='報告します_1' WHERE 日付=#2007/01/01#" CnnExecute "UPDATE 日報 SET 報告_2='報告します_2' WHERE 日付=#2007/01/02#" End Sub つまり、質問者の構想もあながち実現不能な訳ではありません。 しかし、それが最適なやり方かどうかわ判りません。 なお、CnnExecute関数の類は Access では直接にはサポートされていません。 が、ADODB のヘルプを参照すると割りと簡単に作成できるでしょう。
お礼
ご回答ありがとうございます。ただ‥今の私にはまだまだ難しいようでした。 CnnExecute関数についても調べるうち、色々わかってきましたので、今後に活かしたく思います。 本当にありがとうございます。
- survey
- ベストアンサー率26% (17/65)
ご質問ですが、 (1)365日分のレコードを作りたい (2)予め365日分の日付を入力しなければならないか? (1)ですが、今すぐに365日分のレコードが欲しいという意味であれば、365日分の日付を入力する必要があるのではないでしょうか?この入力を簡便にするのであれば、VBを利用して容易に行えます。 (2)ですが、日付をあらかじめ用意するというのはあまり賢い方法ではありません。なぜなら、今後も用意し続けなければならないからです。私なら、ユーザー毎にレコードを抽出し、該当日付がなければレコードを新規追加するというようなコードを記述して対応します。 ちなみに、弊社で使用している日報システムは、VB+ACCESSで作成したものです。
お礼
ありがとうございます。 >なぜなら、今後も用意し続けなければならないからです。 確かにそうなのですよね。。しかし確実に日付を残そうとすると、 VBに明るくない私では予めの入力が一番早いような気がしています。 VBの方向でもう少し調べてみたいと思います。ありがとうございました。
お礼
なるほど、とても参考になりますね。 > あらかじめ箱を作っておくという考え方は、必ずしもだめというわけ ではありません。 > (一月単位で行われることはよくあります。) この言葉に励まされ、予め入力することにしました。 ありがとうございました!