Update()函数 80分
本帖最后由 VisualEleven 于 2012-10-23 21:20:54 编辑 //如下代码,是往表里插入一个记录,正常情况下没出现问题,但一旦插入一条表里已经存在的记录是就程序就崩溃了。
我调试了一下,是执行到Update()函数崩溃了,如果我把这一句去掉,执行起来就没问题,也提示插入成功,但实际上什么也没有,表里没有插入,我的列表框也没有插入。请问是为什么?
void CAdoAccessDlg::OnInsert()
{
// TODO: Add your control notification handler code here
//注意代码,每次都要初始化指针,和链接数据库、打开记录集
ConAccess();
if(!UpdateData())
return;
if (m_name=="")
{
MessageBox("姓名不能为空!","提示信息");
return;
}
int nAge=atoi(m_age);
if(nAge<=0 || nAge>100)
{
MessageBox("未输入或输入的年龄有误","提示信息");
return;
}
try{
m_pRec->AddNew();
m_pRec->PutCollect("Name",(_variant_t)m_name);
m_pRec->PutCollect("Age",(long)nAge);
m_pRec->Update();//又没事了?好像是有addNew就不会出错//BUG,添加两条相同的记录就出现问题了
MessageBox("插入成功","提示信息");
m_list.ResetContent();//清空列表,如果没清空的话,会把数据库内的内容又重新贴上一遍
m_nShow=FALSE;
OnCheck();//把数据的内容全部显示在列表框
SetDlgItemText(IDC_EDIT_NAME,"");
SetDlgItemText(IDC_EDIT_AGE,"");
((CEdit*)GetDlgItem(IDC_EDIT_NAME))->SetFocus();
}
catch(_com_error*e)
{
MessageBox(e->ErrorMessage(),"提示信息");
}
}
[最优解释]
异常捕获改成这样试试。
try
{
//你的ADO代码
}
catch (_com_error& e)
{
CString strMsg;
strMsg.Format(_T("错误描述:%s\n错误消息%s"),
(LPCTSTR)e.Description(),
(LPCTSTR)e.ErrorMessage());
AfxMessageBox(strMsg);
}
[其他解释]
不晓得,见鬼了吧
[其他解释]
刚刚想这样捕捉一下错误,更奇怪了,突然又没问题了,请问是什么原因啊?
好奇怪,我确定我试了好多次,执行到该句就崩溃了,现在有突然不会了。
我还在上一个帖子提问了,为什么崩溃,现在又没事了。
[其他解释]
问题解决了,使用Update()是没问题的,问题是我在access表里设置了主键,第一次用不知道主键的意思,所以在写入相同记录时就出错。把主键去掉就都OK了。