問い合わせ
成績処理システムの「調査書作成委員会用資料」の「前期用」や「後期用」をクリックすると、エラーで Access が止まる。
エラーとしては「スタック領域の不足」である。
対応
正直、原因が分からない。
以下のことを試したが、改善しない。
- Office の修復
- Windows の修復 (DISM, sfc)
- Access ファイルの最適化
問題となるのは、レコードソースを実行するタイミングである。
これを実行すると、スタックが不足するらしい。一般的にスタックの不足は再帰処理なのだが、再帰的は処理は行っていないと思う (たぶん)。
また、クエリーを強制的に Access で実行すると、Access 自体が落ちる。
これも原因は不明。
一応、Office を入れなおすことを検討している。
Office を入れなおしても状況は改善しなかった。
問題が発生しているクエリーを丁寧に検証したところ、WHERE 句でエラーが発生する、というか WHERE で特定の値で絞り込みを行おうとすると、Access 自体が落ちるということが分かった。
問題は、WHERE がなければ正常に表示されるし、NULL、NOT NULL という条件ならば落ちないことである。
データを見ても、どこが正しいか・間違っているのかは分からないので、正常に動く学校のデータを見て検証する必要がある。
正常に動く学校のデータを見ても違いが分からなかった。
ただ、WHERE 句なしのデータを XML で抽出したところ、一部レコードのデータで WHERE 句に関係するフィールドが存在しなことが分かった。
そのため、事前に WHERE で学年を 3 年のみに絞り込み、無理やり動作させることで解決した。
結局、データがおかしいことは確定なのだが、どこがどう間違っているのかは全く分からない。
というかなぜ Access は LEFT JOIN で結合したときに、特定のフィールドが存在したり・存在しなかったりするテーブルが作られるのだろうか。
DB として挙動がどこか間違っている気がする。