ADO приложение не функционира на ниво операционна система след я компилирате на компютър, работещ под Windows 7 сервизен пакет 1 или Windows Server 2008 R2 SP 1 или че има инсталиран KB983246

Работете навсякъде от всяко устройство с Microsoft 365

Надстройте до Microsoft 365, за да работите навсякъде с най-новите функции и актуализации.

Надстройване сега

Внимание ADO и ADO MD не са напълно тествани в среда на Microsoft .NET Framework. Те може да причини временни проблеми, особено в сервизни приложения или приложения на много нишки. Техниките, които се обсъждат в тази статия трябва да се използва само като временна мярка по време на миграцията към ADO.NET. Трябва да използвате само тези техники, след като сте извършили пълен тестове, за да се уверете, че няма проблеми със съвместимостта. Проблеми, причинени от използването на ADO или ADO MD по този начин не се поддържат. За повече информация вижте следната статия в базата знания на Microsoft:

получите неочаквани грешки при използване на ADO и ADO MD в приложение на .NET Framework

Симптоми

Да разгледаме следния сценарий. На компютър, работещ под 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

Не може да участват 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 и вече не поддържа Visual Basic 6. За повече информация за Visual Basic 6 възможност за поддръжка посетете следната уеб страница на MSDN:

За повече информация относно Първично междуоперационно асемблиране за ADO възможност за поддръжка щракнете върху следния номер на статия в базата знания на Microsoft:

използване Първично междуоперационно асемблиране за ADO (ADODB) в Visual Studio .NET

Причина

Този проблем възниква, защото някои ADO интерфейси са променени в Windows 7 SP1 са свързани с нов екземпляр идентификатори (IIDs). По-стари IID интерфейси са присвоени следните суфикс:

_DeprecatedНапример _Connection интерфейс е актуализиран, както следва:

  • В Windows 7 и по-ранни версии на Windows _Connection IID е 00000550-0000-0010-8000-00AA006D2EA4.

  • В Windows 7 SP1 _Connection IID е 00001550-0000-0010-8000-00AA006D2EA4 и IID за _Connection_Deprecated е 00000550-0000-0010-8000-00AA006D2EA4.

Ако приложението използва началото на свързване към _Connection, новата IID се съхраняват в двоични по време на компилация приложението. Това води до грешка, когато приложението работи на ниво операционна система, защото IID не съществува.

Някои ADO APIs зависят от платформата в ADO 2.7 и по-нови версии. За 64-битовите версии на Windows тези ADO API процес аргументи с помощта на 64-битов данни тип (например LONGLONG тип данни). Приложения, които използват тези API обаче използвате ДЪЛГО тип данни. Следователно получавате съобщение за грешка "Тип несъответствие" при опит за стартиране на макроса.

Решение

За да разрешите този проблем, инсталирайте една от актуализациите, описани в следната статия в базата знания на Microsoft:

ADO-базирано приложение, което се събира в Windows 7 SP1 или Windows Server 2008 R2 SP1 не се изпълнява по-ранни версии на Windows

Допълнителна информация

По-добро решение за Windows 7 SP1 ADO GUID промени

Нуждаете се от още помощ?

Разширете уменията си
Преглед на обучението
Получавайте първи новите функции
Присъединете се към Microsoft приобщени

Беше ли полезна тази информация?

Благодарим ви за обратната връзка!

Благодарим ви за вашата обратна връзка. Изглежда, че ще бъде полезно да ви свържем с един от нашите агенти по поддръжката на Office.

×