我做了一个按钮响应修改数据,函数如下
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是负数。 请高手帮忙
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是负数。 请高手帮忙
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货