ADO アプリケーションは、Windows 7 SP 1 または Windows Server 2008 R2 SP 1 を実行しているコンピューター、または KB983246 がインストールされているコンピューターで再コンパイルした後、ダウンレベルのオペレーティング システム上で実行されません

適用先
Windows 7 Enterprise Windows 7 Home Basic Windows 7 Home Premium Windows 7 Professional Windows 7 Starter Windows 7 Ultimate Microsoft Windows XP Service Pack 3 Microsoft Windows Server 2003 Service Pack 2 Windows Vista Business Windows Vista Business 64-bit Edition Windows Vista Enterprise Windows Vista Enterprise 64-bit Edition Windows Vista Home Basic Windows Vista Home Basic 64-bit Edition Windows Vista Home Premium Windows Vista Home Premium 64-bit Edition Windows Vista Service Pack 2 Windows Vista Starter Windows Vista Ultimate Windows Vista Ultimate 64-bit Edition Windows Server 2008 Datacenter Windows Server 2008 Datacenter without Hyper-V Windows Server 2008 Enterprise Windows Server 2008 Enterprise without Hyper-V Windows Server 2008 for Itanium-Based Systems Windows Server 2008 for Windows Essential Server Solutions Windows Server 2008 Foundation Windows Server 2008 Standard Windows Server 2008 Standard without Hyper-V Windows Server 2008 R2 Datacenter Windows Server 2008 R2 Enterprise Windows Server 2008 R2 for Itanium-Based Systems Windows Server 2008 R2 Foundation Windows Server 2008 R2 Standard

注意: ADO および ADO MD は、Microsoft .NET Framework 環境では十分にテストされていません。 これらは、特にサービス ベースのアプリケーションやマルチスレッド アプリケーションで断続的な問題を引き起こす可能性があります。 この記事で説明する方法は、ADO.NET への移行中の一時的な手段としてのみ使用する必要があります。 これらの方法は、完全なテストを実施して互換性の問題がないことを確認した後にのみ使用してください。 このように ADO または ADO MD を使用することで発生する問題は、サポートされません。 詳細については、以下のサポート技術情報を参照してください。

840667 .NET Framework アプリケーションで ADO および ADO MD を使用すると、予期しないエラーが発生する

現象

次のような状況を想定します。 Windows 7 Service Pack 1 (SP1) または Windows Server 2008 R2 SP 1 を実行しているコンピューター、または KB9823246 がインストールされているコンピューターでは、次のいずれかのアプリケーションを使用して Microsoft ActiveX Data Objects (ADO) アプリケーションを再コンパイルします。

  • Microsoft Visual C++
  • Microsoft Visual Basic for Applications (VBA)
  • Microsoft Visual Basic 6
  • Microsoft .NET アプリケーション

このシナリオでは、アプリケーションは下位レベルのオペレーティング システムでは実行されないことがわかります。 たとえば、リリース版の Windows 7、Windows Vista、およびそれ以前のバージョンの Windows では動作しません。 実装によっては、次のいずれかのようなエラー メッセージも表示されることがあります。 (他のエラー メッセージが表示される場合があります。)

エラー メッセージ 1

REGDB_E_CLASSNOTREG (0x80040154)

エラー メッセージ 2

E_POINTER (0x80004003)

エラー メッセージ 3

E_NOINTERFACE (0x80004002)

エラー メッセージ 4

種類 'System.__ComObject' の COM オブジェクトをインターフェイスの種類 'ADODB' にキャストできません。Connection' です。 IID '{00001550-0000-0010-8000-00AA006D2EA4}' のインターフェイスの COM コンポーネントに対する QueryInterface 呼び出しが次のエラーにより失敗したため、この操作は失敗しました: そのようなインターフェイスはサポートされていません (HRESULT からの例外: 0x80004002 (E_NOINTERFACE))."

次の Visual C++ コード セグメントでは、この問題が再現されています。

#import " msado15.dll" no_namespace rename("EOF","EndOfFile")

int main()
{
  CoInitialize(NULL);
  _ConnectionPtr pConnection = NULL;
     HRESULT hr = pConnection.CreateInstance(__uuidof(Connection)); //hr gets E_NOINTERFACE here
}

次の Visual Basic for Applications コード セグメントでは、この問題が再現されています。

Private Sub Form_Load()
 Dim Conn As New ADODB.Connection ‘Runtime error here: Class does not support Automation or does not support expected interface
End Sub

VBA エラー: 実行時エラー '430': クラスがオートメーションをサポートしていないか、必要なインターフェイスをサポートしていません

注: マイクロソフトは、ADO 用のプライマリ相互運用機能アセンブリをサポートしなくなり、Visual Basic 6 もサポートされなくなりました。 Visual Basic 6 のサポートに関する詳細については、次の MSDN Web ページを参照してください。

Windows Vista、Windows Server 2008、および Windows 7 上の Visual Basic 6.0 のサポートに関する声明 ADO のサポートの容易さのためのプライマリ相互運用アセンブリの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。

318559 Visual Studio .NET での ADO 用プライマリ相互運用アセンブリ (ADODB) の使用

原因

この問題が発生する原因は、一部の ADO インターフェイスが新しいインスタンス識別子 (IID) に関連付けられるように Windows 7 SP1 で変更されたことが原因です。 古い IID インターフェイスには、次のサフィックスが割り当てられていました。

_Deprecated たとえば、インターフェイス _Connectionは次のように更新されました。

  • Windows 7 およびそれ以前のバージョンの Windows では、_Connection IID は 00000550-0000-0010-8000-00AA006D2EA4 です。
  • Windows 7 SP1 では、_Connection IID は 00001550-0000-0010-8000-00AA006D2EA4 で、_Connection_Deprecated の IID は 00000550-0000-0010-8000-00AA006D2EA4 です。

アプリケーションで _Connection への早期バインドを使用する場合、新しい IID はコンパイル中にアプリケーション バイナリに保存されます。 これにより、IID が存在しないため、アプリケーションが下位レベルのオペレーティング システムで実行されている場合にエラーが発生します。

ADO 2.7 以降のバージョンでは、一部の ADO API はプラットフォームに依存しています。 64 ビット版の Windows では、これらの ADO API は 64 ビットのデータ型 (LONGLONG データ型など) を使用して引数を処理します。 ただし、これらの API を使用するアプリケーションでは、依然として LONG データ型が使用されます。 そのため、マクロを実行しようとすると "型が一致しません" というエラー メッセージが表示されます。

解決策

この問題を解決するには、以下のマイクロソフト サポート技術情報に記載されている更新プログラムのいずれかをインストールしてください。

2640696 Windows 7 SP1 または Windows Server 2008 R2 SP1 でコンパイルされた ADO ベースのアプリケーションが、以前のバージョンの Windows では実行されない

追加情報

Windows 7 SP1 ADO GUID の変更に関するより良いソリューション

http://blogs.msdn.com/b/psssql/archive/2011/10/03/yes-we-made-a-mistake-and-are-finally-going-to-fix-it.aspx