我做了一个按钮响应修改数据,函数如下 
void CShowDlg::OnBnClickedModbtn() 

// TODO: 在此添加控件通知处理程序代码 
UpdateData(TRUE); 
CString strSQL; 
CCEADO ado; 
strSQL.Format(L"UPDATE book1 SET name='%s',author='%s',time='%s',price='%s',\ 
publish='%s',add='%s' ,borrow='%s',publishtime='%s' WHERE name = '%s'",m_bookname,m_author,m_buytime,\ 
m_bookprice,m_bookpublish,m_buyadd,m_bookborrow,m_booktimes,strID); ado.OpenDb(L"\\My Documents\\book.cdb"); 
ado.Execute(strSQL,NULL); } 
ado.Execute函数如下 BOOL CCEADO::Execute(LPCTSTR szSQL, COleVariant * pRsVt) 
{ HRESULT hr; 
VARIANT varStrSql,varEmpty; 
VariantInit(&varStrSql); 
VariantInit(&varEmpty); varStrSql.bstrVal = SysAllocString(szSQL); 
varStrSql.vt = VT_BSTR; 
if (m_szDbName!=NULL) 

varEmpty.vt=VT_BSTR; 
varEmpty.bstrVal = SysAllocString(m_szDbName); 

if (m_pRecrd) m_pRecrd->Close(); 
hr = m_pRecrd->Open(varStrSql,varEmpty,MSADOCE::adOpenDynamic,MSADOCE::adLockOptimistic,MSADOCE::adCmdText); //这里的hr是一个负数
SysFreeString(varStrSql.bstrVal);                                                                                                   //语句执行失败了if (FAILED(hr)) 

AfxMessageBox(_T("Execute Fail"));//执行失败 
return FALSE; 

if (szSQL[0]==0) {IsWithRes=FALSE; return TRUE;} 
IsWithRes=TRUE; //有查询结果 
delete m_Fields; 
m_Fields=NULL; 
hr=m_pRecrd->get_Fields(&m_Fields); 
if (NULL==pRsVt) 
return TRUE; pRsVt->vt=VT_DISPATCH; 
pRsVt->pdispVal=m_pRecrd; 
pRsVt->pdispVal->AddRef(); 
return TRUE; 
} 用这个函数来执行 select * from book1 where name = ‘strID’是可以执行的,删除语句也可以执行,只有修改(update)和增加(insert)两个语句怎么都不执行,返回的hr是负数。 请高手帮忙