我的程序如下:
void CAccountDBSSDlg::OnBtnIncomeAdd() 
{
 // TODO: Add your control notification handler code here if(!UpdateData())
  return;
 CString txtType = m_dcIncome.GetText();
 if(txtType.IsEmpty()){
   AfxMessageBox("类型不能为空");
   return;
 }
 //获取收入时间;
   CString strDate = m_oleIncome.Format("%Y-%m-%d");
   
 try
 { 
    
   // _RecordsetPtr m_pRecordset;
    m_pConnection.CreateInstance(_uuidof(Connection)); //初始化Connection指针
    m_pRecordset.CreateInstance("ADODB.Recordset");//初始化Recordset指针
     m_pRecordset->Open("Select seq_income_id.NEXTVAL from dual",(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
     int id = 1;
  if(!m_pRecordset->adoEOF)
  {
   _variant_t TheValue;
   //从系列中获取新的收入ID值;
   TheValue = m_pRecordset->Fields->GetItem((short)0)->Value;
   if(TheValue.vt != VT_NULL)
    id = TheValue.iVal;
  }
    
  m_pRecordset->Close();  _variant_t RecordsAffected;
  //插入新的收入信息记录;
  CString sql;
  sql.Format("insert into income_info_tab(income_id,""income_date,income_type,money,""description) values(""%d,""to_date('%s','yyyy-mm-dd'),""'%s',%.2f,'%s')",id,strDate,txtType,m_dbIncomeMoney,m_strIncome);
   TRACE(sql);
  m_pConnection->Execute(_bstr_t(sql),&RecordsAffected,adCmdText);
  //刷新ADO数据控件的数据,从而更新数据显示
  m_adoIncomeDataCtrl.Refresh ();
  InitControl();
 }
 catch(_com_error e)//异常处理;
 {
   AfxMessageBox(e.ErrorMessage());
    AfxMessageBox("测试");
 }
 
编译是能通过的,但是运行出来后操作就出现有“0x800A0E7D”这些字符的提示框,谢谢高手指教

解决方案 »

  1.   

    msdn中关于这个代码有如下描述
    应用程序通过引用关闭或无效的 Connection 对象来请求对对象的操作。
    可以检查一下连接后的返回码是否正常。
      

  2.   

    msdn中关于这个代码有如下描述
    应用程序通过引用关闭或无效的 Connection 对象来请求对对象的操作。
    ---------------------------------
    这个解释我也知道,可是就是找不出原因出在哪里了
    我弄了好久,都没有成效:(
      

  3.   

    你好像没有调用m_pConnection.Open(...)。
      

  4.   

    SELECT 语句, money 加上中括号
      

  5.   

    ADODB.Recordset有两个Open方法一个是连接,一个是打开游标,好像应该先连接,再打开游标,如// 步骤 1 — 打开连接      pConn->Open("dsn=pubs;uid=sa;pwd=;");//步骤 2 — 创建命令// 步骤 3 — 执行命令      pRs->Open("select * from authors", pConn, 
             adOpenDynamic, adLockOptimistic, adCmdUnknown);
          
          if (FAILED(hr = pRs->QueryInterface(__uuidof(IADORecordBinding), 
                (LPVOID*)&picRs)))
             _com_issue_error(hr);
          
          if (FAILED(hr = picRs->BindToRecordset(&rs)))
             _com_issue_error(hr);
    我在msdn中找到的,不知打是否正确。
      

  6.   

    我想问问,你们在MSDN里是如何寻找的,我为什么就很难找到我要的东西呢?
    请赐教:
      

  7.   

    我在BOOL CAccountDBSSApp::InitInstance()
    {
    // Initialize OLE libraries
    SetDialogBkColor(RGB(0,200,200),RGB(255,0,0));
    AfxEnableControlContainer();//初始化COM库
    if (!AfxOleInit())
    {
    AfxMessageBox("OLE初始化出错");
    return FALSE;
    }

    m_pConnection.CreateInstance(_uuidof(Connection));
     
    try
    {
           m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
          _bstr_t  strConnect="Provider=OraOLEDB.Oracle.1;Password=dbaccount;User ID=dbaccount;Data Source=ORADB;Persist Security Info=True";
    //连接参数可以不需要用户ID或密码;
      m_pConnection->Open(strConnect,"","",-1);
      AfxMessageBox("欢迎使用家庭理财管理系统");
      
      
    }
    catch (_com_error e) //异常处理
    {
       AfxMessageBox(e.ErrorMessage());
    }这个函数里调用了你好像没有调用m_pConnection.Open(...)。,应该没有什么问题了吧?可是程序操作还是会出错