Known Issue: ADO アプリケーションを Windows Server 2008 上で動作させると「要求された名前、または序数に対応する項目がコレクションで見つかりません。」エラーが発生する。

高橋 理香
SQL Developer Support Eascalation Engineer

 

こんにちは。

 

この blog では、既知の問題として報告されているけれども、サポート技術情報では関連性を判断できないような問題についてもわかりやすくご紹介できればと考えています。

 

早速ですが、最近立て続けに SQL Server にアクセスするアプリケーションを動作させる OS を Windows Server 2008 に変更したらエラーが発生するようになったというお問い合わせをいただきました。いずれも同じ現象、同じ問題でしたので、こちらでご紹介したいと思います。

 

同じエラーが発生した場合、参考にしてみてください。

 

 

1.   関連テクノロジー

· Windows Server 2008 / Windows Vista
· VB 6.0/VBScript
· ADO

 

※VB 6.0 はサポートを終了しています。

 

 

2.   発生する問題

 

ADO の Fields コレクションを使用して、Recordset 中のデータを参照しようとすると以下のエラーが発生する。

 

エラー:要求された名前、または序数に対応する項目がコレクションで見つかりません。
コード:800A0CC1
ソース:ADODB.Recordset

 

 

3.   原因

 

Windows Server 2008 / Windows Vista の LCMapString 関数 の不具合に起因しています。

 

エラーは、本来存在するべき列が存在していないと判断されていることを示しています。
列の存在有無を判断するための処理では LCMapString 関数が使用されており、ソートキーの作成を行っています。ソートキーの作成では、カーネルが管理するソートキー テーブルを参照しますが、このテーブルを複数プロセスが同時に参照している状況下で、不正なオーダーが返されるという問題が報告されています。この結果として、列が存在しないと判断される結果となります。

なお、ローカル システムや Administrator 以外のプロセスで発生する可能性があります。

 

 

4.   対処方法

 

Windows Server 2008 / Windows Vista の修正プログラムを入手し、適用します。

 

Applications may stop responding or may encounter other function failures if these applications call the LCMapString function on a computer that is running Windows Server 2008 or Windows Vista

https://support.microsoft.com/kb/971795/en-us

https://support.microsoft.com/kb/971795/ja (機械翻訳)

 

※製品に Windows Vista とありますが、Windows Server 2008 にも適用可能です。