我在控制台程序的_tmain函数中添加代码如下int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
    _ConnectionPtr m_pConnection;
_RecordsetPtr MySet;
if(!AfxOleInit())
{
AfxMessageBox(_T("OLE初始化出错!"));
return FALSE;
}
     // 初始化 MFC 并在失败时显示错误 if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO: 在此处为应用程序的行为编写代码。
 HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\开关在线检测.mdb","","",adModeUnknown);///连接数据库
//上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51;
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format(_T("连接数据库失败!\r\n错误信息:%s"),e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
return 0; }

MySet.CreateInstance(__uuidof(Recordset));
MySet->Open("SELECT * FROM 地县开关  ",_variant_t((IDispatch *)  m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
} return nRetCode;
}运行后总是跳出"MyTest.exe 中的 0x7c812a5b 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012fc7c 处的 _com_error。"然后按中断后跳入代码段:
 Interface* operator->() const 
    { 
        if (m_pInterface == NULL) 
        {
            _com_issue_error(E_POINTER);
        }        return m_pInterface; 
    }
这到底是哪里出错了,是哪个"->"有问题吗?

解决方案 »

  1.   


    1、设断点2、调试运行程序3、Step Over4、找出出错的那条语句另外,后边 3 条语句应包含在 try 中:
    MySet.CreateInstance(__uuidof(Recordset)); 
    MySet->Open("SELECT * FROM 地县开关  ",_variant_t((IDispatch *)  m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText); 
      

  2.   

    很有可能这里出错 MySet->Open("SELECT * FROM 地县开关  ",_variant_t((IDispatch *)  m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);检查一下sql语句等
      

  3.   

    OLE初始化的函数AfxOleInit()错误~应该用CoInitialize()