OKWAVEパソコン版の推奨環境変更のお知らせ
  • ベストアンサー

AccessのDateSerial関数

テーブルの「登録日」というフィールドに記入してある日付から、3年後の日付を表示させるためにフォームでDateSerial関数を使っています。 しかしこの関数を使ってみると、テーブルの「3年後日付」フィールドにはDateSerial関数で計算させた日付が入ってきません。 また、同じ事をクエリでもDateSerial関数を使って行ってみましたが、やはりテーブルには反映されませんでした。 どうすればテーブルに3年後の日付が反映されるようになりますか? かなりAccessの初心者なので変な事を聞いてしまっているかもしれませんが、どうぞアドバイスをよろしくお願い致します。

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

>「テーブルにMe!3年後日付=Me!3年後日付1と書き込む」 とはどういう事なのでしょうか(>_<)?テーブルのどこに 「Me!3年後日付=Me!3年後日付1」を記述したらよいのかがわかりません。。 これはテーブルに書き込むのではなくフォームの閉じる時やレコード移動時のイベントに追加して記述し3年後日付1の取得した値をテーブルに書き込むという事です。 フォームを閉じるボタンをウィザードで作りプロパティのイベントの閉じる時を開くと(例えばボタン名をコマンド1という名前でフォームを閉じるボタンを作った時) Private Sub コマンド1_Click() On Error GoTo Err_コマンド1_Click DoCmd.Close Exit_コマンド1_Click: Exit Sub Err_コマンド1_Click: MsgBox Err.Description Resume Exit_コマンド1_Click End Sub 上記のような記述が出来ます。ここにMe!3年後日付=Me!3年後日付1を追加します。 Private Sub コマンド1_Click() On Error GoTo Err_コマンド1_Click Me!3年後日付=Me!3年後日付1 'このように閉じる処理の前に追加 DoCmd.Close Exit_コマンド1_Click: Exit Sub Err_コマンド1_Click: MsgBox Err.Description Resume Exit_コマンド1_Click End Sub これで閉じる時にテーブルの3年後日付に反映されます。 レコードの保存ボタンの場合はイベントの記述の中に DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 という記述があるのでその前に同様に追加します。 新しいレコードの追加ボタンの場合は DoCmd.GoToRecord , , acNewRec という記述があるのでその前に同様に追加します。 >「Me!3年後日付=Me!3年後日付1」 と記述する際にはフォームのコントロールソースには=DateAdd("yyyy",3,[登録日])と記述したままでよいのですよね? 上記の処理の場合はそのままにしてください。

om_mozzz
質問者

お礼

とても詳しく丁寧なお返事をありがとうございます(>_<)!! 教えて頂いた方法でフォームを閉じるボタンを作り、 実際に作業してみました。 初めレコードを2件分データを入れ、 作成した閉じるボタンより画面を閉じテーブルを見てみたところ、 きちんとデータが反映されていました。 そこで引き続き入力用フォームに戻り3件目のデータを入れた後、 作成した閉じるボタンをクリックしたら、 『フィールドを更新できません』 と表示されてしまい作成したボタンからは画面を閉じれず、 更にテーブルにもデータを反映させる事が出来ませんでした。 なぜこのような事になるのでしょうか? 教えて頂いているのにまたまたうまく操作する事が出来ず、質問だらけで申し訳ないです。。 よろしければまたご回答の方をどうぞよろしくお願い致します。

その他の回答 (4)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.5

>『フィールドを更新できません』 何がダメでとか他にメッセージはありませんか。 テーブルの入力規則に反しているという事でしょうか。 >入力用フォームに戻り3件目のデータを入れた後・・ 新規のレコードを追加する際には追加できませんでした。のようなメッセージのはずなのですが・・。 更新できないとメッセージが出ているのはすでにあるレコードに更新をかける時のメッセージだと思うのですが。

om_mozzz
質問者

お礼

お返事が大変遅くなり、本当に申し訳ありません(>_<)!!!! パソコンの調子が悪く修理に出しており、ネットすら出来ない状態で、ご回答を頂いていたことも知らず本当に失礼致しました!!! 質問をさせて頂いていたこの件なんですが、パソコンが戻ってきてすぐに改めて作り直ししてみたところ、エラーメッセージも出なくなり、問題なく動くようになりました!! 初心者なため、自分ではちゃんと教えて頂いたとおりにしているつもりでも、もしかしたらどこかで変な間違いばかりしながら作ってしまっていたのかもしれません。。。 大変お世話になったにも関わらず、お返事もお礼もとても遅くなり、本当に失礼致しました(>_<)!!!!! 本当に毎回とても丁寧なご指導を頂き、ありがとうございました(>_<)!!!!!

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

>テーブルに3年後の日付が反映されるようになりますか クエリで 式1: DateAdd("yyyy",3,[日付1]![日付])の演算フィールドを作る。 メニューの クエリ テーブルの作成 テーブル名の指定 クエリを名前をつけて保存 ーーー クエリの実行 3年後の日付フィールドも入ったテーブルができる。 普通必要なときに3年後の日付を作ればよいので、質問は本意ですか。誤解釈ですか。

om_mozzz
質問者

お礼

ご回答をありがとうございます。 質問した内容は本意です。 パラメータを表示させ、 そこで3年後の日付を求めるのもいいのですが、 データを管理する上で、 事前に日付を計算させそのデータを保存し、 それを基に処理させていきたいのです。。 なので出来ればフォームで計算させた日付を テーブルにデータとして残しておきたいのです。 Access初心者なので、なかなかうまくいきません。。 案を出して下さってありがとうございました!

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

>フォームでDateSerial関数を使っています >テーブルの「3年後日付」フィールドにはDateSerial関数で計算させた日付が入ってきません フォーム上で計算された3年後日付がテーブルに反映されないという質問でしょうか。 フォーム上の3年後日付のコントロールソースに =DateAdd("yyyy",3,[登録日]) といれていませんでしょうか? この場合あくまでもフォーム上で表示のみとなってしまうのでテーブルの3年後日付には書き込まれません。 フォーム上で3年後日付に計算された日付をテーブルに書き込むには別の処理が必要です。 フォームの閉じるときやレコードの移動時のイベントなどに書き込ませる場合はフォーム上の3年後日付を表示するコントロール名を別の名前にする必要があります。例えば3年後日付1のように。そして Me!3年後日付=Me!3年後日付1 のようにテーブルに書き込む記述が必要です。 別の方法として フォーム上の3年後日付コントロールのコントロールソースは3年後日付としておき。 別のコントロール(登録日などの)の更新後処理のイベントに Me!3年後日付=DateAdd("yyyy",3,[登録日]) としてそのコントロールが更新されたときに3年後日付に計算した日付を代入させればそのままテーブルに反映することが出来ます。

om_mozzz
質問者

お礼

お返事をありがとうございます! ご回答の中に、 >Me!3年後日付=Me!3年後日付1 >のようにテーブルに書き込む記述が必要です。 という記述がありましたが、 この「テーブルにMe!3年後日付=Me!3年後日付1と書き込む」 とはどういう事なのでしょうか(>_<)? テーブルのどこに 「Me!3年後日付=Me!3年後日付1」 を記述したらよいのかがわかりません。。 本当に初心者で基礎的な事を聞いてすみません(>_<)! また、テーブルに 「Me!3年後日付=Me!3年後日付1」 と記述する際には、 フォームのコントロールソースには 「=DateAdd("yyyy",3,[登録日])」 と記述したままでよいのですよね? たくさん質問をしてすみません(>_<)。。 ご回答の方をどうぞよろしくお願い致します。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

3年後ですか DateSerial(Year([登録日])+3,Month([登録日]),Day([登録日])) とでもしたのでしょうか? DateAdd("yyyy",3,[登録日]) の方がいいのでは? http://support.microsoft.com/kb/882982/ja

om_mozzz
質問者

お礼

>DateAdd("yyyy",3,[登録日]) >の方がいいのでは? このような関数があったんですね^^; まだ勉強し始めて間もないので、とても勉強になりました!DateSerial関数より記述も少なく簡単ですね! お返事をありがとうございました!

関連するQ&A

専門家に質問してみよう