我在用VC++和ADO开发数据库应用程序。我使用了MSDN的经典例子修改数据库记录的值。以下便是代码的出错部分:UpdateData(TRUE);
_RecordsetPtr m_pRecordset = NULL;
CString sql_;
sql_.Format("SELECT * FROM AwardItem WHERE AwardNum='%s'", m_AwardNum.Trim());
_bstr_t sql = sql_;
m_pRecordset.CreateInstance(_uuidof(Recordset));
m_pRecordset->Open(sql,theApp.ADOConn.GetInterfacePtr(),
adOpenKeyset,adLockOptimistic,adCmdText);/*定位要修改的记录*/
m_pRecordset->Fields->GetItem("AwardNum")->Value = (_bstr_t)m_AwardNum;
m_pRecordset->Fields->GetItem("Title")->Value = (_bstr_t)m_Title;
m_pRecordset->Fields->GetItem("Points")->Value = m_Points;
m_pRecordset->Update();其中m_AwardNum(CString),m_Title(CString),m_Points(int)为编辑控件的绑定变量。变量m_Title的初始值是“巡逻”。现在我将其在对话框中的值删除,再键入“夜巡逻”,上述代码将成功修改记录的值。但如果我在原值“巡逻”前加上“夜”字,语句m_pRecordset->Fields->GetItem("Title")->Value = (_bstr_t)m_Title将出错。程序将在系统的PutValue()处中断。请高手指教!

解决方案 »

  1.   

    其实修改数据可以用SQL语句的,办法是用COmmmandPtr或者COnnectionPtr指针来操作
    sql_str.Format("Update [词条类别] set 是否启用='0' , 按键='%d' where 类别='%s'",m_key,m_str);

    //执行SQL语句更新数据
    _CommandPtr pCommand;
    pCommand.CreateInstance(__uuidof(Command));
    pCommand->ActiveConnection=((CTestBoxApp *)AfxGetApp())->m_pConnection;
    pCommand->CommandText=(_bstr_t)sql_str;
    pCommand->CommandType=adCmdText;
    pCommand->Parameters->Refresh();
    pCommand->Execute(NULL,NULL,adCmdUnknown);
    pCommand.Release();
    如果是用ADO的记录集操作,则需要使用 pSet->PutCollect()函数