【解決】ADO / pyodbc で Access への INSERT が突然失敗する(-2147467259 / この操作は、このタイプのオブジェクトには実行できません)
事象
2025年12月15日、突然、以下のようなエラーが発生するようになりました。
実行時エラー '-2147467259 (80004005)'
この操作は、このタイプのオブジェクトには実行できません。
発生条件
- VBA(ADO)から Access(.accdb)へ INSERT
- Excel / CSV など 外部ファイルを参照して INSERT
- Python + pyodbc + Access でも同様
- コードは今まで正常に動作していた
- MS Update 後に突然発生
影響例
- Excel → Access への INSERT(ADO)
- CSV → Access への INSERT(pyodbc)
- Access での外部データ参照クエリ
👉 「外部(リモート扱い)データソースを跨ぐクエリ」 がすべて失敗するようになります。
原因(結論)
Microsoft Update により、Jet / ACE Engine のセキュリティ設定が強化されたことが原因でした。
具体的には、
外部(Remote)データベース・ファイルを参照するクエリを
デフォルトでブロックする仕様に変更
されたようです。
その結果、従来動いていたコードでも
80004005 という 非常に分かりづらいエラーで失敗します。
同様の事例
Stack Overflow(Python + pyodbc)
Microsoft公式KB
KB5002984
Configuring Jet Red Database Engine and Access Connectivity Engine to block access to remote databases
https://support.microsoft.com/en-us/topic/kb5002984-configuring-jet-red-database-engine-and-access-connectivity-engine-to-block-access-to-remote-databases-56406821-30f3-475c-a492-208b9bd30544
対策(今回行った方法)
Microsoft公式KBに記載されている ACE側の回避策を適用しました。
レジストリに DWORD を追加
追加場所(Microsoft 365 / Click-to-Run 環境)
HKEY_LOCAL_MACHINE
\SOFTWARE
\Microsoft
\Office
\ClickToRun
\REGISTRY
\MACHINE
\Software
\Microsoft
\Office
\16.0
\Access Connectivity Engine
\Engines
追加する値
| 種別 | 名前 | 値 |
|---|---|---|
| DWORD | AllowQueryRemoteTables | 1 |
結果
- ADO VBA からの INSERT → 正常に動作
- Python + pyodbc からの INSERT → 正常に動作
- 既存コードの修正なしで復旧
👉 MS Update でデフォルトが「0(ブロック)」相当になった可能性が高いと考えています。
注意点(重要)
この設定は セキュリティを緩める変更です。
- 本当に必要なPC / 環境だけに適用する
- レジストリ変更前にバックアップを取る
- 将来の MS Update で再度変更される可能性あり
社内展開する場合は、
手順書化・影響範囲の明確化を強くおすすめします。
まとめ
- エラーの原因は コードではなく環境(ACEの仕様変更)
-
-2147467259 (80004005)は ACEのセキュリティ制限に引っかかったサイン -
AllowQueryRemoteTables=1の追加で復旧可能 - 同様の事象は VBA / Python / pyodbc 共通で発生する
同じエラーで困っている方の助けになれば幸いです。