Accessのクエリがオーバーフローしたので対処した
Microsoft Access で作った業務アプリケーションが、
実行時エラー '6': オーバーフロー
と表示され処理が止まるというので調べてみた。
オーバーフローがVBAコード中の代入文で停止している場合は、対処は難しくない。
数値はデータ型ごとに扱える値の範囲が決まっていて、その範囲を超えて代入しようとすると、このエラーになる。
業務アプリでありがちなのは、Integer
で宣言した変数に32767を超える値を代入しようとした … など。
厄介なのはクエリの実行中にオーバーフローした場合。
大抵はサブクエリを含むと思うが、どのクエリの?どの式で?オーバーフローが発生したかまではVBE(VBAの統合開発環境)で教えてくれないからだ。
こんなとき、貴方がSQLを読めるなら、クエリをSQLビューに切り替えて覗くことを勧める。
とはいえ、AccessはSQLフォーマッタを用意しないので、そのままでは見づらい。
SQLを整形してくれるオンラインサイトを活用しよう。
例えば SQLフォーマッターFor WEB にかけると、こんな感じで整形してくれる。
SELECT
T03_住民税.市区町村コード,
T03_住民税.指定番号,
Q16_当月人事.社員番号,
Q11_当月異動届参照.氏名,
Q11_当月異動届参照.入社年月日,
Q11_当月異動届参照.退職発令日,
Q11_当月異動届参照.異動後会社コード AS 当月会社コード,
Q11_当月異動届参照.市区町村コード AS 当月市区町村,
Q11_当月異動届参照.会社コード AS 前月会社コード,
Q12_前月異動届参照.市区町村コード AS 前月市区町村,
T03_住民税.[9月] AS 前月住民税,
T03_住民税.[10月] AS 当月住民税,
IIf(
[当月住民税] <> [当月徴収税額],
'税額相違',
''
) AS 税額相違,
IIf(
[当月住民税] <> [前月住民税],
'税額変更',
''
) AS 税額変更,
IIf(
[当月住民税] = 0,
'当月抹消',
''
) AS 当月抹消,
IIf(
[当月会社コード] = '',
'',
IIf(
[当月会社コード] <> [前月会社コード],
'会社変更',
''
)
) AS 会社変更,
T03_住民税.年税額,
T03_住民税.[6月],
T03_住民税.[7月],
T03_住民税.[8月],
T03_住民税.[9月],
T03_住民税.[10月],
T03_住民税.[11月],
T03_住民税.[12月],
T03_住民税.[1月],
T03_住民税.[2月],
T03_住民税.[3月],
T03_住民税.[4月],
T03_住民税.[5月],
Q18_当月徴収税額.住民税 AS 当月徴収税額
FROM
(
(
(
Q16_当月人事
LEFT JOIN
Q11_当月異動届参照
ON Q16_当月人事.社員番号 = Q11_当月異動届参照.社員番号
)
LEFT JOIN
Q12_前月異動届参照
ON Q16_当月人事.社員番号 = Q12_前月異動届参照.社員番号
)
LEFT JOIN
T03_住民税
ON Q16_当月人事.社員番号 = T03_住民税.社員番号
)
LEFT JOIN
Q18_当月徴収税額
ON Q16_当月人事.社員番号 = Q18_当月徴収税額.社員コード
WHERE
(
T03_住民税.[9月] <> 0
)
OR (
T03_住民税.[10月] <> 0
)
ORDER BY
T03_住民税.市区町村コード,
T03_住民税.指定番号,
Q16_当月人事.社員番号
これで怪しそうな箇所が、ひと目で分かる。
今回は入力データに不備があり、ゼロで除算したことによるオーバーフローであった。
クエリで発生するオーバーフローは、このパターンが多い。
Author And Source
この問題について(Accessのクエリがオーバーフローしたので対処した), 我々は、より多くの情報をここで見つけました https://qiita.com/mindwood/items/08363910524ec54304df著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .