请教大家一个用ADO调用数据库出错的问题:
1.软件在中文操作系统下工作正常,在部分英文操作系统下会出错;在装有East Asian Language的英文操作下正常,在没有装过该语言包的英文操作系统下出错;
2.数据库用英文的OFFICE重新建过;
3.在纯英文操作系统下调试发现的出错语句:
m_pRecordset->Open("Select * from Pipe",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);单步跟踪后,发现是在msado15.tli中出错,_hr返回一个很大的负值,导致程序中断(kernel32);
inline HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options ) {
    HRESULT _hr = raw_Open(Source, ActiveConnection, CursorType, LockType, Options);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr;
}
4.出错之前,其它函数曾经调用过这段程序,结果是正确的,_hr参数均能正确回0;

解决方案 »

  1.   

    m_pRecordset->Open((_bstr_t)_T("Select * from Pipe"),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
      

  2.   

    Select * from Pipe这个表返回的记录中,包含中文字段名或者,记录含有中文内容吗?
    不是指这个SQL语句本身
      

  3.   

    没有,都是英文
    HRESULT _hr = raw_Open(Source, ActiveConnection, CursorType, LockType, Options);
    source的值似乎也是对;可_hr的值就是不对
      

  4.   

    恩,可以尝试重新安装一下客户端机器mdac2.8,ado的驱动,死马当活马医了
    ,另外清空所有系统临时目录下的临时文件,msado15.tli有时侯会留在临时文件夹里