- ベストアンサー
Access コントロールに設定した書式の例外?
- Access コントロールに設定した書式の例外について困っています。
- テーブルのフィールドには「事象ID」「発生日」「見出し」「内容」があり、データビューフォームで一覧表示しています。
- 「発生日」に入力した値が正しくないと表示される場合があり、どうすれば解決できるか教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
追記。 イベントプロシージャで何とかする場合、以下のようにします。 1.「入力用テキストボックス」を作成し、「コントロールソース」を空欄(非連結)にし、定型入力を「0000/99/99;;_」にして「定型入力中の文字を含めずに保存する」に設定する。 2.「入力用テキストボックス」の「更新後処理」に、以下のイベントプロシージャを書く。 Private Sub 入力用テキストボックス_AfterUpdate() Dim 入力文字 As String 入力文字 = [入力用テキストボックス] If Len(入力文字) = 4 Then 入力文字 = 入力文字 & "01" End If If Len(入力文字) = 6 Then 入力文字 = 入力文字 & "01" End If [入力用テキストボックス] = 入力文字 [更新用テキストボックス] = Left(入力文字, 4) & "/" & Mid(入力文字, 5, 2) & "/" & Mid(入力文字, 7, 2) End Sub 3.「更新用テキストボックス」を作成し、「コントロールソース」を「発生日」にし、定型入力を「日付(S)」にして「可視」を「いいえ」に設定する。 4.「フォーム」の「レコード移動時」に。以下のイベントプロシージャを書く。 Private Sub Form_Current() [入力用テキストボックス] = Format([更新用テキストボックス], "yyyymmdd") End Sub このようにすると「年4桁を入力した段階でENTERキーを押す」「年4桁、月2桁を入力した段階でENTERキーを押す」と、勝手に「1月1日」や「1日」が補われます。
その他の回答 (5)
- chie65536(@chie65535)
- ベストアンサー率44% (8757/19871)
>入力時にやっちゃったほうが、「簡単」じゃないか? >と思ったりしているところでございます。 Accessのテキストボックスの仕様の問題で「入力時」にやると問題が出ます。 最初、当方もそう考えて、入力時に桁を補おうとしてハマりました。 それと、例示したプログラムは「ヌルの時(空欄のままEnterを押した時)の対処をしてない」ので、空欄の状態でEnterを押すと「nullの使い方が~~~」と言うエラーで止まってしまいます。
お礼
chie65535様 ご返信ありがとうございます。 「入力時にやる」と言いますのは、『「うぎゃ~」のプロシージャは記述せずに、発生日を入力時にyyyy年01月01日と入力する』のでも、同じ事? だと、思ったのですが...? 話がかみ合っていなければ、すみません。
- chie65536(@chie65535)
- ベストアンサー率44% (8757/19871)
追記。 例示したプログラムは「手抜き」で「4桁入力された時」と「6桁入力された時」しか対処していません。 実際に運用する場合は「5桁入力された時」「7桁入力された時」のような「不正な入力」は更新を拒否するようにしましょう。 具体的には「更新前処理」のイベントプロシージャに、以下のコードを書きます。 Private Sub 入力用テキストボックス_BeforeUpdate(Cancel As Integer) Dim 入力文字 As String 入力文字 = [入力用テキストボックス] If Len(入力文字) = 5 Or Len(入力文字) = 7 Then Cancel = True End If End Sub
お礼
chie65535様 ご教示くださいまして誠にありがとうございます。 最初にお示しくださった「うぎゃ~」のプロシージャにつきまして 最後まで、拝見いたしましたところ、年の後に01月01日が補われる のであれば、入力時にやっちゃったほうが、「簡単」じゃないか? と思ったりしているところでございます。 もう少し納得の出来る方法がないか、考え中でございますので、このようにさせていただきます...と言う解決策が出たら、ご報告させていただきますね。
- panacon
- ベストアンサー率31% (214/679)
southbreeze さんへ こういうのは、日にちのデータをそのまま信じてよいか、便宜上1日を入れているに過ぎないという区別をYes,No型で入力しておくと良いと思います。1日が真になることは滅多にないと思いますが、絶対にないものでもないですから、〇年〇月1日の1日を必ず偽とは言い切れないと思います。Yes,Noの区別を付けておいて、IIFで条件分岐して表示することを考えると良いと思います。
お礼
panacon様 ご回答ありがとうございます。そうですねぇ? 今まで記録した中で01月01日を検索してみると、豊臣秀吉は1537年01月01日に誕生した(Wikepediaの一説)とあり、史実のようです。 但し、長宗我部元親は1539年01月01日と便宜上記載しているのですが、こちらは真偽は不明となっています。 そもそも、良く調べてみましたら、今の暦を利用するようになったのは、明治6年からだそうで、それ以前は陰暦が使用されていて、現在の日にちとは違うようなのです。ですので、それ以前の出来事については、暦はどの暦での日か?というのを考える必要がありそうです。 やはり、発生日には yyyy/mm/dd と月日が不明なものについては01/01と入力して、「真」又は「偽」のyes, noが良いのかもしれません。 ご回答ありがとうございます。
- chie65536(@chie65535)
- ベストアンサー率44% (8757/19871)
- chie65536(@chie65535)
- ベストアンサー率44% (8757/19871)
>そこで、この「発生日」に、1867/07/ や 1560 と入力しても、入力できて、 それは「直接には不可能」なので「年しか判らないなら1月1日にしておく」「年月しか判らないなら1日にしておく」しかありません。 こういう事がやりたいなら「非連結のテキストボックス」を用意して「値が更新されたら実行するイベント」を呼び出して、イベントプロシージャで ・年4桁だけ入力されたら「/1/1」を補って、発生日を更新する ・年4桁、/、月2桁の7文字を入力されたら「/1」を補って、発生日を更新する ・年4桁、/、月2桁、/、日2桁を入力されたら、そのまま発生日を更新する という処理をしないといけません。
補足
chie65535様 早々のご回答ありがとうございます。 そうですねぇ...! やはり書式設定をしていると、そうなるのですね? ・年4桁入力したら、「/1/1」を補う ・年4桁、/,月2桁を入力したら「/1」を補う イベントプロシージャといいますのは...? 書き方が解らない のですが...? ご存知なら、お教えいただけませんか? 何卒、よろくしくお願いいたします。
補足
chie65535様 うぎゃ~...と思ってしまいました。 しかし、ご教示いただき誠にありがとうございます。 じっくり取り組みたいと思います。 不明な箇所が出てきたら、再度お願いするかもしれませんが、その節には よろしくお願いします。 まずは、やってみたいと思います。