Office2010 新元号対応パッチで不具合

2018年11月15日

Office2010向けの新元号対応パッチ「KB2863821」と「KB4461522」。

Access 2010 上で日付入力に和暦を表示させている場合、特定の振る舞いでアプリケーションが不正終了していしまう現象を確認いたしました。
2018年11月15日 15時 大幅に書き直しました。

 

検証した結果

検証環境では「Windows7」、「Office2010」(共に最新パッチ状態)で検証しています。
またOSについては「Windows10」でも発生した報告を受けました。

以下については、個人的に検証した内容になります。

 

フリーズ事例

  1. コントロールソースにテーブルのフィールドが指定されている」かつ、「入力フィールドの書式に和暦書式が入力されている」場合、再度和暦表示処理が入る処理時に確定でフリーズ
  2. コントロールソースにテーブルのフィールドが指定されている」かつ、「VBAのイベントプロシージャに和暦書式処理が入力されている」場合、確定でフリーズ
  3. カレンダーコントールで入力後、再度該当フィールドでのイベント処理時に確定フリーズ(「コントロールソースにテーブルのフィールドが指定有無は関係ない)」

 

フリーズしなかった事例

  1. 該当パッチをインストールしない。もしくはアンインストールする。
  2. コントロールソースにテーブルのフィールドが指定されていない」状態で、「和暦表示」をさせる。
    (フィールドのプロパティでは表示されないので、VBAに直接表示)

 

原因(推測)

パッチプログラムのバグ。

恐らく内部処理の問題で、コントロールソースにアクセスしに行く過程もしくは、日付カレンダーデータからの受け渡し処理のときに何かしらの不正処理が発生し、停止してしまうプログラムのバグと考えられます。

 

暫定的な回避策

  1. パッチをアンインストールする。
    神 ( マイクロソフト) が修正をしてくれることを祈ります…
  2. 和暦表示をやめてすべて西暦表示にする。
  3. 処理周りを改変する。
    1. コントロールソースをはずす。
    2. 入力フィールドの書式を空白にする
    3. 入力フィールドの書式でカレンダー表示を「なし」にする。
    4. VBAの書式を Format (Date, “ggge年mmdd日”)にする。
    5. VBAにて書き込みイベントを作成する。

 

なぜネット上で報告が少ないか

推測になりますが、今回の事例は「テーブルに直接書き込みに行く」もしくは「日付カレンダーを利用して和暦変換処理をさせる」という形でのみ発生するものと思われます。

DBを作成する時、私個人の感覚ですが

  • 複数人で使うDBの場合、即座にテーブルに書き込みに行く作り方はしない。
  • DBの負担を軽くするために、書き込み時以外はDB本体とは切り離す。
  • 書き込み時に、入力された内容をチェックし、一瞬該当のテーブルレコードを排他処理させる。
  • 書き込みエラーが発生した場合にロールバックができるようする。

という処理を考慮して、作ると思うので、「思った以上に報告が上がらないのかな」という気がします。