我建了一个基于对话框的mfc的文件,用office的Access建了一个数据库,最后只有一个mdb的文件
我把它考到mfc程序目录下面,在对话框类的构造函数里这样写的:
::CoInitialize(NULL); try
{
p_Connection.CreateInstance(_uuidof(Connection));
     CString str_connect;
str_connect.Format(_T("Provider=SQLOLEDB.1;Database = Warning"));
p_Connection->Open ((_bstr_t)str_connect,"","",adConnectUnspecified);
   }
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
在OnInitDialog()里面写了下面的代码
mList是一个list contorl的控件
// TODO:  在此添加额外的初始化
mList.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP
|LVS_EX_ONECLICKACTIVATE
|LVS_EX_GRIDLINES);

mList.InsertColumn(0,_T("WarningID"),LVCFMT_LEFT,70,0);
mList.InsertColumn(1,_T("BStationIndex"),LVCFMT_LEFT,70,1);
mList.InsertColumn(2,_T("TroughIndex"),LVCFMT_LEFT,70,2); _bstr_t sql;
sql = _T("select * from WarningInformation ");
_RecordsetPtr p_Recordset;
p_Recordset.CreateInstance(__uuidof(Recordset));
p_Recordset->Open(sql,p_Connection.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText); try
{
while(!p_Recordset->adoEOF)
{
mList.InsertItem(0,0);
    mList.SetItemText(0,0,(_bstr_t)p_Recordset->GetCollect(_T("WarningID")));
    mList.SetItemText(0,1,(_bstr_t)p_Recordset->GetCollect(_T("BStationIndex")));
mList.SetItemText(0,2,(_bstr_t)p_Recordset->GetCollect(_T("TroughIndex"))); p_Recordset->MoveNext();
}
}
catch(_com_error e)
{
AfxMessageBox(_T("Failed!"));
}
    
p_Recordset->Close();编译运行会有错误:
DataDeal.exe 中的 0x75d79617 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0026eff0 处的 _com_error

解决方案 »

  1.   

    那个open的位置出错了吧
    试下这个:
    p_Connection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库名.mdb","","",adModeUnknown);
      

  2.   

    杯具 还是这样的错误:
    DataDeal.exe 中的 0x75d79617 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0023ee48 处的 _com_error。
      

  3.   

    Debug调试吧,打开call stack窗口,看看运行到哪个函数抛出异常的。
      

  4.   

    是这个函数的问题:
    > DataDeal.exe!wWinMain(HINSTANCE__ * hInstance=0x013a0000, HINSTANCE__ * hPrevInstance=0x00000000, wchar_t * lpCmdLine=0x00404332, int nCmdShow=1)  行30 C++
    不太明白啊
      

  5.   

     CString strSysConnection = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库名.mdb");SQLOLEDB 好像是连接不上的。
    还有要保证你的数据库没有密码,文件路径正确。
      

  6.   

    这个例子就是操作access的
    http://download.csdn.net/source/2383423
      

  7.   

    是MFC程序吗?
    把 ::CoInitialize(NULL); 换成 AfxOleInit(); 试试
      

  8.   

    p_Recordset->Open(sql,p_Connection.GetInterfacePtr(),adOpenDynamic,
    adLockOptimistic,adCmdText);
    这里也加上try...catch(_com_error& e)
    http://topic.csdn.net/u/20100429/11/a1a68cd2-d942-4f6b-b387-69a130ec5888.html?76258