MFC连接access用ado出了问题

yijianlishi 2012-12-10 03:40:19
下面的代码就是我写的修改access数据库的代码,可是执行完后总是报错,debug试了下,每次都是之心到update数据库时报错,错误代码:unhandled exception in aaa.exe(KERNEL32.DLL):0xE06D7363: Mircosoft C++ Exception
数据库很简单,一张表,表中的列Number,然后把所有的Number修改为10.
这时什么原因 求教
代码如下
void CAaaView::OnOpen() 
{
// TODO: Add your command handler code here
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_variant_t var;
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
//m_pConnection->ConnectionTimeout = 0;
hr = m_pConnection->Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=app.mdb", "", "", adModeUnknown);
m_pCommand.CreateInstance(__uuidof(Command));
//m_pCommand->CommandTimeout = 5;
m_pCommand->ActiveConnection = m_pConnection;
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
//VARIANT *var1;

/*try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
//m_pRecordset->Open("SELECT * FROM Data",
m_pRecordset=m_pConnection->Execute("INSERT INTO Data(Numbers) VALUES(1)",&var,adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}*/

// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。
try
{
m_pRecordset->Open("SELECT * FROM Data",// 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(),
// 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
int i=1;
try
{
while(!m_pRecordset->adoEOF)
{
m_pRecordset->PutCollect("Number", atol("10"));
m_pRecordset->MoveNext();
}
m_pRecordset->Update();
m_pRecordset->Close();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
}
...全文
112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyq5945 2012-12-10
  • 打赏
  • 举报
回复
异常捕获改成这样试试。
try
{
//你的ADO代码
}
catch (_com_error& e)
{
CString strMsg;
strMsg.Format(_T("错误描述:%s\n错误消息%s"), 
		(LPCTSTR)e.Description(),
		(LPCTSTR)e.ErrorMessage());
AfxMessageBox(strMsg);
}
hsz871204 2012-12-10
  • 打赏
  • 举报
回复
好像也可以直接改这句: m_pRecordset->PutCollect("Number", atol("10")); ————> m_pRecordset->PutCollect("Number", _variant_t(atol("10")));
hsz871204 2012-12-10
  • 打赏
  • 举报
回复
完了后要更新数据库 m_pRecordset->Update();
hsz871204 2012-12-10
  • 打赏
  • 举报
回复
要先构造_variant_t _variant_t var = ... // 初始化 m_pRecordset->PutCollect (_variant_t("字段名"), var);
lilianjie001 2012-12-10
  • 打赏
  • 举报
回复
应该是这样的吧。 try { while(!m_pRecordset->adoEOF) { m_pRecordset->PutCollect("Number", atol("10")); m_pRecordset->MoveNext(); m_pRecordset->Update(); }

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧