sql.Format("insert into tbkind(name,value) values('%s','%s')",name,s);
 pRec->Open((_variant_t)sql,(_variant_t)pConn,adOpenStatic,
            adLockOptimistic,adCmdText);
我用如上语句不能插入记录,为什么?
有的地方不写(_variant_t)sql而只写sql,这里若不写的话就提示错误,不知道为什么?请各大夹帮忙看一看

解决方案 »

  1.   

    kao,请大家帮个忙。
    先谢谢了
      

  2.   

    沒寫過ADO的程序,但是記得在ODBC中用Insert語句插入數據時,用CDatabase比用CRecordset好一些吧.我還在學習數據庫編程,大家有興趣的話,探討一下
      

  3.   

    你的这个sql又不返回结果集的,干吗用_RecordsetPtr
     用 pConn-> ExcSQL  z之类的
      

  4.   

    _variant_t RecordsAffected;
    m_pConn->Execute(sql,&RecordsAffected,adCmdText); 
      

  5.   

    这样写不行
    必需把那个sql换成_variant_t型的东东:
    _variant_t tt;
    tt=sql;
    m_pConn->Execute(tt.bstrVal,NULL,adCmdText);
    但这样还是添加不上,为什么?
    还望 wistaria(听风听雨) 朋友再看看
      

  6.   

    错误是这样的:
    title是DOCOM,内容是"IDispatch error #3092"
    我也不知道为什么总是有这样的错误
    help me please
      

  7.   

    我一般是用
    CString m_SqlStr;
    mSqlStr.Format(....);
    m_Conn->Execute(m_SqlStr.AllocSysString(),NULL,adCmdText);
      

  8.   

    m_pConn->Execute(szSQL,NULL,adCmdText|adExecuteNoRecords);
      

  9.   

    为什么出错的总是我?
    sql.Format("insert into tbkind(name,value) values('%s','%s')",name,s);
    pConn->Execute(sql.AllocSysString(),NULL,adCmdText);
    这样还错吗?
    还望vc_boy()朋友再look look
      

  10.   

    后边我再加上adExecuteNoRecords也不行
    靠,我快要不知所措了
    请 xinxingsuibian(随便)朋友能不能写上一小段代码以便更直观
      

  11.   

    哪句出错?Execute?错误是什么?
    可以用
    try
    {
      pConn->Execute(....);
    }
    catch(_com_error &e)
    {
       CString m_err;
       m_err = e.ErrorMessage(); //好像是这个
       AfxMessageBox(m_err);
    }
    看看能不能捕到错误
      

  12.   

    错误已经捕获,如前所述,好吧,再把它写出来,是这样的: title是DOCOM,内容是"IDispatch error #3092"
      

  13.   

    你可以先进行DEBUG,把sql的内空取出来,然后在Sql的查询分析器中(如果你用的是Sql Server)或其他数据库的相应工具中执行一下,先确认一下你的当前要执行的Sql语句是对的
      

  14.   

    我能肯定sql语句没有错误
    我把它打印出来是这样的:
    insert into tbkind(name,value) values('部门','培训中心')
      

  15.   

    我用的access数据库,只有两 个表,而且没有字段间的联系
      

  16.   

    啊,我明白了,我的一个字段是value,不能用它,我把它改为val就好了不过还有一个不相关的问题,就是如何把一个listbox框中的内容给清除掉?
      

  17.   

    看看我写的,我直接用connection对象执行sql语句的,环境和你差不多,access数据库,98,2000都运行过没问题的。
    //生成插入记录的SQL字符串
    CString strNum;
    CString cmd1=""; //字符串过长,需要连接两个CString对象
    CString cmd="Update Measure Set ";
    cmd+="[StartX]=" + m_StartX + ", ";
    cmd+="[StartY]=" + m_StartY + ", ";
    cmd+="[EndX]=" + m_EndX + ", ";
    cmd+="[EndY]=" + m_EndY + ", ";
    cmd+="[LenPixel]=" + m_Pixel + ", ";
    cmd+="[LenMM]=" + m_mm + ", ";
    cmd+="[LenInch]=" + m_Inch + ", ";
    cmd+="[AreaRectPixel]=" + m_AreaRect_Pixel + ", ";
    cmd+="[AreaRectMM]=" + m_AreaRect_MM + ", ";
    cmd+="[AreaRectInch]=" + m_AreaRect_Inch + ", ";
    cmd1+="[AreaCirPixel]=" + m_AreaCir_Pixel + ", ";
    cmd1+="[AreaCirMM]=" + m_AreaCir_MM + ", ";
    cmd1+="[AreaCirInch]=" + m_AreaCir_Inch + ",";
    COleDateTime current;
    current = COleDateTime::GetCurrentTime();
    cmd1+="[SaveDate]='" + current.Format("%Y-%m-%d %H:%M:%S") + "' ";
    strNum.Format("%d",m_ID);
    cmd1+="Where ID=" + strNum;
    //插入记录
    m_pConnection->Execute((_bstr_t)(cmd+cmd1),NULL,adCmdText);
    呵呵,多给点分于我噢
      

  18.   

    再回答一个问题:
      就是我的listbox中第一次显示文件的时候总是乱码,我从下拉框中选择一个新的,然后清除listbox中的内容并把相应的内容写入listbox,这时是正常显示,我搞不明白
      

  19.   

    sql.Format("insert into tbkind(name,value) values('%s','%s')",name,s);
     pRec->Open((_variant_t)sql,(_variant_t)pConn,adOpenStatic,
                adLockOptimistic,adCmdText);要想写入数据,就用_RecordsetPrt的Open()
    我在程序里是这样用的
    strsql="select语句"
    pRs->Open(strsql,pConn.GetInterfacePtr,动态集,悲观锁定,adCmdText);
    commandText="Insert语句"
    pCommand->Execute(NULL,NULL,-1);