我的程序里用到了ADO访问ACCESS数据库,在多数计算机上跑的好好的,很少一些计算机上程序崩溃了,我的计算机上没法重现这样的问题,就给程序加了日志在遇到问题的计算机上跑,定位到在声明_ConnectionPtr、_RecordsetPtr类型的变量时程序抛出异常,是怎么回事?跟操作系统环境有关吗(发生异常的机器是WindowsXP操作系统)?

解决方案 »

  1.   

    如何检查ADO的版本呢?我声明变量的代码是:
    _ConnectionPtr ConnectionPtr(__uuidof(Connection));
    _RecordsetPtr RecordsetPtr(__uuidof(Recordset));
    是不是相当于:
    _ConnectionPtr ConnectionPtr;
    _RecordsetPtr RecordsetPtr;
    ConnectionPtr.CreateInstance(__uuidof(Connection));
    RecordsetPtr.CreateInstance(__uuidof(Recordset));
    异常应该是执行CreateInstance的时候抛出的吧?
      

  2.   

    抛出的应该是_com_error吧,具体内容是什么呢?知道了对应的HRESULT就知道问题所在了
      

  3.   

    HRESULT hResult = ConnectionPtr.CreateInstance(__uuidof(Connection));
    执行结果为:
    hResult = -2147221164
    查MSDN,该错误码的含义是类未注册。接着执行:
    ConnectionPtr->Open(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ABC.mdb;;;adModeUnknown", "", "", adModeUnknown);
    抛出_com_err异常,错误码为-2147467261。
    安装了MDAC 2.7SP1,结果还是如此。该怎么办呢?
      

  4.   

    类未注册看来应该是安装问题导致的。你可以试一下重装MDAC,或者用RegSvr32把相关DLL注册一下试试看。
      

  5.   

    把MDAC 2.7SP1重装了几次都没有用。:-((
      

  6.   

    缺少
    ::CoInitialize(NULL);

    ::CoUninitialize();
      

  7.   

    CreateInstance这一步就已经不正确了呀,不是4.0或3.51的问题吧?
      

  8.   

    (__uuidof(Connection));
    改成
    "ADODB.Connection"放原来机器上编译,然后拿到出错的机器再试试看!
      

  9.   

    是重新编译,最好rebuild all
      

  10.   

    我的机器上面执行HRESULT hResult = ConnectionPtr.CreateInstance(__uuidof(Connection));这句没问题。
    你有在其他机器上面试过吗?有否试过手动注册相关DLL?有否试过在注册表中查找相关的类是否注册成功?
      

  11.   

    这个我试用了很多方法,总是不行,下面这个方法应该没有问题。_ConnectionPtr* g_goconnect = NULL;g_goconnect = new _ConnectionPtr();if (g_goconnect)
      delete g_goconnect;
      

  12.   

    怎么ado的对象方法 都没有提示 为什么?