您的位置:首页 > 编程语言 > C语言/C++

mfc连接ACCESS2010及以上版本,部分“MicrosoftC++异常”处理

2016-05-21 08:05 746 查看
做MFC程序存ACCESS2010时无意间发现执行insert和update语句时出现“MicrosoftC++异常”提示,代码如下。(代码手打部分省略)

CString  strCnn;

strCnn.Format(_T("Provider=Microsoft.ACE.OLEDB.12.0;Date Source=D:\\Test.accdb"));

AfxOleInit();

::CoInitialize(NULL);

m_pConnection.CreateInstance(__uuidof(Connection));

m_pRecordset.CreateInstance(__uuidof(Recordset));

try

{

   m_pConnection->Open((_bstr_t)strCnn,"","",NULL);

}

catch (_com_error e)

{ 省略}

char buf[512];

CString buf1="insert into info (name,age)values('xiaoming','11')";

memcpy(buf,buf1,buf.GetLength());

buf[buf.GetLength()]='\0';

try

{

m_pConnection->Execute(buf,NULL,adCmdText);

//Debug调试,单步执行到此处数据添加成功,程序正常运行,但是提示一下两条信息

//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。

//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。

}

catch(_com_error e)

{

AfxMessageBox(_T("失败"));

return;

}

头文件中引用

#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace  rename("EOF", "adoEnd")

定义

_ConnectionPtr m_pConnection

_RecordsetPtr  m_pRecordset

/////////////////////////////////////////////////////////////////////////////////////

当程序第一次执行 m_pConnection->Execute(buf,NULL,adCmdText);  时就会提示以下两条信息

//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。

//***.exe中的0x755cc6e3处最可能的异常:MicrosoftC++异常:内存位置0x0028d2bc处的int。

使用try...catch...并没有捕获到这个异常,语句执行成功。出于好奇同样的程序使用access2007则无异常提示,使用access2003更改“Microsoft.Jet.OLEDB.4.0”连接字符串后无异常。

由此联想到是新版本的ACCESS数据库更新造成相关代码有所改变或者是动态库调整,顺着这一思路在网上无意间发现一个名为“access database engine”数据库访问引擎的软件,以前版本没有用过,查找相关介绍如下

access database engine  帮助现有的 Microsoft Office 文件(例如 Microsoft Office Access 2010(*.mdb 和 *.accdb)和 Microsoft Office Excel 2010(*.xls、*.xlsx 和 *.xlsb)文件)与其他数据源(例如 Microsoft SQL Server)之间传输数据。 还支持与现有文本文件建立连接。 此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与
Office 文件格式连接的应用程序时使用。

抱着试试看的想法进行测试发现之前的异常已经没有了,由此发现新版本的access数据库使用需要access database engine访问引擎的支持。

大家需要时可以在网上搜索使用匹配的“access database engine”软件版本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: