文章編號: 2517589 - 上次校閱: 2012年5月25日 - 版次: 5.0

ADO 應用程式不會在前版作業系統上之後,執行您的電腦執行 Windows 7 預存程序 1] 或 [Windows Server 2008 R2 預存程序 1,或安裝的 KB983246 上重新編譯,

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
注意ADO 和最佳化尚未經過完整測試在 Microsoft。NET Framework 的環境。它們可能會導致間歇性問題,尤其是在服務為基礎的應用程式,或在多執行緒應用程式中。在這份文件中所討論的技術應該只用於作為暫時的考量,在遷移至 ADO 期間。NET 中。您必須進行完整的測試,以確保沒有相容性問題之後,您應該只使用這些技巧。藉由使用 ADO 或最佳化,以這種方式所造成的問題是不受支援。如需詳細資訊,請參閱 「 Microsoft 知識庫 」 中下列文件:
840667 ? (http://support.microsoft.com/kb/840667/ ) 使用 ADO 和在最佳化時,您會收到未預期的錯誤。NET Framework 應用程式
全部展開 | 全部摺疊

徵狀

請考慮下列案例。在電腦上執行的 Windows 7 Service Pack 1 (SP1) 或 Windows Server 2008 R2 預存程序 1 或具有 KB9823246 安裝的您可以重新 Microsoft ActiveX Data Objects (ADO) 應用程式編譯使用下列的應用程式其中之一:
  • Microsoft Visual c + +
  • Microsoft Visual Basic for Applications (VBA)
  • Microsoft Visual Basic 6
  • 安裝。NET 應用程式
在這個案例中,您會發現應用程式不會在前版作業系統上執行。比方說,它無法執行的 Windows 7 發行版本、 Windows Vista 中,以及其他舊版的 Windows。依據您實作中,您也會收到類似下列的錯誤訊息。(您可能會收到其他錯誤訊息)。

錯誤訊息 1
REGDB_E_CLASSNOTREG (0X80040154)
錯誤訊息 2
E_POINTER (0X80004003)
錯誤訊息 3
E_NOINTERFACE (0X80004002)
錯誤訊息 4
無法將物件轉換為 COM 型別為介面型別 'System.__ComObject' ADODB。連線 '。此作業失敗,因為 QueryInterface 上呼叫 COM 元件的介面 IID '{00001550-0000-0010-8000-00AA006D2EA4}' 失敗,因為發生下列錯誤: 不支援的這類介面 (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': 類別不支援自動化或不支援必須是的介面

附註Microsoft 不會再 ADO 支援主要 interop 組件,並且不再支援 Visual Basic 6。如需有關 Visual Basic 6 支持度的詳細資訊,請造訪下列 MSDN 網頁:
支援 Visual Basic 6.0、 Windows Server 2008,Windows 7 的陳述式 (http://msdn.microsoft.com/en-us/vbasic/ms788708.aspx)
如需有關 ADO 支持度的主要 interop 組件的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
318559? (http://support.microsoft.com/kb/318559/ ) 使用主要 interop 組件的 ADO (ADODB) 在 Visual Studio 中。NET

發生的原因

要與新執行個體識別項 (Iid) 產生關聯的 Windows 7 SP1 中的某些 ADO 介面已變更,就會發生這個問題。較舊的 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 Api 是平台相關 ado 2.7 和更新版本。在 64 位元版本的 Windows 中,這些 ADO Api 會處理引數,請使用 64 位元資料型別 (例如LONGLONG的資料型別)。然而,使用這些 Api 的應用程式仍然使用LONG資料型別。因此,當您嘗試執行巨集時收到 「 型別不相符 」 錯誤訊息。

解決方案

若要解決這個問題,請安裝下列的文件 「 Microsoft 知識庫 」 中的文其中一項所描述的更新:
2640696? (http://support.microsoft.com/kb/2640696/ ) ADO 架構的應用程式在 Windows 7 SP1 中,或在 Windows Server 2008 R2 SP1 中編譯時,不會執行較早版本 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 (http://blogs.msdn.com/b/psssql/archive/2011/10/03/yes-we-made-a-mistake-and-are-finally-going-to-fix-it.aspx)

這篇文章中的資訊適用於:
  • 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 商用入門版
  • Windows Vista 商用入門 64 位元版
  • Windows Vista 商用進階版
  • Windows Vista 商用進階 64 位元版
  • Windows Vista 家用入門版
  • Windows Vista 家用入門 64 位元版
  • Windows Vista 家用進階版
  • Windows Vista 家用進階 64 位元版
  • Windows Vista Service Pack 1
  • Windows Vista Service Pack 2
  • Windows Vista Starter
  • Windows Vista 旗艦版
  • Windows Vista 旗艦 64 位元版
  • 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 for Windows Essential Server Solutions without Hyper-V
  • Windows Server 2008 Foundation
  • Windows Server 2008 Standard
  • Windows Server 2008 Standard without Hyper-V
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Datacenter without Hyper-V
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Enterprise without Hyper-V
  • Windows Server 2008 R2 for Embedded Systems
  • Windows Server 2008 R2 for Itanium-Based Systems
  • Windows Server 2008 R2 Foundation
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 R2 Standard without Hyper-V
關鍵字:?
kbprb kbsurveynew kbprogramming kbtshoot kbmt KB2517589 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:2517589? (http://support.microsoft.com/kb/2517589/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。